From 0c95229de0344f774f1c2966f980ae219fa04466 Mon Sep 17 00:00:00 2001 From: liangzhou <594755172@qq.com> Date: Fri, 21 Jun 2024 08:17:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E7=89=88=E4=BD=9C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 34 + .mvn/wrapper/maven-wrapper.jar | Bin 0 -> 58727 bytes .mvn/wrapper/maven-wrapper.properties | 2 + mvnw | 316 ++ mvnw.cmd | 188 ++ pom.xml | 180 ++ src/main/java/META-INF/MANIFEST.MF | 3 + src/main/java/com/wms/WmsApplication.java | 44 + src/main/java/com/wms/annotation/MyLog.java | 23 + .../java/com/wms/annotation/MyLogAspect.java | 133 + .../java/com/wms/config/InitLocalConfig.java | 38 + .../com/wms/config/MybatisPlusConfig.java | 26 + .../java/com/wms/config/PageHelperConfig.java | 24 + .../java/com/wms/config/ThreadPoolConfig.java | 37 + .../java/com/wms/constants/WmsConstants.java | 18 + .../com/wms/constants/enums/GoodsStatus.java | 29 + .../wms/constants/enums/KateTaskStatus.java | 25 + .../wms/constants/enums/LocationStatus.java | 27 + .../com/wms/constants/enums/MesStatus.java | 27 + .../com/wms/constants/enums/ResponseCode.java | 27 + .../com/wms/constants/enums/StandStatus.java | 26 + .../com/wms/constants/enums/StockStatus.java | 29 + .../com/wms/constants/enums/TaskType.java | 28 + .../com/wms/constants/enums/UrlEnums.java | 22 + .../wms/constants/enums/VehicleStatus.java | 27 + .../constants/enums/WcsChangeTaskStatus.java | 26 + .../wms/constants/enums/WcsTaskStatus.java | 31 + .../wms/constants/enums/WmsTaskStatus.java | 31 + .../com/wms/controller/ConfigController.java | 83 + .../com/wms/controller/ExcelController.java | 121 + .../com/wms/controller/GoodsController.java | 240 ++ .../java/com/wms/controller/JobComponent.java | 183 ++ .../wms/controller/LocationController.java | 319 ++ .../com/wms/controller/RecordController.java | 93 + .../com/wms/controller/StandController.java | 136 + .../com/wms/controller/StockController.java | 164 + .../com/wms/controller/SystemController.java | 90 + .../com/wms/controller/TaskController.java | 93 + .../wms/controller/TaskDealController.java | 172 + .../com/wms/controller/TestController.java | 221 ++ .../com/wms/controller/UserController.java | 208 ++ .../com/wms/controller/WmsLogController.java | 70 + .../com/wms/entity/app/ResponseEntity.java | 46 + .../wms/entity/app/display/LocationData.java | 55 + .../wms/entity/app/display/LocationInfo.java | 45 + .../com/wms/entity/app/dto/ConfigDto.java | 34 + .../java/com/wms/entity/app/dto/GoodsDto.java | 56 + .../com/wms/entity/app/dto/LocationDto.java | 50 + .../java/com/wms/entity/app/dto/MenuDto.java | 30 + .../java/com/wms/entity/app/dto/PageDto.java | 43 + .../java/com/wms/entity/app/dto/StandDto.java | 57 + .../java/com/wms/entity/app/dto/StockDto.java | 66 + .../java/com/wms/entity/app/dto/TaskDto.java | 70 + .../com/wms/entity/app/dto/TaskRecordDto.java | 67 + .../java/com/wms/entity/app/dto/UserDto.java | 28 + .../com/wms/entity/app/dto/VehicleDto.java | 35 + .../com/wms/entity/app/dto/WmsLogDto.java | 46 + .../app/dto/extend/StockDetailInfo.java | 19 + .../entity/app/dto/extend/TaskDetailInfo.java | 15 + .../app/dto/extend/VehicleDetailInfo.java | 18 + .../com/wms/entity/app/query/GoodsQuery.java | 33 + .../com/wms/entity/app/query/PageQuery.java | 48 + .../com/wms/entity/app/query/StockQuery.java | 47 + .../wms/entity/app/query/TaskRecordQuery.java | 41 + .../com/wms/entity/app/vo/LayerLocation.java | 36 + .../com/wms/entity/app/vo/MenuEntity.java | 70 + .../com/wms/entity/app/vo/RowLocation.java | 34 + .../java/com/wms/entity/app/vo/StockVo.java | 14 + .../wms/entity/app/vo/UserConfigEntity.java | 35 + .../com/wms/entity/app/wcs/ETaskData.java | 58 + .../entity/app/wcs/WcsBoxArriveRequest.java | 48 + .../entity/app/wcs/WcsChangeTaskRequest.java | 28 + .../wms/entity/app/wcs/WcsCommonResponse.java | 38 + .../app/wcs/WcsETaskFeedbackRequest.java | 108 + .../wms/entity/app/wcs/WcsETaskRequest.java | 60 + .../app/wcs/WcsFeedbackTaskRequest.java | 48 + .../entity/app/wcs/WcsStandTaskRequest.java | 60 + .../wms/entity/app/wcs/WcsTaskRequest.java | 93 + .../entity/app/wcs/WcsVehicleInRequest.java | 48 + .../java/com/wms/entity/page/PageDomain.java | 67 + .../com/wms/entity/page/TableRequest.java | 43 + .../com/wms/entity/page/TableResponse.java | 57 + .../java/com/wms/entity/table/Config.java | 44 + src/main/java/com/wms/entity/table/Goods.java | 68 + .../java/com/wms/entity/table/Location.java | 64 + src/main/java/com/wms/entity/table/Menu.java | 39 + src/main/java/com/wms/entity/table/Stand.java | 74 + src/main/java/com/wms/entity/table/Stock.java | 80 + src/main/java/com/wms/entity/table/Task.java | 89 + .../java/com/wms/entity/table/TaskRecord.java | 86 + src/main/java/com/wms/entity/table/User.java | 49 + .../java/com/wms/entity/table/Vehicle.java | 46 + .../java/com/wms/entity/table/WmsLog.java | 57 + .../java/com/wms/entity/test/ExcelTest.java | 36 + .../java/com/wms/mapper/ConfigMapper.java | 15 + src/main/java/com/wms/mapper/GoodsMapper.java | 10 + .../java/com/wms/mapper/LocationMapper.java | 10 + src/main/java/com/wms/mapper/LogMapper.java | 10 + src/main/java/com/wms/mapper/MenuMapper.java | 13 + src/main/java/com/wms/mapper/StandMapper.java | 10 + src/main/java/com/wms/mapper/StockMapper.java | 10 + src/main/java/com/wms/mapper/TaskMapper.java | 10 + .../java/com/wms/mapper/TaskRecordMapper.java | 10 + src/main/java/com/wms/mapper/UserMapper.java | 10 + .../java/com/wms/mapper/VehicleMapper.java | 10 + .../java/com/wms/service/ConfigService.java | 11 + .../java/com/wms/service/GoodsService.java | 4 + .../java/com/wms/service/LocationService.java | 5 + src/main/java/com/wms/service/LogService.java | 13 + .../java/com/wms/service/MenuService.java | 5 + .../java/com/wms/service/StandService.java | 8 + .../java/com/wms/service/StockService.java | 11 + .../com/wms/service/TaskRecordService.java | 34 + .../java/com/wms/service/TaskService.java | 5 + .../java/com/wms/service/UserService.java | 5 + .../java/com/wms/service/VehicleService.java | 12 + .../ConfigServiceImplement.java | 39 + .../GoodsServiceImplements.java | 57 + .../LocationServiceImplements.java | 42 + .../LogServiceImplements.java | 23 + .../MenuServiceImplements.java | 23 + .../StandServiceImplements.java | 45 + .../StockServiceImplements.java | 32 + .../TaskRecordServiceImplements.java | 57 + .../TaskServiceImplements.java | 40 + .../UserServiceImplements.java | 24 + .../VehicleServiceImplements.java | 31 + .../wms/system_service/ISystemService.java | 16 + .../SystemServiceImplements.java | 43 + src/main/java/com/wms/utils/HttpUtils.java | 227 ++ src/main/java/com/wms/utils/JWTUtils.java | 15 + src/main/java/com/wms/utils/MyPassword.java | 113 + src/main/java/com/wms/utils/StringUtils.java | 121 + src/main/java/com/wms/utils/TokenUtils.java | 6 + src/main/java/com/wms/utils/WmsUtils.java | 181 ++ .../com/wms/utils/excel/ExcelClassField.java | 71 + .../java/com/wms/utils/excel/ExcelExport.java | 22 + .../java/com/wms/utils/excel/ExcelImport.java | 25 + .../java/com/wms/utils/excel/ExcelUtils.java | 1026 ++++++ src/main/resources/application.yml | 73 + src/main/resources/logback-spring.xml | 122 + src/main/resources/mapper/ConfigMapper.xml | 26 + src/main/resources/mapper/GoodsMapper.xml | 98 + src/main/resources/mapper/LocationMapper.xml | 111 + src/main/resources/mapper/LogMapper.xml | 81 + src/main/resources/mapper/MenuMapper.xml | 18 + src/main/resources/mapper/StandMapper.xml | 103 + src/main/resources/mapper/StockMapper.xml | 211 ++ src/main/resources/mapper/TaskMapper.xml | 185 ++ .../resources/mapper/TaskRecordMapper.xml | 185 ++ src/main/resources/mapper/UserMapper.xml | 30 + src/main/resources/mapper/VehicleMapper.xml | 62 + src/main/resources/sql/wms_kate_suzhou.sql | 2799 +++++++++++++++++ 153 files changed, 12854 insertions(+) create mode 100644 .gitignore create mode 100644 .mvn/wrapper/maven-wrapper.jar create mode 100644 .mvn/wrapper/maven-wrapper.properties create mode 100644 mvnw create mode 100644 mvnw.cmd create mode 100644 pom.xml create mode 100644 src/main/java/META-INF/MANIFEST.MF create mode 100644 src/main/java/com/wms/WmsApplication.java create mode 100644 src/main/java/com/wms/annotation/MyLog.java create mode 100644 src/main/java/com/wms/annotation/MyLogAspect.java create mode 100644 src/main/java/com/wms/config/InitLocalConfig.java create mode 100644 src/main/java/com/wms/config/MybatisPlusConfig.java create mode 100644 src/main/java/com/wms/config/PageHelperConfig.java create mode 100644 src/main/java/com/wms/config/ThreadPoolConfig.java create mode 100644 src/main/java/com/wms/constants/WmsConstants.java create mode 100644 src/main/java/com/wms/constants/enums/GoodsStatus.java create mode 100644 src/main/java/com/wms/constants/enums/KateTaskStatus.java create mode 100644 src/main/java/com/wms/constants/enums/LocationStatus.java create mode 100644 src/main/java/com/wms/constants/enums/MesStatus.java create mode 100644 src/main/java/com/wms/constants/enums/ResponseCode.java create mode 100644 src/main/java/com/wms/constants/enums/StandStatus.java create mode 100644 src/main/java/com/wms/constants/enums/StockStatus.java create mode 100644 src/main/java/com/wms/constants/enums/TaskType.java create mode 100644 src/main/java/com/wms/constants/enums/UrlEnums.java create mode 100644 src/main/java/com/wms/constants/enums/VehicleStatus.java create mode 100644 src/main/java/com/wms/constants/enums/WcsChangeTaskStatus.java create mode 100644 src/main/java/com/wms/constants/enums/WcsTaskStatus.java create mode 100644 src/main/java/com/wms/constants/enums/WmsTaskStatus.java create mode 100644 src/main/java/com/wms/controller/ConfigController.java create mode 100644 src/main/java/com/wms/controller/ExcelController.java create mode 100644 src/main/java/com/wms/controller/GoodsController.java create mode 100644 src/main/java/com/wms/controller/JobComponent.java create mode 100644 src/main/java/com/wms/controller/LocationController.java create mode 100644 src/main/java/com/wms/controller/RecordController.java create mode 100644 src/main/java/com/wms/controller/StandController.java create mode 100644 src/main/java/com/wms/controller/StockController.java create mode 100644 src/main/java/com/wms/controller/SystemController.java create mode 100644 src/main/java/com/wms/controller/TaskController.java create mode 100644 src/main/java/com/wms/controller/TaskDealController.java create mode 100644 src/main/java/com/wms/controller/TestController.java create mode 100644 src/main/java/com/wms/controller/UserController.java create mode 100644 src/main/java/com/wms/controller/WmsLogController.java create mode 100644 src/main/java/com/wms/entity/app/ResponseEntity.java create mode 100644 src/main/java/com/wms/entity/app/display/LocationData.java create mode 100644 src/main/java/com/wms/entity/app/display/LocationInfo.java create mode 100644 src/main/java/com/wms/entity/app/dto/ConfigDto.java create mode 100644 src/main/java/com/wms/entity/app/dto/GoodsDto.java create mode 100644 src/main/java/com/wms/entity/app/dto/LocationDto.java create mode 100644 src/main/java/com/wms/entity/app/dto/MenuDto.java create mode 100644 src/main/java/com/wms/entity/app/dto/PageDto.java create mode 100644 src/main/java/com/wms/entity/app/dto/StandDto.java create mode 100644 src/main/java/com/wms/entity/app/dto/StockDto.java create mode 100644 src/main/java/com/wms/entity/app/dto/TaskDto.java create mode 100644 src/main/java/com/wms/entity/app/dto/TaskRecordDto.java create mode 100644 src/main/java/com/wms/entity/app/dto/UserDto.java create mode 100644 src/main/java/com/wms/entity/app/dto/VehicleDto.java create mode 100644 src/main/java/com/wms/entity/app/dto/WmsLogDto.java create mode 100644 src/main/java/com/wms/entity/app/dto/extend/StockDetailInfo.java create mode 100644 src/main/java/com/wms/entity/app/dto/extend/TaskDetailInfo.java create mode 100644 src/main/java/com/wms/entity/app/dto/extend/VehicleDetailInfo.java create mode 100644 src/main/java/com/wms/entity/app/query/GoodsQuery.java create mode 100644 src/main/java/com/wms/entity/app/query/PageQuery.java create mode 100644 src/main/java/com/wms/entity/app/query/StockQuery.java create mode 100644 src/main/java/com/wms/entity/app/query/TaskRecordQuery.java create mode 100644 src/main/java/com/wms/entity/app/vo/LayerLocation.java create mode 100644 src/main/java/com/wms/entity/app/vo/MenuEntity.java create mode 100644 src/main/java/com/wms/entity/app/vo/RowLocation.java create mode 100644 src/main/java/com/wms/entity/app/vo/StockVo.java create mode 100644 src/main/java/com/wms/entity/app/vo/UserConfigEntity.java create mode 100644 src/main/java/com/wms/entity/app/wcs/ETaskData.java create mode 100644 src/main/java/com/wms/entity/app/wcs/WcsBoxArriveRequest.java create mode 100644 src/main/java/com/wms/entity/app/wcs/WcsChangeTaskRequest.java create mode 100644 src/main/java/com/wms/entity/app/wcs/WcsCommonResponse.java create mode 100644 src/main/java/com/wms/entity/app/wcs/WcsETaskFeedbackRequest.java create mode 100644 src/main/java/com/wms/entity/app/wcs/WcsETaskRequest.java create mode 100644 src/main/java/com/wms/entity/app/wcs/WcsFeedbackTaskRequest.java create mode 100644 src/main/java/com/wms/entity/app/wcs/WcsStandTaskRequest.java create mode 100644 src/main/java/com/wms/entity/app/wcs/WcsTaskRequest.java create mode 100644 src/main/java/com/wms/entity/app/wcs/WcsVehicleInRequest.java create mode 100644 src/main/java/com/wms/entity/page/PageDomain.java create mode 100644 src/main/java/com/wms/entity/page/TableRequest.java create mode 100644 src/main/java/com/wms/entity/page/TableResponse.java create mode 100644 src/main/java/com/wms/entity/table/Config.java create mode 100644 src/main/java/com/wms/entity/table/Goods.java create mode 100644 src/main/java/com/wms/entity/table/Location.java create mode 100644 src/main/java/com/wms/entity/table/Menu.java create mode 100644 src/main/java/com/wms/entity/table/Stand.java create mode 100644 src/main/java/com/wms/entity/table/Stock.java create mode 100644 src/main/java/com/wms/entity/table/Task.java create mode 100644 src/main/java/com/wms/entity/table/TaskRecord.java create mode 100644 src/main/java/com/wms/entity/table/User.java create mode 100644 src/main/java/com/wms/entity/table/Vehicle.java create mode 100644 src/main/java/com/wms/entity/table/WmsLog.java create mode 100644 src/main/java/com/wms/entity/test/ExcelTest.java create mode 100644 src/main/java/com/wms/mapper/ConfigMapper.java create mode 100644 src/main/java/com/wms/mapper/GoodsMapper.java create mode 100644 src/main/java/com/wms/mapper/LocationMapper.java create mode 100644 src/main/java/com/wms/mapper/LogMapper.java create mode 100644 src/main/java/com/wms/mapper/MenuMapper.java create mode 100644 src/main/java/com/wms/mapper/StandMapper.java create mode 100644 src/main/java/com/wms/mapper/StockMapper.java create mode 100644 src/main/java/com/wms/mapper/TaskMapper.java create mode 100644 src/main/java/com/wms/mapper/TaskRecordMapper.java create mode 100644 src/main/java/com/wms/mapper/UserMapper.java create mode 100644 src/main/java/com/wms/mapper/VehicleMapper.java create mode 100644 src/main/java/com/wms/service/ConfigService.java create mode 100644 src/main/java/com/wms/service/GoodsService.java create mode 100644 src/main/java/com/wms/service/LocationService.java create mode 100644 src/main/java/com/wms/service/LogService.java create mode 100644 src/main/java/com/wms/service/MenuService.java create mode 100644 src/main/java/com/wms/service/StandService.java create mode 100644 src/main/java/com/wms/service/StockService.java create mode 100644 src/main/java/com/wms/service/TaskRecordService.java create mode 100644 src/main/java/com/wms/service/TaskService.java create mode 100644 src/main/java/com/wms/service/UserService.java create mode 100644 src/main/java/com/wms/service/VehicleService.java create mode 100644 src/main/java/com/wms/service/serviceImplements/ConfigServiceImplement.java create mode 100644 src/main/java/com/wms/service/serviceImplements/GoodsServiceImplements.java create mode 100644 src/main/java/com/wms/service/serviceImplements/LocationServiceImplements.java create mode 100644 src/main/java/com/wms/service/serviceImplements/LogServiceImplements.java create mode 100644 src/main/java/com/wms/service/serviceImplements/MenuServiceImplements.java create mode 100644 src/main/java/com/wms/service/serviceImplements/StandServiceImplements.java create mode 100644 src/main/java/com/wms/service/serviceImplements/StockServiceImplements.java create mode 100644 src/main/java/com/wms/service/serviceImplements/TaskRecordServiceImplements.java create mode 100644 src/main/java/com/wms/service/serviceImplements/TaskServiceImplements.java create mode 100644 src/main/java/com/wms/service/serviceImplements/UserServiceImplements.java create mode 100644 src/main/java/com/wms/service/serviceImplements/VehicleServiceImplements.java create mode 100644 src/main/java/com/wms/system_service/ISystemService.java create mode 100644 src/main/java/com/wms/system_service/serviceImplents/SystemServiceImplements.java create mode 100644 src/main/java/com/wms/utils/HttpUtils.java create mode 100644 src/main/java/com/wms/utils/JWTUtils.java create mode 100644 src/main/java/com/wms/utils/MyPassword.java create mode 100644 src/main/java/com/wms/utils/StringUtils.java create mode 100644 src/main/java/com/wms/utils/TokenUtils.java create mode 100644 src/main/java/com/wms/utils/WmsUtils.java create mode 100644 src/main/java/com/wms/utils/excel/ExcelClassField.java create mode 100644 src/main/java/com/wms/utils/excel/ExcelExport.java create mode 100644 src/main/java/com/wms/utils/excel/ExcelImport.java create mode 100644 src/main/java/com/wms/utils/excel/ExcelUtils.java create mode 100644 src/main/resources/application.yml create mode 100644 src/main/resources/logback-spring.xml create mode 100644 src/main/resources/mapper/ConfigMapper.xml create mode 100644 src/main/resources/mapper/GoodsMapper.xml create mode 100644 src/main/resources/mapper/LocationMapper.xml create mode 100644 src/main/resources/mapper/LogMapper.xml create mode 100644 src/main/resources/mapper/MenuMapper.xml create mode 100644 src/main/resources/mapper/StandMapper.xml create mode 100644 src/main/resources/mapper/StockMapper.xml create mode 100644 src/main/resources/mapper/TaskMapper.xml create mode 100644 src/main/resources/mapper/TaskRecordMapper.xml create mode 100644 src/main/resources/mapper/UserMapper.xml create mode 100644 src/main/resources/mapper/VehicleMapper.xml create mode 100644 src/main/resources/sql/wms_kate_suzhou.sql diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b38d1e5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,34 @@ +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 +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ +.log + +### VS Code ### +.vscode/ diff --git a/.mvn/wrapper/maven-wrapper.jar b/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..c1dd12f17644411d6e840bd5a10c6ecda0175f18 GIT binary patch literal 58727 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%0ANsA|A3-jj|r`KAo%oTajX3>^E` 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 YM{}PByk10KD_nuQ4E7Du?}+~TKh4V)`~Uy| literal 0 HcmV?d00001 diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..b74bf7f --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,2 @@ +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.6/apache-maven-3.8.6-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar diff --git a/mvnw b/mvnw new file mode 100644 index 0000000..8a8fb22 --- /dev/null +++ b/mvnw @@ -0,0 +1,316 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /usr/local/etc/mavenrc ] ; then + . /usr/local/etc/mavenrc + fi + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`\\unset -f command; \\command -v java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + $MAVEN_DEBUG_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" \ + "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 0000000..1d8ab01 --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,188 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% ^ + %JVM_CONFIG_MAVEN_PROPS% ^ + %MAVEN_OPTS% ^ + %MAVEN_DEBUG_OPTS% ^ + -classpath %WRAPPER_JAR% ^ + "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ + %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%"=="on" pause + +if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% + +cmd /C exit /B %ERROR_CODE% diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..092fa33 --- /dev/null +++ b/pom.xml @@ -0,0 +1,180 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.0.2 + + + com + WMS + 3.0 + WMS + WMS + + 17 + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + + com.baomidou + mybatis-plus-spring-boot3-starter + 3.5.6 + + + com.baomidou + dynamic-datasource-spring-boot-starter + 4.3.0 + + + com.baomidou + mybatis-plus-boot-starter-test + 3.5.6 + + + com.mysql + mysql-connector-j + 8.2.0 + runtime + + + + org.springframework.boot + spring-boot-starter-validation + + + cn.hutool + hutool-all + 5.8.25 + + + + org.apache.commons + commons-lang3 + + + + + com.fasterxml.jackson.core + jackson-databind + + + + + com.alibaba + fastjson + 2.0.21 + + + + + org.apache.httpcomponents + httpclient + 4.5.13 + + + + + com.google.guava + guava + 32.0.0-android + + + + com.github.pagehelper + pagehelper + 5.3.1 + + + com.github.jsqlparser + jsqlparser + 4.4 + + + + + org.apache.httpcomponents + httpmime + 4.5.14 + + + + org.apache.poi + poi-ooxml + 5.2.3 + + + org.apache.poi + poi + 5.2.3 + + + org.projectlombok + lombok + + + + + org.apache.oltu.oauth2 + org.apache.oltu.oauth2.client + 1.0.1 + + + + com.auth0 + java-jwt + 4.4.0 + + + + io.springfox + springfox-swagger2 + 2.9.2 + + + io.springfox + springfox-swagger-ui + 2.9.2 + + + + + org.springframework.boot + spring-boot-starter-aop + 3.2.1 + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + org.apache.maven.plugins + maven-compiler-plugin + + 16 + 16 + + + + + + diff --git a/src/main/java/META-INF/MANIFEST.MF b/src/main/java/META-INF/MANIFEST.MF new file mode 100644 index 0000000..6382671 --- /dev/null +++ b/src/main/java/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: com.wuxiShenNan_W8.WmsTestversionApplication + diff --git a/src/main/java/com/wms/WmsApplication.java b/src/main/java/com/wms/WmsApplication.java new file mode 100644 index 0000000..f650d98 --- /dev/null +++ b/src/main/java/com/wms/WmsApplication.java @@ -0,0 +1,44 @@ +package com.wms; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +@SpringBootApplication +@EnableScheduling +@EnableTransactionManagement +@MapperScan("com.wms.mapper") +@EnableAsync +public class WmsApplication { + /** + * 用于重启程序的上下文 + */ + private static ConfigurableApplicationContext context; + + /** + * 主函数,程序的入口 + * + * @param args 命令行参数,以字符串数组形式传入 + */ + public static void main(String[] args) { + context = SpringApplication.run(WmsApplication.class, args); + } + + /** + * 重启程序 + */ + public static void restart() { + ApplicationArguments args = context.getBean(ApplicationArguments.class); + Thread thread = new Thread(() -> { + context.close(); + context = SpringApplication.run(WmsApplication.class, args.getSourceArgs()); + }); + thread.setDaemon(false); + thread.start(); + } +} diff --git a/src/main/java/com/wms/annotation/MyLog.java b/src/main/java/com/wms/annotation/MyLog.java new file mode 100644 index 0000000..75f3eed --- /dev/null +++ b/src/main/java/com/wms/annotation/MyLog.java @@ -0,0 +1,23 @@ +package com.wms.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 日志注解 + */ +@Target({ ElementType.PARAMETER, ElementType.METHOD }) +@Retention(RetentionPolicy.RUNTIME) +public @interface MyLog { + /** + * 日志标题 + */ + String logTitle() default ""; + + /** + * 方法名 + */ + String logMethod() default ""; +} diff --git a/src/main/java/com/wms/annotation/MyLogAspect.java b/src/main/java/com/wms/annotation/MyLogAspect.java new file mode 100644 index 0000000..26e8a94 --- /dev/null +++ b/src/main/java/com/wms/annotation/MyLogAspect.java @@ -0,0 +1,133 @@ +package com.wms.annotation; + +import com.wms.entity.table.WmsLog; +import com.wms.service.LogService; +import com.wms.utils.HttpUtils; +import com.wms.utils.WmsUtils; +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.*; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; + +import java.lang.reflect.Method; +import java.time.LocalDateTime; + +@Aspect +@Component +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class MyLogAspect { + private final LogService logService; + // 为了记录运行时间 + ThreadLocal startTime = new ThreadLocal<>(); + + /** + * 设置操作日志切入点,这里介绍两种方式: + * 1、基于注解切入(也就是打了自定义注解的方法才会切入) + * //@Pointcut("@annotation(com.wms.annotation.MyLog)") + * 2、基于包扫描切入 + * //@Pointcut("execution(public * com.wms.controller..*.*(..))") + */ + @Pointcut("@annotation(com.wms.annotation.MyLog)")//在注解的位置切入代码 + public void operLogPointCut() { + } + @Before("operLogPointCut()") + public void beforeMethod(JoinPoint point){ + startTime.set(System.currentTimeMillis()); + } + + /** + * 设置操作异常切入点记录异常日志 扫描所有controller包下操作 + */ + @Pointcut("execution(* com.wms.controller..*.*(..))") + public void operExceptionLogPointCut() { + } + + /** + * 正常返回通知,拦截用户操作日志,连接点正常执行完成后执行, 如果连接点抛出异常,则不会执行 + * @param joinPoint 切入点 + * @param result 返回结果 + */ + @AfterReturning(value = "operLogPointCut()", returning = "result") + public void saveOperLog(JoinPoint joinPoint, Object result) { + // 获取RequestAttributes + RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); + // 从获取RequestAttributes中获取HttpServletRequest的信息 + HttpServletRequest request = null; + if (requestAttributes != null) { + request = (HttpServletRequest) requestAttributes.resolveReference(RequestAttributes.REFERENCE_REQUEST); + } + try { + // 从切面织入点处通过反射机制获取织入点处的方法 + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + // 获取切入点所在的方法 + Method method = signature.getMethod(); + // 获取操作 + MyLog myLog = method.getAnnotation(MyLog.class); + WmsLog wmsLog = new WmsLog(); + wmsLog.setLogId(WmsUtils.generateId("LOG_")); + if (myLog != null) { + wmsLog.setLogTitle(myLog.logTitle()); + wmsLog.setLogMethod(myLog.logMethod()); + } + // 设置日志表详情 + wmsLog.setLogRequest(joinPoint.getArgs()); + wmsLog.setLogResponse(result); + if (request != null) { + wmsLog.setLogIp(HttpUtils.getIpAddr(request)); + } + wmsLog.setLogTime(LocalDateTime.now()); + // TODO 操作人员姓名待实现 + wmsLog.setLogUser(""); + logService.save(wmsLog); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 异常返回通知,用于拦截异常日志信息 + * @param joinPoint 切点 + * @param e 异常 + */ + @AfterThrowing(pointcut = "operExceptionLogPointCut()", throwing = "e") + public void saveExceptionLog(JoinPoint joinPoint, Throwable e) { + // 获取RequestAttributes + RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); + // 从获取RequestAttributes中获取HttpServletRequest的信息 + HttpServletRequest request = null; + if (requestAttributes != null) { + request = (HttpServletRequest) requestAttributes.resolveReference(RequestAttributes.REFERENCE_REQUEST); + } + try { + // 从切面织入点处通过反射机制获取织入点处的方法 + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + // 获取切入点所在的方法 + Method method = signature.getMethod(); + // 获取操作 + MyLog myLog = method.getAnnotation(MyLog.class); + WmsLog wmsLog = new WmsLog(); + wmsLog.setLogId(WmsUtils.generateId("LOG_")); + if (myLog != null) { + wmsLog.setLogTitle(myLog.logTitle()); + wmsLog.setLogMethod(myLog.logMethod()); + } + // 设置日志表详情 + wmsLog.setLogRequest(joinPoint.getArgs()); + wmsLog.setLogResponse(e); + if (request != null) { + wmsLog.setLogIp(HttpUtils.getIpAddr(request)); + } + wmsLog.setLogTime(LocalDateTime.now()); + // TODO 操作人员姓名待实现 + wmsLog.setLogUser(""); + logService.save(wmsLog); + } catch (Exception exception) { + exception.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/wms/config/InitLocalConfig.java b/src/main/java/com/wms/config/InitLocalConfig.java new file mode 100644 index 0000000..dbf1e68 --- /dev/null +++ b/src/main/java/com/wms/config/InitLocalConfig.java @@ -0,0 +1,38 @@ +package com.wms.config; + +import com.wms.entity.table.Config; +import com.wms.service.ConfigService; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Component +@Order(1) +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class InitLocalConfig implements ApplicationRunner { + /** + * 配置类 + */ + private final ConfigService configService; + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + public static Map configMap = new HashMap(); + @Override + public void run(ApplicationArguments args) { + List configs = configService.selectConfigs(""); + if (configs.size() > 0) { + for (Config config : configs) { + configMap.put(config.getConfigKey(), config.getConfigValue()); + logger.info("导入系统配置成功---{}:{}", config.getConfigName(), config.getConfigValue()); + } + } + } +} diff --git a/src/main/java/com/wms/config/MybatisPlusConfig.java b/src/main/java/com/wms/config/MybatisPlusConfig.java new file mode 100644 index 0000000..518335d --- /dev/null +++ b/src/main/java/com/wms/config/MybatisPlusConfig.java @@ -0,0 +1,26 @@ +package com.wms.config; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringBootConfiguration; +import org.springframework.context.annotation.Bean; + +/** + * mp配置类 + */ +@SpringBootConfiguration +@MapperScan("com.wms.mapper") +public class MybatisPlusConfig { + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + // 添加分页插件 + PaginationInnerInterceptor pageInnerInterceptor = new PaginationInnerInterceptor(); + pageInnerInterceptor.setDbType(DbType.MYSQL); + pageInnerInterceptor.setMaxLimit(1000L); + interceptor.addInnerInterceptor(pageInnerInterceptor); + return interceptor; + } +} diff --git a/src/main/java/com/wms/config/PageHelperConfig.java b/src/main/java/com/wms/config/PageHelperConfig.java new file mode 100644 index 0000000..2bed06f --- /dev/null +++ b/src/main/java/com/wms/config/PageHelperConfig.java @@ -0,0 +1,24 @@ +package com.wms.config; + +import com.github.pagehelper.PageHelper; +import org.springframework.boot.SpringBootConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.Properties; + +@SpringBootConfiguration +public class PageHelperConfig { + @Bean + public PageHelper pageHelper() { + PageHelper pageHelper = new PageHelper(); + //添加配置,也可以指定文件路径 + Properties p = new Properties(); + p.setProperty("helperDialect", "mysql"); + p.setProperty("reasonable", "true"); + p.setProperty("supportMethodsArguments", "true"); + p.setProperty("params", "count=countSql"); + pageHelper.setProperties(p); + return pageHelper; + } +} diff --git a/src/main/java/com/wms/config/ThreadPoolConfig.java b/src/main/java/com/wms/config/ThreadPoolConfig.java new file mode 100644 index 0000000..a7f54bf --- /dev/null +++ b/src/main/java/com/wms/config/ThreadPoolConfig.java @@ -0,0 +1,37 @@ +package com.wms.config; + +import org.springframework.boot.SpringBootConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.task.TaskExecutor; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.ThreadPoolExecutor; + +/** + * 线程池配置 + */ +@SpringBootConfiguration +public class ThreadPoolConfig { + @Bean +// @Bean("pool1") + public TaskExecutor taskExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + // 设置核心线程数 + executor.setCorePoolSize(10); + // 设置最大线程数 + executor.setMaxPoolSize(20); + // 设置队列容量 + executor.setQueueCapacity(100); + // 设置线程活跃时间(秒) + executor.setKeepAliveSeconds(60); + // 设置线程默认名称前缀 + executor.setThreadNamePrefix("wmsThreadPool-"); + // 设置拒绝策略 + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + // 等待所有任务结束后关闭线程池 + executor.setWaitForTasksToCompleteOnShutdown(true); + + return executor; + } +} diff --git a/src/main/java/com/wms/constants/WmsConstants.java b/src/main/java/com/wms/constants/WmsConstants.java new file mode 100644 index 0000000..4b5cdc1 --- /dev/null +++ b/src/main/java/com/wms/constants/WmsConstants.java @@ -0,0 +1,18 @@ +package com.wms.constants; + +import java.math.BigDecimal; +import java.util.Map; + +import com.google.common.collect.ImmutableMap; +import com.wms.constants.enums.WcsTaskStatus; +import com.wms.constants.enums.WmsTaskStatus; + +/** + * WMS系统所需的常量 + * @author 梁州 + * @date 2023/2/13 + */ +public class WmsConstants { + public static String EMPTY_STRING = ""; + public static String ROOT_MENU_ID = "0"; +} \ No newline at end of file diff --git a/src/main/java/com/wms/constants/enums/GoodsStatus.java b/src/main/java/com/wms/constants/enums/GoodsStatus.java new file mode 100644 index 0000000..e132ec1 --- /dev/null +++ b/src/main/java/com/wms/constants/enums/GoodsStatus.java @@ -0,0 +1,29 @@ +package com.wms.constants.enums; + +/** + * 物料状态枚举 + */ +public enum GoodsStatus { + OK(0, "合格"), + BAD(1, "不合格"), + DELAY(2, "延期"), + OVERDUE(3, "过期"), + SCRAP(5, "长时间未使用"); + + private final Integer code; + + private final String value; + + GoodsStatus(Integer code, String value) { + this.code = code; + this.value = value; + } + + public Integer getCode() { + return code; + } + + public String getValue() { + return value; + } +} diff --git a/src/main/java/com/wms/constants/enums/KateTaskStatus.java b/src/main/java/com/wms/constants/enums/KateTaskStatus.java new file mode 100644 index 0000000..9bc5846 --- /dev/null +++ b/src/main/java/com/wms/constants/enums/KateTaskStatus.java @@ -0,0 +1,25 @@ +package com.wms.constants.enums; + +public enum KateTaskStatus { + NEW(0, "待下发"), + WAIT(1, "已下发"), + RUN(2, "执行中"), + PICKING(3, "正在拣货"), + FINISH(5, "任务完成"); + + private final Integer code; + private final String name; + + KateTaskStatus(Integer code, String name) { + this.code = code; + this.name = name; + } + + public Integer getCode() { + return code; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/com/wms/constants/enums/LocationStatus.java b/src/main/java/com/wms/constants/enums/LocationStatus.java new file mode 100644 index 0000000..e034378 --- /dev/null +++ b/src/main/java/com/wms/constants/enums/LocationStatus.java @@ -0,0 +1,27 @@ +package com.wms.constants.enums; + +/** + * 库位状态枚举 + * /// 托盘状态和站台状态通用 + */ +public enum LocationStatus { + EMPTY(0, "空闲"), + OCCUPY(1, "占用"); + + private final Integer code; + + private final String value; + + LocationStatus(Integer code, String value) { + this.code = code; + this.value = value; + } + + public Integer getCode() { + return code; + } + + public String getValue() { + return value; + } +} diff --git a/src/main/java/com/wms/constants/enums/MesStatus.java b/src/main/java/com/wms/constants/enums/MesStatus.java new file mode 100644 index 0000000..99e915f --- /dev/null +++ b/src/main/java/com/wms/constants/enums/MesStatus.java @@ -0,0 +1,27 @@ +package com.wms.constants.enums; + +/** + * 向mes反馈的任务状态码 + */ +public enum MesStatus { + WAIT(0, "等待执行"), + RUN(1, "执行中"), + FINISH(2, "执行完成"), + EXCEPTION(3, "任务异常"); + + private final Integer statusCode; + private final String statusInfo; + + MesStatus(Integer statusCode, String statusInfo) { + this.statusCode = statusCode; + this.statusInfo = statusInfo; + } + + public Integer getStatusCode() { + return statusCode; + } + + public String getStatusInfo() { + return statusInfo; + } +} diff --git a/src/main/java/com/wms/constants/enums/ResponseCode.java b/src/main/java/com/wms/constants/enums/ResponseCode.java new file mode 100644 index 0000000..92fc841 --- /dev/null +++ b/src/main/java/com/wms/constants/enums/ResponseCode.java @@ -0,0 +1,27 @@ +package com.wms.constants.enums; + +/** + * 接口响应码枚举 + */ +public enum ResponseCode { + OK(0, "正常"), + WARNING(200, "警告"), + ERROR(999, "异常"); + + private final Integer code; + + private final String value; + + ResponseCode(Integer code, String value) { + this.code = code; + this.value = value; + } + + public Integer getCode() { + return code; + } + + public String getValue() { + return value; + } +} diff --git a/src/main/java/com/wms/constants/enums/StandStatus.java b/src/main/java/com/wms/constants/enums/StandStatus.java new file mode 100644 index 0000000..5a8a4bf --- /dev/null +++ b/src/main/java/com/wms/constants/enums/StandStatus.java @@ -0,0 +1,26 @@ +package com.wms.constants.enums; + +/** + * 站台状态的枚举 + */ +public enum StandStatus { + OK(0, "可用"), + OCCUPY(1, "占用"); + + private final Integer code; + + private final String value; + + StandStatus(Integer code, String value) { + this.code = code; + this.value = value; + } + + public Integer getCode() { + return code; + } + + public String getValue() { + return value; + } +} diff --git a/src/main/java/com/wms/constants/enums/StockStatus.java b/src/main/java/com/wms/constants/enums/StockStatus.java new file mode 100644 index 0000000..c0eee3f --- /dev/null +++ b/src/main/java/com/wms/constants/enums/StockStatus.java @@ -0,0 +1,29 @@ +package com.wms.constants.enums; + +/** + * 库存状态枚举 + */ +public enum StockStatus { + OK(0, "库存正常"), + OUT(1, "出库中"), + INVENTORY(2, "盘点中"), + MOVE(3, "移库中"), + LOCK(9, "库存锁定"); + + private final Integer code; + + private final String value; + + StockStatus(Integer code, String value) { + this.code = code; + this.value = value; + } + + public Integer getCode() { + return code; + } + + public String getValue() { + return value; + } +} diff --git a/src/main/java/com/wms/constants/enums/TaskType.java b/src/main/java/com/wms/constants/enums/TaskType.java new file mode 100644 index 0000000..c6d126a --- /dev/null +++ b/src/main/java/com/wms/constants/enums/TaskType.java @@ -0,0 +1,28 @@ +package com.wms.constants.enums; + +/** + * 任务类型枚举 + */ +public enum TaskType { + IN(1, "入库"), + OUT(2, "出库"), + INVENTORY(3, "盘点"), + MOVE(9, "移库"); + + private final Integer code; + + private final String value; + + TaskType(Integer code, String value) { + this.code = code; + this.value = value; + } + + public Integer getCode() { + return code; + } + + public String getValue() { + return value; + } +} diff --git a/src/main/java/com/wms/constants/enums/UrlEnums.java b/src/main/java/com/wms/constants/enums/UrlEnums.java new file mode 100644 index 0000000..8dedbd5 --- /dev/null +++ b/src/main/java/com/wms/constants/enums/UrlEnums.java @@ -0,0 +1,22 @@ +package com.wms.constants.enums; + +public enum UrlEnums { + URL_WMS_TO_WCS_SEND_TASK("WMS向WCS发送任务", "/api/Wms/WmsTask/SetStackerTask"), + URL_WMS_TO_WCS_CHANGE_TASK("WMS请求变更任务状态", "/api/Wms/WmsTask/ChangeTaskStatus"); + + private final String description; + private final String value; + + UrlEnums(String description, String value) { + this.description = description; + this.value = value; + } + + public String getDescription() { + return description; + } + + public String getValue() { + return value; + } +} diff --git a/src/main/java/com/wms/constants/enums/VehicleStatus.java b/src/main/java/com/wms/constants/enums/VehicleStatus.java new file mode 100644 index 0000000..7a17731 --- /dev/null +++ b/src/main/java/com/wms/constants/enums/VehicleStatus.java @@ -0,0 +1,27 @@ +package com.wms.constants.enums; + +/** + * 载具状态 + */ +public enum VehicleStatus { + IN(1, "入库中"), + ON(2, "在库中"), + OUT(3, "出库中"); + + private final Integer code; + + private final String value; + + VehicleStatus(Integer code, String value) { + this.code = code; + this.value = value; + } + + public Integer getCode() { + return code; + } + + public String getValue() { + return value; + } +} diff --git a/src/main/java/com/wms/constants/enums/WcsChangeTaskStatus.java b/src/main/java/com/wms/constants/enums/WcsChangeTaskStatus.java new file mode 100644 index 0000000..c641aa6 --- /dev/null +++ b/src/main/java/com/wms/constants/enums/WcsChangeTaskStatus.java @@ -0,0 +1,26 @@ +package com.wms.constants.enums; + +/** + * 向Wcs发送任务变更时的任务状态枚举 + */ +public enum WcsChangeTaskStatus { + FINISH(0, "重新执行任务"), + CANCEL(1, "取消/删除任务"), + EXCEPTION(2, "完成任务"); + + private final Integer code; + private final String message; + + WcsChangeTaskStatus(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/src/main/java/com/wms/constants/enums/WcsTaskStatus.java b/src/main/java/com/wms/constants/enums/WcsTaskStatus.java new file mode 100644 index 0000000..5c15ec7 --- /dev/null +++ b/src/main/java/com/wms/constants/enums/WcsTaskStatus.java @@ -0,0 +1,31 @@ +package com.wms.constants.enums; + +/** + * Wcs任务状态的枚举 + */ +public enum WcsTaskStatus { + WAIT(1, "任务排队中"), + RUN(2, "任务开始执行"), + LEAVE(3, "任务已经离开初始位置"), + PARK(4, "任务到达中间点"), + ARRIVE(5, "任务到达目的地"), + FINISH(100, "任务完成"), + CANCEL(998, "任务取消"), + EXCEPTION(999, "任务异常"); + + private final Integer code; + private final String name; + + WcsTaskStatus(Integer code, String name) { + this.code = code; + this.name = name; + } + + public Integer getCode() { + return code; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/com/wms/constants/enums/WmsTaskStatus.java b/src/main/java/com/wms/constants/enums/WmsTaskStatus.java new file mode 100644 index 0000000..f48b134 --- /dev/null +++ b/src/main/java/com/wms/constants/enums/WmsTaskStatus.java @@ -0,0 +1,31 @@ +package com.wms.constants.enums; + +/** + * Wms任务状态的枚举 + */ +public enum WmsTaskStatus { + TEMP(-1, "暂存任务"), + NEW(0, "任务新建,待下发"), + WAIT(1, "任务已下发"), + RUN(2, "任务开始执行"), + INVENTORY(8, "盘点中"), + FINISH(100, "任务完成"), + CANCEL(998, "任务取消"), + EXCEPTION(999, "任务异常"); + + private final Integer code; + private final String name; + + WmsTaskStatus(Integer code, String name) { + this.code = code; + this.name = name; + } + + public Integer getCode() { + return code; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/com/wms/controller/ConfigController.java b/src/main/java/com/wms/controller/ConfigController.java new file mode 100644 index 0000000..c985040 --- /dev/null +++ b/src/main/java/com/wms/controller/ConfigController.java @@ -0,0 +1,83 @@ +package com.wms.controller; + +import com.alibaba.fastjson2.JSON; +import com.wms.constants.enums.ResponseCode; +import com.wms.entity.app.ResponseEntity; +import com.wms.entity.table.Config; +import com.wms.service.ConfigService; +import com.wms.utils.HttpUtils; +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * WMS系统配置控制类 + * @author 梁州 + * @date 2023/3/23 + */ +@Controller +@CrossOrigin +@RequestMapping(value = "/wms/config") +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class ConfigController{ + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + /** + * 系统配置服务 + */ + private final ConfigService configService; + /** + * 请求头部信息 + */ + private final HttpServletRequest servletRequest; + + /** + * 查找所有配置 + * @return 配置 + */ + @GetMapping("/getConfigs") + @ResponseBody + public List getConfigs(){ + logger.info("查询系统配置,查询ip:{}", HttpUtils.getIpAddr(servletRequest)); + return configService.selectConfigs(""); + } + + /** + * 更新系统配置 + * + * @param config 配置 + * @return 结果 + */ + @PostMapping("/updateConfig") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + public String updateConfig(@RequestBody Config config) { + logger.info("更新系统配置,{}:{},请求ip:{}", config.getConfigName(), config.getConfigValue(), HttpUtils.getIpAddr(servletRequest)); + // 创建响应信息 + ResponseEntity rsp = new ResponseEntity(); + try { + configService.updateConfig(config); + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + logger.info("更新系统配置错误:{}", e.getMessage()); + // 返回其他异常 + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage(e.getMessage()); + return JSON.toJSONString(rsp); + } + // 返回成功 + rsp.setCode(ResponseCode.OK.getCode()); + rsp.setMessage("更新系统配置成功!"); + return JSON.toJSONString(rsp); + } +} diff --git a/src/main/java/com/wms/controller/ExcelController.java b/src/main/java/com/wms/controller/ExcelController.java new file mode 100644 index 0000000..f1f6af4 --- /dev/null +++ b/src/main/java/com/wms/controller/ExcelController.java @@ -0,0 +1,121 @@ +package com.wms.controller; + +import com.alibaba.fastjson2.JSON; +import com.wms.constants.enums.*; +import com.wms.entity.app.ResponseEntity; +import com.wms.entity.app.dto.StockDto; +import com.wms.entity.app.dto.TaskRecordDto; +import com.wms.entity.app.query.StockQuery; +import com.wms.entity.app.query.TaskRecordQuery; +import com.wms.service.*; +import com.wms.utils.excel.ExcelUtils; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; + +import static com.wms.utils.HttpUtils.getIpAddr; +import static com.wms.utils.StringUtils.convertJsonString; + +/** + * + */ +@Controller +@CrossOrigin +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +@RequestMapping(value = "/wms/excel") +public class ExcelController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + private final StockService stockService;// 库存服务 + private final HttpServletRequest servletRequest;// 请求服务 + private final TaskRecordService taskRecordService;// 任务记录服务 + + /** + * 导入库存信息 + * + * @param file 文件 + * @return 导入结果 + */ + @PostMapping("/uploadStocks") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + public String uploadStocks(@RequestPart("file") MultipartFile file) { + logger.info("导入库存,请求ip:{}", getIpAddr(servletRequest)); + ResponseEntity response = new ResponseEntity(); + try { + response.setCode(ResponseCode.OK.getCode()); + response.setMessage("导入库存成功"); + response.setReturnData(file); + } catch (Exception e) { + convertJsonString(e); + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage(e.getMessage()); + } + return JSON.toJSONString(response); + } + + /** + * 导出库存数据 + * + * @param response 请求 + */ + @GetMapping("/downloadStockExcel") + @ResponseBody + public void downloadStockExcel(@RequestParam("stockQuery") StockQuery query, HttpServletResponse response) { + logger.info("导出库存记录,请求ip:{}", getIpAddr(servletRequest)); + List stocks = stockService.selectStocks(query.toStockPO()); + ExcelUtils.export(response, "库存报表", stocks, StockDto.class); + } + + /** + * 导出入库记录 + * + * @param response 请求 + */ + @GetMapping("/downloadInRecordExcel") + @ResponseBody + public void downloadInRecordExcel(@RequestParam("recordQuery") TaskRecordQuery query, HttpServletResponse response) { + logger.info("导出入库记录,请求ip:{}", getIpAddr(servletRequest)); + List inRecord = taskRecordService.selectInTaskRecord(query.toTaskRecordPO()); + ExcelUtils.export(response, "入库记录报表", inRecord, TaskRecordDto.class); + } + + /** + * 导出入库记录 + * + * @param response 请求 + */ + @GetMapping("/downloadOutRecordExcel") + @ResponseBody + public void downloadOutRecordExcel(@RequestParam("recordQuery") TaskRecordQuery query, HttpServletResponse response) { + logger.info("导出出库记录,请求ip:{}", getIpAddr(servletRequest)); + List outRecord = taskRecordService.selectOutTaskRecord(query.toTaskRecordPO()); + ExcelUtils.export(response, "出库记录报表", outRecord, TaskRecordDto.class); + } + + /** + * 导出盘点记录 + * + * @param response 请求 + */ + @GetMapping("/downloadInventoryRecordExcel") + @ResponseBody + public void downloadInventoryRecordExcel(@RequestParam("recordQuery") TaskRecordQuery query, HttpServletResponse response) { + logger.info("导出盘点记录,请求ip:{}", getIpAddr(servletRequest)); + List inventoryRecord = taskRecordService.selectInventoryTaskRecord(query.toTaskRecordPO()); + ExcelUtils.export(response, "盘点记录报表", inventoryRecord, TaskRecordDto.class); + } +} \ No newline at end of file diff --git a/src/main/java/com/wms/controller/GoodsController.java b/src/main/java/com/wms/controller/GoodsController.java new file mode 100644 index 0000000..d1008ee --- /dev/null +++ b/src/main/java/com/wms/controller/GoodsController.java @@ -0,0 +1,240 @@ +package com.wms.controller; + +import com.alibaba.fastjson2.JSON; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.wms.constants.enums.ResponseCode; +import com.wms.entity.app.ResponseEntity; +import com.wms.entity.page.PageDomain; +import com.wms.entity.page.TableResponse; +import com.wms.service.GoodsService; +import com.wms.utils.HttpUtils; +import com.wms.utils.StringUtils; +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * WMS物料控制类 + * @author 梁州 + * @date 2023/3/9 + */ +@Controller +@CrossOrigin +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +@RequestMapping(value = "/wms/goods") +public class GoodsController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + /** + * 物料服务 + */ + private final GoodsService goodsService; + /** + * 请求头部信息 + */ + private final HttpServletRequest servletRequest; + + /** + * 查找所有物料 + */ + @PostMapping("/getPartInfo") + @ResponseBody + public String getPartInfo(@RequestBody TableRequest tableRequest){ + logger.info("请求的ip地址:{}", HttpUtils.getIpAddr(servletRequest)); + logger.info("接收到查询物料数据请求:{}", JSON.toJSONString(tableRequest)); + TableResponse tblResp = new TableResponse(); + // 解析请求数据 + if (tableRequest == null || tableRequest.getPage() == null) { + tblResp.setCode(ResponseCode.ERROR.getCode()); + tblResp.setMessage("请求数据为空,无法处理!"); + logger.error("请求数据为空,无法处理!"); + return JSON.toJSONString(tblResp); + } + // 处理分页信息 + PageDomain pageRequest = tableRequest.getPage(); + String orderByStr = "goodsId asc"; + + PageHelper.startPage(pageRequest.getPageNum(), pageRequest.getPageSize(), orderByStr); + List goodsList = goodsService.selGoods(tableRequest.getParam()); + PageInfo goodsPageInfo = new PageInfo<>(goodsList); + tblResp.setCode(ResponseCode.OK.getCode()); + tblResp.setMessage("查询物料信息成功!"); + tblResp.setRows(goodsPageInfo.getList()); + tblResp.setTotal(goodsPageInfo.getTotal()); + return JSON.toJSONString(tblResp); + } + + /** + * 更新物料信息 + * + * @param goods 物料信息 + * @return 结果 + */ + @PostMapping("/updatePartInfo") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + public String updatePartInfo(@RequestBody GoodsDto goods) { + logger.info("请求的ip地址:{}", HttpUtils.getIpAddr(servletRequest)); + logger.info("接收到更新零件信息请求:{}", JSON.toJSONString(goods)); + // 创建响应信息 + ResponseEntity rsp = new ResponseEntity(); + try { + if (StringUtils.isEmpty(goods.getGoodsId())) {// 物料编码为空,不执行 + logger.error("请求物料编码为空"); + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("请求物料编码为空"); + return JSON.toJSONString(rsp); + } + goodsService.modifyGoods(goods); + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + logger.info("发生异常:{}", e.getMessage()); + // 返回其他异常 + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage(e.getMessage()); + return JSON.toJSONString(rsp); + } + // 返回成功 + rsp.setCode(ResponseCode.OK.getCode()); + rsp.setMessage("更新物料信息成功"); + return JSON.toJSONString(rsp); + } + + /** + * 查询物料信息 + * @param goods 参数 + * @return 结果 + */ + @PostMapping("/queryPartInfoByPartNo") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + public String queryPartInfoByPartNo(@RequestBody GoodsDto goods) { + logger.info("前台查询物料数据"); + ResponseEntity rsp = new ResponseEntity(); + if (goods == null || StringUtils.isEmpty(goods.getGoodsId())) { + logger.info("请求查询的参数为空"); + // 返回其他异常 + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("请求查询的参数为空"); + return JSON.toJSONString(rsp); + } + try { + GoodsDto goodsInfoNeed = goodsService.selGoodsByGoodsId(goods.getGoodsId()); + if (goodsInfoNeed == null) { + logger.info("查询物料信息发生错误,物料编码:{}", goods.getGoodsId()); + // 返回其他异常 + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("查询的物料信息为空"); + return JSON.toJSONString(rsp); + } + rsp.setReturnData(goodsInfoNeed); + logger.info("查询物料信息成功"); + // 返回成功 + rsp.setCode(ResponseCode.OK.getCode()); + rsp.setMessage("查询物料信息成功"); + return JSON.toJSONString(rsp); + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + logger.info("查询物料信息发生错误:{}", e.getMessage()); + // 返回其他异常 + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage(e.getMessage()); + return JSON.toJSONString(rsp); + } + } + + /** + * 自动补全物料编码信息 + * @param goods 参数 + * @return 结果 + */ + @PostMapping("/queryPartNo") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + public String queryPartNo(@RequestBody GoodsDto goods) { + ResponseEntity rsp = new ResponseEntity(); + if (goods == null || StringUtils.isEmpty(goods.getGoodsId())) { + logger.info("请求查询的参数为空"); + // 返回其他异常 + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("请求查询的参数为空"); + return JSON.toJSONString(rsp); + } + try { + GoodsDto query = new GoodsDto(); + query.setGoodsId(goods.getGoodsId()); + List goodsInfoNeed = goodsService.selGoods(query); + if (goodsInfoNeed.size() == 0) { + logger.info("查询物料信息失败,物料编码:{}", goods.getGoodsId()); + // 返回其他异常 + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("查询物料信息为空"); + return JSON.toJSONString(rsp); + } + rsp.setReturnData(goodsInfoNeed); + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + logger.info("查询物料信息发生错误:{}", e.getMessage()); + // 返回其他异常 + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage(e.getMessage()); + return JSON.toJSONString(rsp); + } + logger.info("查询物料信息成功"); + // 返回成功 + rsp.setCode(ResponseCode.OK.getCode()); + rsp.setMessage("查询物料信息成功"); + return JSON.toJSONString(rsp); + } + + /** + * 删除当前物料信息 + * + * @param goods 物料 + * @return 结果 + */ + @PostMapping("/deletePartInfo") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + public String deleteVehicle(@RequestBody GoodsDto goods) { + logger.info("请求的ip地址:{}", HttpUtils.getIpAddr(servletRequest)); + logger.info("接收到更新物料信息请求:{}", JSON.toJSONString(goods)); + // 创建响应信息 + ResponseEntity rsp = new ResponseEntity(); + try { + if (StringUtils.isEmpty(goods.getGoodsId())) {// 物料编码为空,不做处理 + logger.error("请求删除的物料编码为空"); + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("请求删除的物料编码为空"); + return JSON.toJSONString(rsp); + } + goodsService.deleteGoods(goods.getGoodsId()); + // 返回成功 + rsp.setCode(ResponseCode.OK.getCode()); + rsp.setMessage("删除物料信息成功"); + return JSON.toJSONString(rsp); + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + logger.info("发生异常:{}", e.getMessage()); + // 返回其他异常 + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage(e.getMessage()); + return JSON.toJSONString(rsp); + } + } +} diff --git a/src/main/java/com/wms/controller/JobComponent.java b/src/main/java/com/wms/controller/JobComponent.java new file mode 100644 index 0000000..1111ee8 --- /dev/null +++ b/src/main/java/com/wms/controller/JobComponent.java @@ -0,0 +1,183 @@ +package com.wms.controller; + +import com.alibaba.fastjson2.JSON; +import com.wms.constants.enums.*; +import com.wms.entity.app.ResponseEntity; +import com.wms.entity.table.StockDto; +import com.wms.entity.table.TaskDto; +import com.wms.entity.table.WmsLogDto; +import com.wms.service.*; +import com.wms.utils.HttpUtils; +import com.wms.utils.StringUtils; +import com.wms.utils.WmsUtils; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import static com.wms.utils.StringUtils.convertJsonString; + +import java.util.*; + +import static com.wms.config.InitLocalConfig.configMap; + +/** + * 定期任务类 + */ +@Component +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class JobComponent { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + /** + * 任务服务 + */ + private final TaskService taskService; + /** + * 库存服务 + */ + private final StockService stockService; + /** + * 任务记录服务 + */ + private final TaskRecordService taskRecordService; + /** + * 日志服务 + */ + private final LogService logService; + + + /** + * 每隔一秒检索一遍任务列表,同时向WCS下发任务 + */ + @Scheduled(fixedDelay = 1000) + public void executeTasks() { + try { + // 检索任务列表,查询状态为等待状态的任务 + TaskDto taskForQuery = new TaskDto(); + taskForQuery.setTaskStatus(WmsTaskStatus.NEW.getCode()); + List tasks = taskService.selTasks(taskForQuery); + List request = new ArrayList<>(); + if (tasks.size() > 0) {// 存在等待中的任务 + for (TaskDto task : tasks) { + if (StringUtils.isNotEmpty(task.getPreTask())) {// 该任务拥有前置任务,不下发 + // 查询一下前置的任务有没有存在,存在则不下发 + List preTasks = taskService.selTasks(new TaskDto(task.getPreTask())); + if (preTasks.size() > 0) { + continue; + } + } + // 创建发送的任务 + WcsTask tempTask = new WcsTask(); + tempTask.setTaskId(task.getTaskId()); + if (Objects.equals(task.getTaskType(), TaskType.INVENTORY_OUT.getCode())) { + tempTask.setTaskType(TaskType.OUT.getCode()); + } else if (Objects.equals(task.getTaskType(), TaskType.INVENTORY_IN.getCode())) { + tempTask.setTaskType(TaskType.IN.getCode()); + } else { + tempTask.setTaskType(task.getTaskType()); + } + tempTask.setOrigin(task.getOrigin()); + tempTask.setDestination(task.getDestination()); + tempTask.setVehicleNo(task.getVehicleNo()); + tempTask.setVehicleSize(task.getVehicleSize()); + tempTask.setWeight(task.getWeight()); + tempTask.setPriority(task.getTaskPriority()); + request.add(tempTask); + task.setTaskStatus(WmsTaskStatus.WAIT.getCode()); + } + if (request.size() == 0) { + return; + } + // 发送任务 + String url = configMap.get("WCS_TASK"); + if (url != null) { + logger.info("向WCS发送任务,地址:{},请求详情:{}", url, convertJsonString(request)); + ResponseEntity result = JSON.parseObject(HttpUtils.sendHttpPostWithoutToken(url, convertJsonString(request)), ResponseEntity.class); + try { + logService.addWmsLog(new WmsLogDto(WmsUtils.generateId("LOG_"), "向WCS发送任务", "SetStackerTask", JSON.toJSONString(request), JSON.toJSONString(result), url, new Date(), "WMS")); + } catch (Exception e) { + logger.error("插入日志错误"); + } + if (result != null && Objects.equals(ResponseCode.OK.getCode(), result.getCode())) { + // 更新任务列表 + for (TaskDto task : tasks) { + // 更新任务 + taskService.executeTask(task); + } + } else { + if (result != null) { + logger.error("存在错误:{}", result.getMessage()); + } else { + logger.error("请求无返回"); + } + } + } else { + logger.error("WCS发送任务地址为空"); + } + } + } catch (Exception exception) { + logger.error("发生异常:{}", convertJsonString(exception)); + } + } + + /** + * 每天查询一次是否有过期的库存 + * 每天晚上8点执行一次 + */ +// @Scheduled(cron = "0 0 20 * * ?") + public void detectOutOfDateStock() { + logger.info("执行定时任务:查询过期库存"); + List outOfDateStocks = stockService.selStockOutOfDate(); + if (outOfDateStocks.size() > 0) { + logger.info("过期库存数量不为0,准备更新过期库存"); + for (StockDto outOfDateStock : outOfDateStocks) { + try { + outOfDateStock.setGoodsStatus(GoodsStatus.OVERDUE.getCode()); + stockService.modifyStock(outOfDateStock); + logger.info("过期库存更新成功"); + } catch (Exception e) { + logger.error("过期库存更新异常:{}", e.getMessage()); + } + } + } + } + + /** + * TODO 更新呆滞时间 + * 每天查询一次是否有入库后长期未使用的库存 + * 每天晚上9点执行一次 + */ +// @Scheduled(cron = "0 0 21 * * ?") + public void detectStockLongTimeNoUse() { + logger.info("执行定时任务:查询是否有入库后长期未使用的库存"); + List stocksLongTimeNoUse = stockService.selStockLongTimeNoUse(7); + if (stocksLongTimeNoUse.size() > 0) { + logger.info("有入库后长期未使用的库存, 准备更新库存状态"); + for (StockDto stockLongTimeNoUse : stocksLongTimeNoUse) { + try { + stockLongTimeNoUse.setGoodsStatus(GoodsStatus.SCRAP.getCode()); + stockService.modifyStock(stockLongTimeNoUse); + logger.info("长时间未使用库存状态更新成功"); + } catch (Exception e) { + logger.error("长时间未使用库存状态更新异常:{}", e.getMessage()); + } + } + } + } + + /** + * 每天查询一次是否有过期记录 + * 每天晚上10点执行一次 + */ +// @Scheduled(cron = "0 0 22 * * ?") + public void deleteOutOfDateData() { + logger.info("执行定时任务:删除过期数据"); + taskRecordService.deleteTaskRecordRegularly(); + if (logService.deleteWmsLogsRegularly(90)) { + logger.info("删除过期日志数据成功"); + } else { + logger.info("删除过期日志数据失败"); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/wms/controller/LocationController.java b/src/main/java/com/wms/controller/LocationController.java new file mode 100644 index 0000000..c2f86dd --- /dev/null +++ b/src/main/java/com/wms/controller/LocationController.java @@ -0,0 +1,319 @@ +package com.wms.controller; + +import com.alibaba.fastjson2.JSON; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.wms.constants.enums.ResponseCode; +import com.wms.entity.app.dto.VehicleDto; +import com.wms.entity.app.dto.extend.VehicleDetailInfo; +import com.wms.entity.app.vo.LayerLocation; +import com.wms.entity.app.ResponseEntity; +import com.wms.entity.app.vo.RowLocation; +import com.wms.entity.page.PageDomain; +import com.wms.entity.page.TableRequest; +import com.wms.entity.page.TableResponse; +import com.wms.entity.table.LocationDto; +import com.wms.entity.table.Vehicle; +import com.wms.entity.table.VehicleDto; +import com.wms.constants.enums.LocationStatus; +import com.wms.service.LocationService; +import com.wms.service.VehicleService; +import com.wms.utils.HttpUtils; +import com.wms.utils.StringUtils; +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; +import org.springframework.web.bind.annotation.*; + +import java.util.*; + +/** + * WMS库位控制类 + * + * @author 梁州 + * @date 2023/3/6 + */ +@Controller +@CrossOrigin +@RequestMapping(value = "/wms/location") +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class LocationController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + /** + * 库位服务 + */ + private final LocationService locationService; + /** + * 料箱服务 + */ + private final VehicleService vehicleService; + /** + * 请求头部信息 + */ + private final HttpServletRequest servletRequest; + + + /** + * 查询库位 + * + * @param location 查询参数 + * @return 结果 + */ + @PostMapping("/getLocations") + @ResponseBody + public String getLocations(@RequestBody LocationDto location) { + // 创建响应信息 + ResponseEntity rsp = new ResponseEntity(); + try { + // 查询出所有符合条件的库位 + List locations = locationService.selLocations(location); + if (locations.size() < 1) { + logger.error("查询库位发生错误:库位不存在"); + // 返回错误 + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("查询库位发生错误:库位不存在"); + return JSON.toJSONString(rsp); + } + List rowLocations = new LinkedList<>(); + // 查找到最大的排 + locations.sort(Comparator.comparing(LocationDto::getQueue).reversed()); + int maxRow = locations.get(0).getQueue(); + // 按排查找库位 + for (int i = 0; i < maxRow; i++) { + int finalI = i; + List currentRowLocations = new ArrayList<>(locations.stream() + .filter(l -> l.getQueue().equals(finalI + 1)) + .toList()); + // 先查找每一层的库位 + List layerLocations = new LinkedList<>(); + // 找到这一排最大的层 + currentRowLocations.sort(Comparator.comparing(LocationDto::getLayer).reversed()); + int maxLayer = currentRowLocations.get(0).getLayer(); + // 按照每一列查找库位 + for (int j = 0; j < maxLayer; j++) { + int finalJ = j; + List currentLayerLocations = currentRowLocations.stream() + .filter(l -> l.getLayer().equals(finalJ + 1)) + .toList(); + LayerLocation tempLayerLocation = new LayerLocation(); + tempLayerLocation.setLayer(finalJ + 1); + tempLayerLocation.setCurrentColLocations(currentLayerLocations); + layerLocations.add(tempLayerLocation); + } + RowLocation tempRowLocation = new RowLocation(); + tempRowLocation.setRow(finalI + 1); + tempRowLocation.setCurrentLayerLocations(layerLocations); + rowLocations.add(tempRowLocation); + } + logger.info("查询库位数据成功,库区:{}", location.getAreaId()); + // 设置最终数据 + rsp.setReturnData(rowLocations); + // 返回成功 + rsp.setCode(ResponseCode.OK.getCode()); + rsp.setMessage("查询库位成功"); + return JSON.toJSONString(rsp); + } catch (Exception e) { + logger.info("查询库位发生错误:{}", e.getMessage()); + // 返回其他异常 + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage(e.getMessage()); + return JSON.toJSONString(rsp); + } + } + + /** + * 更新库位状态 + * + * @param location 库位 + * @return 结果 + */ + @PostMapping("/updateLocation") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + public String updateLocation(@RequestBody LocationDto location) { + // 创建响应信息 + ResponseEntity rsp = new ResponseEntity(); + try { + locationService.modifyLocation(location); + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + logger.info("更新库位状态发生错误:{}", e.getMessage()); + // 返回其他异常 + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage(e.getMessage()); + return JSON.toJSONString(rsp); + } + // 返回成功 + rsp.setCode(ResponseCode.OK.getCode()); + rsp.setMessage("更新库位状态成功"); + return JSON.toJSONString(rsp); + } + + /** + * 更新库位状态 + * + * @param location 库位 + * @return 结果 + */ + @PostMapping("/getAvailableLocations") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + public String getAvailableLocations(@RequestBody LocationDto location) { + logger.info("查询空闲可用库位"); + // 创建响应信息 + ResponseEntity rsp = new ResponseEntity(); + try { + LocationDto locationQuery = new LocationDto(); + locationQuery.setAreaId(location.getAreaId()); + locationQuery.setLocationStatus(LocationStatus.EMPTY.getCode()); + locationQuery.setIsLock(0); + List availableLocations = locationService.selLocations(locationQuery); + rsp.setReturnData(availableLocations); + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + logger.info("查询可用库位错误:{}", e.getMessage()); + // 返回其他异常 + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage(e.getMessage()); + return JSON.toJSONString(rsp); + } + // 返回成功 + rsp.setCode(ResponseCode.OK.getCode()); + rsp.setMessage("查询可用库位成功"); + return JSON.toJSONString(rsp); + } + + /** + * 查询料箱信息 + * @param tableRequest 请求 + * @return 结果 + */ + @PostMapping("/getVehicles") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + public String getVehicles(@RequestBody TableRequest tableRequest) { + logger.info("请求的ip地址:{}", HttpUtils.getIpAddr(servletRequest)); + logger.info("接收到查询料箱请求:{}", JSON.toJSONString(tableRequest)); + TableResponse tblResp = new TableResponse(); + // 解析请求数据 + if (tableRequest == null || tableRequest.getPage() == null) { + tblResp.setCode(ResponseCode.ERROR.getCode()); + tblResp.setMessage("请求数据为空,无法处理!"); + logger.error("请求数据为空,无法处理!"); + return JSON.toJSONString(tblResp); + } + // 处理分页信息 + PageDomain pageRequest = tableRequest.getPage(); +// String[] orderByArr = {"task_id", "task_type", "task_status", "goods_id", "goods_name", "task_priority", "expiration_date", "create_time"}; + String orderByStr = ""; + +// if (StringUtils.isNotEmpty(pageRequest.getOrderByColumn()) && Arrays.asList(orderByArr).contains(StringUtils.toUnderScoreCase(pageRequest.getOrderByColumn()))) { +// orderByStr = pageRequest.getOrderBy(); +// } else { +// // 默认排序 +// orderByStr = ""; +// } + + Vehicle vehicleQuery = new Vehicle<>(); + vehicleQuery.setVehicleId(tableRequest.getParam().getVehicleId()); + PageHelper.startPage(pageRequest.getPageNum(), pageRequest.getPageSize(), orderByStr); + List> vehicles = vehicleService.selVehicles(vehicleQuery); + PageInfo vehiclePageInfo = new PageInfo<>(vehicles); + tblResp.setCode(ResponseCode.OK.getCode()); + tblResp.setMessage("查询料箱成功!"); + tblResp.setRows(vehiclePageInfo.getList()); + tblResp.setTotal(vehiclePageInfo.getTotal()); + return JSON.toJSONString(tblResp); + } + + /** + * 更新料箱信息 + * + * @param vehicle 料箱 + * @return 结果 + */ + @PostMapping("/updateVehicleInfo") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + public String updateVehicleInfo(@RequestBody VehicleDto vehicle) { + logger.info("请求的ip地址:{}", HttpUtils.getIpAddr(servletRequest)); + logger.info("接收到更新料箱信息请求:{}", JSON.toJSONString(vehicle)); + // 创建响应信息 + ResponseEntity rsp = new ResponseEntity(); + try { + if (StringUtils.isEmpty(vehicle.getVehicleId())) {// 箱号为空,不执行 + logger.error("请求箱号为空"); + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("请求箱号为空"); + return JSON.toJSONString(rsp); + } + vehicleService.modifyVehicle(vehicle); + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + logger.info("发生异常:{}", e.getMessage()); + // 返回其他异常 + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage(e.getMessage()); + return JSON.toJSONString(rsp); + } + // 返回成功 + rsp.setCode(ResponseCode.OK.getCode()); + rsp.setMessage("更新料箱信息成功"); + return JSON.toJSONString(rsp); + } + + /** + * 删除当前料箱信息 + * + * @param vehicle 料箱 + * @return 结果 + */ + @PostMapping("/deleteVehicle") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + public String deleteVehicle(@RequestBody VehicleDto vehicle) { + logger.info("请求的ip地址:{}", HttpUtils.getIpAddr(servletRequest)); + logger.info("接收到更新料箱信息请求:{}", JSON.toJSONString(vehicle)); + // 创建响应信息 + ResponseEntity rsp = new ResponseEntity(); + try { + if (StringUtils.isEmpty(vehicle.getVehicleId())) {// 箱号为空,不执行 + logger.error("请求箱号为空"); + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("请求箱号为空"); + return JSON.toJSONString(rsp); + } + // 判断当前料箱是不是空箱,带料不允许删除 + VehicleDto currentVehicle = vehicleService.selVehicleById(vehicle.getVehicleId()); + if (currentVehicle != null && currentVehicle.getIsEmpty() != 1) {// 非空箱 + logger.error("非空箱不允许删除"); + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("非空箱不允许删除"); + return JSON.toJSONString(rsp); + } + vehicleService.deleteVehicle(vehicle); + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + logger.info("发生异常:{}", e.getMessage()); + // 返回其他异常 + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage(e.getMessage()); + return JSON.toJSONString(rsp); + } + // 返回成功 + rsp.setCode(ResponseCode.OK.getCode()); + rsp.setMessage("删除料箱成功"); + return JSON.toJSONString(rsp); + } +} \ No newline at end of file diff --git a/src/main/java/com/wms/controller/RecordController.java b/src/main/java/com/wms/controller/RecordController.java new file mode 100644 index 0000000..b8a852d --- /dev/null +++ b/src/main/java/com/wms/controller/RecordController.java @@ -0,0 +1,93 @@ +package com.wms.controller; + +import com.alibaba.fastjson2.JSON; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.wms.constants.enums.ResponseCode; +import com.wms.entity.page.PageDomain; +import com.wms.entity.page.TableRequest; +import com.wms.entity.page.TableResponse; +import com.wms.entity.table.TaskDto; +import com.wms.service.TaskRecordService; +import com.wms.utils.HttpUtils; +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * WMS记录控制类 + * + * @author 梁州 + * @date 2023/2/14 + */ +@Controller +@CrossOrigin +@RequestMapping(value = "/wms/record") +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class RecordController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + /** + * 任务记录服务 + */ + private final TaskRecordService taskRecordService; + /** + * 请求头部信息 + */ + private final HttpServletRequest servletRequest; + + /** + * 查询任务记录 + * + * @param tableRequest 请求 + * @return 结果 + */ + @PostMapping("/getTaskRecords") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + public String getVehicles(@RequestBody TableRequest tableRequest) { + logger.info("请求的ip地址:{}", HttpUtils.getIpAddr(servletRequest)); + logger.info("接收到查询任务记录请求:{}", JSON.toJSONString(tableRequest)); + TableResponse tblResp = new TableResponse(); + // 解析请求数据 + if (tableRequest == null || tableRequest.getPage() == null) { + tblResp.setCode(ResponseCode.ERROR.getCode()); + tblResp.setMessage("请求数据为空,无法处理!"); + logger.error("请求数据为空,无法处理!"); + return JSON.toJSONString(tblResp); + } + // 处理分页信息 + PageDomain pageRequest = tableRequest.getPage(); +// String[] orderByArr = {"task_id", "task_type", "task_status", "goods_id", "goods_name", "task_priority", "expiration_date", "create_time"}; + String orderByStr = ""; + +// if (StringUtils.isNotEmpty(pageRequest.getOrderByColumn()) && Arrays.asList(orderByArr).contains(StringUtils.toUnderScoreCase(pageRequest.getOrderByColumn()))) { +// orderByStr = pageRequest.getOrderBy(); +// } else { +// // 默认排序 +// orderByStr = ""; +// } + + TaskDto taskRecordQuery = new TaskDto(); + taskRecordQuery.setTaskType(tableRequest.getParam().getTaskType()); + taskRecordQuery.setGoodsType(tableRequest.getParam().getGoodsType()); + taskRecordQuery.setSpecification(tableRequest.getParam().getSpecification()); + PageHelper.startPage(pageRequest.getPageNum(), pageRequest.getPageSize(), orderByStr); + List records = taskRecordService.selTasks(taskRecordQuery); + PageInfo taskRecordPageInfo = new PageInfo<>(records); + tblResp.setCode(ResponseCode.OK.getCode()); + tblResp.setMessage("查询任务记录成功!"); + tblResp.setRows(taskRecordPageInfo.getList()); + tblResp.setTotal(taskRecordPageInfo.getTotal()); + return JSON.toJSONString(tblResp); + + } +} diff --git a/src/main/java/com/wms/controller/StandController.java b/src/main/java/com/wms/controller/StandController.java new file mode 100644 index 0000000..701a091 --- /dev/null +++ b/src/main/java/com/wms/controller/StandController.java @@ -0,0 +1,136 @@ +package com.wms.controller; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.wms.constants.enums.ResponseCode; +import com.wms.entity.app.ResponseEntity; +import com.wms.entity.page.PageDomain; +import com.wms.entity.page.TableRequest; +import com.wms.entity.page.TableResponse; +import com.wms.entity.table.StandDto; +import com.wms.service.StandService; +import com.wms.utils.HttpUtils; +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 站台控制类 + */ +@Controller +@CrossOrigin +@RequestMapping(value = "/wms/stand") +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class StandController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + /** + * 站台服务 + */ + private final StandService standService; + /** + * 请求头部信息 + */ + private final HttpServletRequest servletRequest; + + /** + * 查询可用站台列表 + * @return 符合条件的站台列表 + */ + @PostMapping("/getAllStands") + @ResponseBody + public List getAllStands(@RequestBody JSONObject type){ + logger.info("查询站台{}", JSON.toJSONString(type)); + int type_int = type.getIntValue("type"); + StandDto query = new StandDto(); + if (type_int == 1) {// 入库站台 + query.setAllowIn(1); + } else if (type_int == 2) {// 出库站台 + query.setAllowOut(1); + } else if (type_int == 3) {// 盘点站台 + query.setAllowIn(1); + query.setAllowOut(1); + } + return standService.selStands(query); + } + + /** + * 更新站台状态 + * + * @param stand 站台 + * @return 结果 + */ + @PostMapping("/updateStandInfo") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + public String updateStandInfo(@RequestBody StandDto stand) { + // 创建响应信息 + ResponseEntity rsp = new ResponseEntity(); + try { + standService.modifyStand(stand); + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + logger.info("更新站台信息发生错误:{}", e.getMessage()); + // 返回其他异常 + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage(e.getMessage()); + return JSON.toJSONString(rsp); + } + logger.info("更新站台信息成功:{}", stand.toLoggerString()); + // 返回成功 + rsp.setCode(ResponseCode.OK.getCode()); + rsp.setMessage("更新站台信息成功"); + return JSON.toJSONString(rsp); + } + + /** + * 查找所有库存 + */ + @PostMapping("/getStands") + @ResponseBody + public String getStands(@RequestBody TableRequest tableRequest){ + logger.info("请求的ip地址:{}", HttpUtils.getIpAddr(servletRequest)); + logger.info("接收到查询库存请求:{}", JSON.toJSONString(tableRequest)); + TableResponse tblResp = new TableResponse(); + // 解析请求数据 + if (tableRequest == null || tableRequest.getPage() == null) { + tblResp.setCode(ResponseCode.ERROR.getCode()); + tblResp.setMessage("请求数据为空,无法处理!"); + logger.error("请求数据为空,无法处理!"); + return JSON.toJSONString(tblResp); + } + // 处理分页信息 + PageDomain pageRequest = tableRequest.getPage(); +// String[] orderByArr = {"location_id", "vehicle_id", "goods_id", "batch_no", "remain_num", "expiration_date", "create_time"}; + String orderByStr = ""; + +// if (StringUtils.isNotEmpty(pageRequest.getOrderByColumn()) && Arrays.asList(orderByArr).contains(StringUtils.toUnderScoreCase(pageRequest.getOrderByColumn()))) { +// orderByStr = pageRequest.getOrderBy(); +// } else { +// // 默认排序 +// orderByStr = "expiration_date desc"; +// } + + PageHelper.startPage(pageRequest.getPageNum(), pageRequest.getPageSize(), orderByStr); + List stands = standService.selStands(tableRequest.getParam()); + PageInfo standPageInfo = new PageInfo<>(stands); + tblResp.setCode(ResponseCode.OK.getCode()); + tblResp.setMessage("查询库存成功!"); + tblResp.setRows(standPageInfo.getList()); + tblResp.setTotal(standPageInfo.getTotal()); + logger.info("查询库存成功,总数:{},当前页:{},当前页数量:{}", standPageInfo.getTotal(), standPageInfo.getPageNum(), standPageInfo.getPageSize()); + return JSON.toJSONString(tblResp); + } +} diff --git a/src/main/java/com/wms/controller/StockController.java b/src/main/java/com/wms/controller/StockController.java new file mode 100644 index 0000000..6084672 --- /dev/null +++ b/src/main/java/com/wms/controller/StockController.java @@ -0,0 +1,164 @@ +package com.wms.controller; + +import com.alibaba.fastjson2.JSON; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.wms.constants.enums.ResponseCode; +import com.wms.entity.app.ResponseEntity; +import com.wms.entity.page.PageDomain; +import com.wms.entity.page.TableRequest; +import com.wms.entity.page.TableResponse; +import com.wms.entity.table.StockDto; +import com.wms.service.StockService; +import com.wms.utils.HttpUtils; +import com.wms.utils.StringUtils; +import com.wms.utils.WmsUtils; +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; +import org.springframework.web.bind.annotation.*; + +import java.util.Arrays; +import java.util.List; + +/** + * WMS库存控制类 + * @author 梁州 + * @date 2023/2/14 + */ +@Controller +@CrossOrigin +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +@RequestMapping(value = "/wms/stock") +public class StockController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + /** + * 库存服务 + */ + private final StockService stockService; + + /** + * 请求头部信息 + */ + private final HttpServletRequest servletRequest; + + /** + * 查找所有库存 + */ + @PostMapping("/getAllStocks") + @ResponseBody + public String getAllStocks(@RequestBody TableRequest tableRequest){ + logger.info("请求的ip地址:{}", HttpUtils.getIpAddr(servletRequest)); + logger.info("接收到查询库存请求:{}", JSON.toJSONString(tableRequest)); + TableResponse tblResp = new TableResponse(); + // 解析请求数据 + if (tableRequest == null || tableRequest.getPage() == null) { + tblResp.setCode(ResponseCode.ERROR.getCode()); + tblResp.setMessage("请求数据为空,无法处理!"); + logger.error("请求数据为空,无法处理!"); + return JSON.toJSONString(tblResp); + } + // 处理分页信息 + PageDomain pageRequest = tableRequest.getPage(); + String[] orderByArr = {"location_id", "vehicle_id", "goods_id", "batch_no", "remain_num", "expiration_date", "create_time"}; + String orderByStr; + + if (StringUtils.isNotEmpty(pageRequest.getOrderByColumn()) && Arrays.asList(orderByArr).contains(StringUtils.toUnderScoreCase(pageRequest.getOrderByColumn()))) { + orderByStr = pageRequest.getOrderBy(); + } else { + // 默认排序 + orderByStr = "expiration_date desc"; + } + + PageHelper.startPage(pageRequest.getPageNum(), pageRequest.getPageSize(), orderByStr); + List stocks = stockService.selStocksFront(tableRequest.getParam()); + PageInfo stockPageInfo = new PageInfo<>(stocks); + tblResp.setCode(ResponseCode.OK.getCode()); + tblResp.setMessage("查询库存成功!"); + tblResp.setRows(stockPageInfo.getList()); + tblResp.setTotal(stockPageInfo.getTotal()); + logger.info("查询库存成功,总数:{},当前页:{},当前页数量:{}", stockPageInfo.getTotal(), stockPageInfo.getPageNum(), stockPageInfo.getPageSize()); + return JSON.toJSONString(tblResp); + } + + /** + * 更新库存信息 + * + * @param stock 库存 + * @return 结果 + */ + @PostMapping("/updateStockInfo") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + public String updateStockInfo(@RequestBody StockDto stock) { + logger.info("接收到更新库存信息请求:{},ip地址:{}", JSON.toJSONString(stock), HttpUtils.getIpAddr(servletRequest)); + // 创建响应信息 + ResponseEntity rsp = new ResponseEntity(); + try { + if (StringUtils.isEmpty(stock.getStockId())) {// 库存编号为空,不允许执行 + logger.error("请求的库存编号为空,不允许修改"); + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("请求的库存编号为空,不允许修改"); + return JSON.toJSONString(rsp); + } + if (stock.getRealNum() == 0) { + stockService.deleteStock(stock.getStockId()); + } else { + stockService.modifyStock(stock); + } + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + logger.info("发生异常:{}", e.getMessage()); + // 返回其他异常 + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage(e.getMessage()); + return JSON.toJSONString(rsp); + } + // 返回成功 + rsp.setCode(ResponseCode.OK.getCode()); + rsp.setMessage("更新库存信息成功"); + return JSON.toJSONString(rsp); + } + + /** + * 新增库存 + * + * @param stock 库存 + * @return 结果 + */ + @PostMapping("/addNewStock") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + public String addNewStock(@RequestBody StockDto stock) { + logger.info("请求的ip地址:{}", HttpUtils.getIpAddr(servletRequest)); + logger.info("接收到人工添加库存:{}", JSON.toJSONString(stock)); + // 创建响应信息 + ResponseEntity rsp = new ResponseEntity(); + try { + StockDto tempStock = new StockDto(); + tempStock.setStockId(WmsUtils.generateId("ST")); + + + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + logger.info("发生异常:{}", e.getMessage()); + // 返回其他异常 + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage(e.getMessage()); + return JSON.toJSONString(rsp); + } + // 返回成功 + rsp.setCode(ResponseCode.OK.getCode()); + rsp.setMessage("添加库存信息成功"); + return JSON.toJSONString(rsp); + } +} \ No newline at end of file diff --git a/src/main/java/com/wms/controller/SystemController.java b/src/main/java/com/wms/controller/SystemController.java new file mode 100644 index 0000000..7f60964 --- /dev/null +++ b/src/main/java/com/wms/controller/SystemController.java @@ -0,0 +1,90 @@ +package com.wms.controller; + +import com.alibaba.fastjson2.JSON; +import com.wms.constants.enums.ResponseCode; +import com.wms.entity.app.ResponseEntity; +import com.wms.entity.table.UserDto; +import com.wms.system_service.ISystemService; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; + +import static com.wms.utils.StringUtils.convertJsonString; + +@Controller +@CrossOrigin +@RequestMapping(value = "/wms/system") +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class SystemController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + /** + * 系统服务 + */ + private final ISystemService systemService; + + /** + * 重启系统 + * + * @param user 用户 + * @return 结果 + */ + @PostMapping("/restartSystem") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + public String restartSystem(@RequestBody UserDto user) { + logger.info("接收到重启系统请求:{}", convertJsonString(user)); + ResponseEntity response = new ResponseEntity(); + if (user == null || user.getRoleId() != 1) {// 不是管理员不允许重启 + logger.error("非管理员不允许重启"); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("非管理员不允许重启"); + return JSON.toJSONString(convertJsonString(response)); + } + if (systemService.restartSystem()) { + logger.info("重启成功"); + response.setCode(ResponseCode.OK.getCode()); + response.setMessage("重启成功"); + } else { + logger.error("重启失败"); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("重启失败"); + } + return convertJsonString(response); + } + + /** + * 重新载入配置 + * + * @param user 用户 + * @return 结果 + */ + @PostMapping("/reloadConfig") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + public String reloadConfig(@RequestBody UserDto user) { + logger.info("接收到重载配置请求:{}", convertJsonString(user)); + ResponseEntity response = new ResponseEntity(); + if (user == null || user.getRoleId() != 1) {// 不是管理员不允许重启 + logger.error("非管理员不允许重载配置"); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("非管理员不允许重载配置"); + return JSON.toJSONString(convertJsonString(response)); + } + if (systemService.reloadConfig()) { + logger.info("重载配置成功"); + response.setCode(ResponseCode.OK.getCode()); + response.setMessage("重载配置成功"); + } else { + logger.error("重载配置失败"); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("重载配置失败"); + } + return convertJsonString(response); + } +} diff --git a/src/main/java/com/wms/controller/TaskController.java b/src/main/java/com/wms/controller/TaskController.java new file mode 100644 index 0000000..e291b09 --- /dev/null +++ b/src/main/java/com/wms/controller/TaskController.java @@ -0,0 +1,93 @@ +package com.wms.controller; + +import com.alibaba.fastjson2.JSON; +import com.wms.annotation.MyLog; +import com.wms.constants.enums.*; +import com.wms.entity.app.*; +import com.wms.service.*; +import com.wms.utils.HttpUtils; +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; +import org.springframework.web.bind.annotation.*; +import static com.wms.utils.StringUtils.convertJsonString; + +/** + * WMS任务控制类 + * + * @author 梁州 + * @date 2023/2/14 + */ +@Controller +@CrossOrigin +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +@RequestMapping(value = "/wms/task") +public class TaskController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + /** + * 任务服务 + */ + private final TaskService taskService; + /** + * 库存服务 + */ + private final StockService stockService; + /** + * 库位服务 + */ + private final LocationService locationService; + /** + * 任务记录服务 + */ + private final TaskRecordService taskRecordService; + /** + * 站台服务 + */ + private final StandService standService; + /** + * 请求头部信息 + */ + private final HttpServletRequest servletRequest; + /** + * 日志服务 + */ + private final LogService logService; + + /** + * 接收入库任务请求 + * + * @param taskInRequest 入库任务 + * @return 结果 + */ + @PostMapping("/sendGoodsInTask") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + @MyLog(logTitle = "入库请求", logMethod = "sendGoodsInTask") + public String receiveGoodsInTask(@RequestBody TaskInRequestEntity taskInRequest) { + logger.info("接收到入库请求:{},ip地址:{}", JSON.toJSONString(taskInRequest), HttpUtils.getIpAddr(servletRequest)); + // 创建响应信息 + ResponseEntity response = new ResponseEntity(); + try { + + logger.info("接收入库请求成功!"); + response.setCode(ResponseCode.OK.getCode()); + response.setMessage("接收入库请求成功!"); + return convertJsonString(response); + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + logger.error("发生异常:{}", e.getMessage()); + // 返回其他异常 + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("发生意料之外的错误"); + return convertJsonString(response); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/wms/controller/TaskDealController.java b/src/main/java/com/wms/controller/TaskDealController.java new file mode 100644 index 0000000..a7fe901 --- /dev/null +++ b/src/main/java/com/wms/controller/TaskDealController.java @@ -0,0 +1,172 @@ +package com.wms.controller; + +import com.alibaba.fastjson2.JSON; +import com.wms.constants.enums.*; +import com.wms.entity.app.ResponseEntity; +import com.wms.entity.table.LocationDto; +import com.wms.entity.table.TaskDto; +import com.wms.entity.table.WmsLogDto; +import com.wms.service.*; +import com.wms.utils.HttpUtils; +import com.wms.utils.StringUtils; +import com.wms.utils.WmsUtils; +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; +import java.util.Objects; + +import static com.wms.config.InitLocalConfig.configMap; + +/** + * 这个类处理任务反馈信息 + */ +@Controller +@CrossOrigin +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +@RequestMapping(value = "/wms/taskDeal") +public class TaskDealController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + private final TaskService taskService; + private final HttpServletRequest servletRequest; + private final TaskController taskController; + private final StockService stockService; + private final LocationService locationService; + private final ConfigService configService; + private final LogService logService; + + /** + * 更改任务状态 + * + * @param request 请求参数 + * @return 结果 + */ + @PostMapping("/changeTaskStatus") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + public String changeTaskStatus(@RequestBody TaskDto request) { + logger.info("用户请求更改任务状态,用户名:{},ip地址:{}", request.getUserName(), HttpUtils.getIpAddr(servletRequest)); + logger.info("请求详细:{}", JSON.toJSONString(request)); + ResponseEntity response = new ResponseEntity(); + try { + if (request.getTaskStatus() == null) { + logger.error("请选择任务状态"); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("请选择任务状态"); + return JSON.toJSONString(response); + } + // 更改后的任务状态 + int taskStatusRequest = request.getTaskStatus(); + int wcsTaskStatusAfter = 0; + // 查询任务 + TaskDto taskQuery = new TaskDto(); + taskQuery.setTaskId(request.getTaskId()); + List tasks = taskService.selTasks(taskQuery); + if (tasks.size() == 0) { + logger.error("当前任务不存在"); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("当前任务不存在"); + return JSON.toJSONString(response); + } + TaskDto currentTask = tasks.get(0); + String newDestination = ""; + if (Objects.equals(currentTask.getTaskType(), TaskType.IN.getCode()) && StringUtils.isNotEmpty(request.getDestination()) && !Objects.equals(request.getDestination(), currentTask.getDestination())) {// 入库任务库位变更 + if (taskStatusRequest != 0) { + logger.error("更改库位必须重置任务"); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("更改库位必须重置任务"); + return JSON.toJSONString(response); + } + newDestination = request.getDestination(); + } + String taskGroupId = currentTask.getTaskGroup(); + if (taskStatusRequest == 0) {// 重置任务 + logger.info("任务重置"); + // 将当前taskGroup的所有任务都设置为新建状态 + TaskDto taskQuery2 = new TaskDto(); + taskQuery2.setTaskGroup(taskGroupId); + List tasks2 = taskService.selTasks(taskQuery2); + for (TaskDto task2 : tasks2) { + if (StringUtils.isNotEmpty(newDestination)) { + task2.setDestination(newDestination); + } + task2.setTaskStatus(WmsTaskStatus.NEW.getCode()); + task2.setUserName(request.getUserName()); + taskService.executeTask(task2); + } + // 如果更新了任务,那么该库位信息也要变更 + if (Objects.equals(currentTask.getTaskType(), TaskType.IN.getCode()) && StringUtils.isNotEmpty(newDestination)) { + LocationDto newLocationQuery = new LocationDto(newDestination); + List newLocations = locationService.selLocations(newLocationQuery); + for (LocationDto newLocation : newLocations) { + newLocation.setLocationStatus(LocationStatus.EMPTY.getCode()); + locationService.modifyLocation(newLocation); + break; + } + } + // WCS取消任务 + } else if (taskStatusRequest == 1) {// 取消任务 + logger.info("任务取消"); + WmsReceiveTaskResultEntity sendToWmsRequest = new WmsReceiveTaskResultEntity(); + sendToWmsRequest.setTaskId(taskGroupId); + sendToWmsRequest.setTaskStatus(WcsTaskStatus.CANCEL.getCode()); + sendToWmsRequest.setVehicleNo(currentTask.getVehicleNo()); + sendToWmsRequest.setDestination(currentTask.getDestination()); + taskController.receiveTaskResult(sendToWmsRequest); + wcsTaskStatusAfter = 999; + } else if (taskStatusRequest == 2) {// 完成任务 + logger.info("任务完成"); + WmsReceiveTaskResultEntity sendToWmsRequest = new WmsReceiveTaskResultEntity(); + sendToWmsRequest.setTaskId(taskGroupId); + sendToWmsRequest.setTaskStatus(WcsTaskStatus.FINISH.getCode()); + sendToWmsRequest.setVehicleNo(currentTask.getVehicleNo()); + sendToWmsRequest.setDestination(currentTask.getDestination()); + taskController.receiveTaskResult(sendToWmsRequest); + wcsTaskStatusAfter = 3; + } + // 向WCS反馈 + WmsReceiveTaskResultEntity sendToWcsRequest = new WmsReceiveTaskResultEntity(); + sendToWcsRequest.setTaskId(taskGroupId); + sendToWcsRequest.setTaskStatus(wcsTaskStatusAfter); + if (StringUtils.isNotEmpty(newDestination)) { + sendToWcsRequest.setDestination(newDestination); + } + ResponseEntity response1; + for (int i = 0; i < 5; i++) { + // 发送请求 + String url = configMap.get("WCS_TASK_CHANGE") ; + response1 = JSON.parseObject(HttpUtils.sendHttpPostWithoutToken(url, JSON.toJSONString(sendToWcsRequest)), ResponseEntity.class); + try { + logService.addWmsLog(new WmsLogDto(WmsUtils.generateId("LOG_"), "向WCS请求更改任务状态", "ChangeTaskStatus", JSON.toJSONString(sendToWcsRequest), JSON.toJSONString(response1), url, new Date(), "WMS")); + } catch (Exception e) { + logger.error("插入日志错误"); + } + logger.info("向WCS反馈任务状态变更"); + if (Objects.equals(response1.getCode(), 0)) {// 发送成功,则不再发送;不成功,一共尝试发送5次 + break; + } + } + logger.info("更新任务状态成功"); + response.setCode(ResponseCode.OK.getCode()); + response.setMessage("更新任务状态成功"); + return JSON.toJSONString(response); + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + logger.error("发生异常{}", e.getMessage()); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("发生异常" + e.getMessage()); + return JSON.toJSONString(response); + } + } +} diff --git a/src/main/java/com/wms/controller/TestController.java b/src/main/java/com/wms/controller/TestController.java new file mode 100644 index 0000000..b509b88 --- /dev/null +++ b/src/main/java/com/wms/controller/TestController.java @@ -0,0 +1,221 @@ +package com.wms.controller; + +import com.alibaba.fastjson2.JSON; +import com.wms.constants.enums.LocationStatus; +import com.wms.constants.enums.ResponseCode; +import com.wms.constants.enums.VehicleStatus; +import com.wms.entity.app.ResponseEntity; +import com.wms.entity.table.LocationDto; +import com.wms.entity.table.UserDto; +import com.wms.entity.table.VehicleDto; +import com.wms.entity.test.ExcelTest; +import com.wms.service.LocationService; +import com.wms.service.VehicleService; +import com.wms.utils.MyPassword; +import com.wms.utils.excel.ExcelUtils; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.util.ArrayList; +import java.util.List; + +/** + * 测试控制类 + */ +@Controller +@CrossOrigin +@RequestMapping(value = "/wms/test") +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class TestController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + /** + * 库位服务 + */ + private final LocationService locationService; + private final VehicleService vehicleService; + + @PostMapping("/genLocations") + @ResponseBody + public String genLocations() { + // 巷道1 一共2排45列12层 + for (int i = 1; i <= 18; i++) {// 列 + for (int j = 1; j <= 11; j++) {// 层 + // 1排 + int markDepth1 = 1; + for (int m = 3; m >= 1; m--) { + String locationId = StringUtils.leftPad(String.valueOf(1), 2, "0") + StringUtils.leftPad(String.valueOf(i), 2, "0") + StringUtils.leftPad(String.valueOf(j), 2, "0") + "-" + StringUtils.leftPad(String.valueOf(m), 2, "0"); + LocationDto tempLocation = new LocationDto(); + tempLocation.setLocationId(locationId); + tempLocation.setAreaId(1); + tempLocation.setTunnelId(1); + tempLocation.setEquipmentId(1); + tempLocation.setLocationType(0); + tempLocation.setQueue(1); + tempLocation.setLine(i); + tempLocation.setLayer(j); + tempLocation.setDepth(m); + tempLocation.setIsLock(0); + tempLocation.setLocationStatus(0); + tempLocation.setMarkDepth(markDepth1); + if (locationService.selLocations(tempLocation).size() == 0) { + locationService.addLocation(tempLocation); + markDepth1++; + } + } + // 2排 + int markDepth2 = 4; + for (int m = 1; m <= 3; m++) { + String locationId = StringUtils.leftPad(String.valueOf(2), 2, "0") + StringUtils.leftPad(String.valueOf(i), 2, "0") + StringUtils.leftPad(String.valueOf(j), 2, "0") + "-" + StringUtils.leftPad(String.valueOf(m), 2, "0"); + LocationDto tempLocation = new LocationDto(); + tempLocation.setLocationId(locationId); + tempLocation.setAreaId(1); + tempLocation.setTunnelId(1); + tempLocation.setEquipmentId(1); + tempLocation.setLocationType(0); + tempLocation.setQueue(2); + tempLocation.setLine(i); + tempLocation.setLayer(j); + tempLocation.setDepth(m); + tempLocation.setIsLock(0); + tempLocation.setLocationStatus(0); + tempLocation.setMarkDepth(markDepth2); + if (locationService.selLocations(tempLocation).size() == 0) { + locationService.addLocation(tempLocation); + markDepth2++; + } + } + // 3排 + int markDepth3 = 4; + for (int m = 1; m <= 3; m++) { + String locationId = StringUtils.leftPad(String.valueOf(3), 2, "0") + StringUtils.leftPad(String.valueOf(i), 2, "0") + StringUtils.leftPad(String.valueOf(j), 2, "0") + "-" + StringUtils.leftPad(String.valueOf(m), 2, "0"); + LocationDto tempLocation = new LocationDto(); + tempLocation.setLocationId(locationId); + tempLocation.setAreaId(1); + tempLocation.setTunnelId(2); + tempLocation.setEquipmentId(2); + tempLocation.setLocationType(0); + tempLocation.setQueue(3); + tempLocation.setLine(i); + tempLocation.setLayer(j); + tempLocation.setDepth(m); + tempLocation.setIsLock(0); + tempLocation.setLocationStatus(0); + tempLocation.setMarkDepth(markDepth3); + if (locationService.selLocations(tempLocation).size() == 0) { + locationService.addLocation(tempLocation); + markDepth3++; + } + } + // 4排 + int markDepth4 = 1; + for (int m = 3; m >= 1; m--) { + String locationId = StringUtils.leftPad(String.valueOf(4), 2, "0") + StringUtils.leftPad(String.valueOf(i), 2, "0") + StringUtils.leftPad(String.valueOf(j), 2, "0") + "-" + StringUtils.leftPad(String.valueOf(m), 2, "0"); + LocationDto tempLocation = new LocationDto(); + tempLocation.setLocationId(locationId); + tempLocation.setAreaId(1); + tempLocation.setTunnelId(2); + tempLocation.setEquipmentId(2); + tempLocation.setLocationType(0); + tempLocation.setQueue(4); + tempLocation.setLine(i); + tempLocation.setLayer(j); + tempLocation.setDepth(m); + tempLocation.setIsLock(0); + tempLocation.setLocationStatus(0); + tempLocation.setMarkDepth(markDepth4); + if (locationService.selLocations(tempLocation).size() == 0) { + locationService.addLocation(tempLocation); + markDepth4++; + } + } + } + } + return "success"; + } + + /** + * 测试导入 + * + * @param file 文件 + * @return 导入结果 + */ + @PostMapping("/testExcelImport") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + public String testExcelImport(@RequestPart("file") MultipartFile file) { + ResponseEntity response = new ResponseEntity(); + try { + List tests = ExcelUtils.readMultipartFile(file, ExcelTest.class); + for (ExcelTest test : tests) { + // 更新库位 + LocationDto locationQuery = new LocationDto(); + locationQuery.setLocationId(test.getLocationId()); + List locations = locationService.selLocations(locationQuery); + if (locations.size() > 0) { + LocationDto currentLocation = locations.get(0); + currentLocation.setLocationStatus(LocationStatus.OCCUPY.getCode()); + locationService.modifyLocation(currentLocation); + // 添加载具 + VehicleDto vehicle = new VehicleDto(); + vehicle.setVehicleId("XZBK" + StringUtils.leftPad(test.getVehicleId().trim(), 4, "0")); + vehicle.setCurrentLocation(test.getLocationId()); + vehicle.setVehicleStatus(VehicleStatus.ON.getCode()); + vehicle.setIsEmpty(1); + if (vehicleService.selVehicleById(test.getVehicleId()) == null) { + vehicleService.addVehicle(vehicle); + } else { + vehicleService.modifyVehicle(vehicle); + } + } + } + response.setCode(ResponseCode.OK.getCode()); + response.setMessage("导入excel成功"); + response.setReturnData(tests); + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("导入excel发生错误"); + } + logger.info(JSON.toJSONString(response)); + return JSON.toJSONString(response); + } + + /** + * 测试导出 + * + * @param response 请求 + */ + @GetMapping("/testExcelExport") + @ResponseBody + public void testExcelExport(HttpServletResponse response) { + List tests = new ArrayList<>(); + ExcelTest temp1 = new ExcelTest("010101", "XZBK0001"); + ExcelTest temp2 = new ExcelTest("020101", "XZBK0002"); + tests.add(temp1); + tests.add(temp2); + ExcelUtils.export(response, "测试导出", tests, ExcelTest.class); + } + + @PostMapping("/genPassword") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + public String genPassword(@RequestBody UserDto user) { + ResponseEntity response = new ResponseEntity(); + response.setCode(ResponseCode.OK.getCode()); + response.setMessage("创建密码成功"); + response.setReturnData(MyPassword.encrypt(user.getLoginPassword())); + return JSON.toJSONString(response); + } +} diff --git a/src/main/java/com/wms/controller/UserController.java b/src/main/java/com/wms/controller/UserController.java new file mode 100644 index 0000000..1e44af0 --- /dev/null +++ b/src/main/java/com/wms/controller/UserController.java @@ -0,0 +1,208 @@ +package com.wms.controller; + +import com.alibaba.fastjson2.JSON; +import com.wms.constants.enums.ResponseCode; +import com.wms.entity.app.vo.MenuEntity; +import com.wms.entity.app.ResponseEntity; +import com.wms.entity.app.vo.UserConfigEntity; +import com.wms.entity.table.MenuDto; +import com.wms.entity.table.UserDto; +import com.wms.service.MenuService; +import com.wms.service.UserService; +import com.wms.utils.MyPassword; +import com.wms.constants.WmsConstants; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; +import org.springframework.web.bind.annotation.*; + +import java.util.LinkedList; +import java.util.List; +import java.util.Objects; + +/** + * WMS用户控制类 + * @author 梁州 + * @date 2023/2/14 + */ +@Controller +@CrossOrigin +@RequestMapping(value = "/wms/user") +public class UserController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + /** + * 用户服务 + */ + final UserService userService; + /** + * 菜单服务 + */ + final MenuService menuService; + + @Autowired + public UserController(UserService userService, MenuService menuService) { + this.userService = userService; + this.menuService = menuService; + } + + /** + * 带密码登录 + * @param user 用户 + * @return 结果 + */ + @PostMapping("/loginWithAuth") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + public String loginWithAuth(@RequestBody UserDto user) { + logger.info("WMS前端用户登录,登录账户名:{}", user.getLoginAccount()); + // 创建响应信息 + ResponseEntity rsp = new ResponseEntity(); + try { + // 查找对应用户的信息 + UserDto userForQuery = new UserDto(); + userForQuery.setLoginAccount(user.getLoginAccount()); + List waitForAuthUsers = userService.selectUsers(userForQuery); + if (waitForAuthUsers.size() < 1) { + logger.error("用户不存在,登录账户名:{}", user.getLoginAccount()); + // 返回错误 + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("用户不存在"); + return JSON.toJSONString(rsp); + } + // 验证密码 + UserDto waitForAuthUser = waitForAuthUsers.get(0); + if (!Objects.equals(MyPassword.encrypt(user.getLoginPassword()), waitForAuthUser.getLoginPassword())) { + logger.error("密码错误,登录账户名:{}", user.getLoginAccount()); + // 返回错误 + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("密码错误"); + return JSON.toJSONString(rsp); + } + // 当前用户 + UserDto currentUser = waitForAuthUsers.get(0); + + // 返回成功 + logger.info("登录成功,登录账户名:{}", currentUser.getLoginAccount()); + rsp.setCode(ResponseCode.OK.getCode()); + rsp.setMessage("登录成功"); + // 返回用户数据 + rsp.setReturnData(generateUserInfo(currentUser)); + return JSON.toJSONString(rsp); + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + logger.info("数据库错误:{}", e.getMessage()); + // 返回其他异常 + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage(e.getMessage()); + return JSON.toJSONString(rsp); + } + } + + /** + * 无密码登录 + * @param user 用户 + * @return 结果 + */ + @PostMapping("/loginWithoutAuth") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + public String loginWithoutAuth(@RequestBody UserDto user) { + logger.info("WMS前端用户登录,登录账户名:{}", user.getLoginAccount()); + // 创建响应信息 + ResponseEntity rsp = new ResponseEntity(); + try { + // 查找对应用户的信息 + UserDto userForQuery = new UserDto(); + userForQuery.setLoginAccount(user.getLoginAccount()); + List waitForAuthUsers = userService.selectUsers(userForQuery); + if (waitForAuthUsers.size() < 1) { + // 返回错误 + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("用户不存在"); + return JSON.toJSONString(rsp); + } + UserDto currentUser = waitForAuthUsers.get(0); + // 返回成功 + logger.info("登录成功,登录账户名:{}", currentUser.getLoginAccount()); + rsp.setCode(ResponseCode.OK.getCode()); + rsp.setMessage("登录成功"); + // 返回用户数据 + rsp.setReturnData(generateUserInfo(currentUser)); + return JSON.toJSONString(rsp); + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + logger.info("数据库错误:{}", e.getMessage()); + // 返回其他异常 + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("数据库错误"); + return JSON.toJSONString(rsp); + } + } + + /** + * 构造用户信息(菜单、按钮等权限) + * @param currentUser 当前用户 + * @return 用户信息 + */ + private UserConfigEntity generateUserInfo (UserDto currentUser) { + UserConfigEntity userConfigEntity = new UserConfigEntity(); + try { + List menus = menuService.selMenuByRoleId(currentUser.getRoleId()); + List menuList = new LinkedList<>(); + // 查找一级菜单 + for (MenuDto firstMenu : menus) { + if (WmsConstants.ROOT_MENU_ID.equals(firstMenu.getParentId())) {// 查找到所有的一级子菜单 + MenuEntity tempFirstMenu = new MenuEntity(); + tempFirstMenu.setId(firstMenu.getMenuId());// ID + tempFirstMenu.setLabelName(firstMenu.getLabelName());// 菜单显示名称 + tempFirstMenu.setIconValue(firstMenu.getIconValue());// 图标 + tempFirstMenu.setPath(firstMenu.getPath());// 路径 + // 设置子菜单 + List tempFirstMenuChildren = new LinkedList<>(); + for (MenuDto secondMenu : menus) { + if (firstMenu.getMenuId().equals(secondMenu.getParentId())) { + MenuEntity tempSecondMenu = new MenuEntity(); + tempSecondMenu.setId(secondMenu.getMenuId());// ID + tempSecondMenu.setLabelName(secondMenu.getLabelName());// 菜单显示名称 + tempSecondMenu.setIconValue(secondMenu.getIconValue());// 图标 + tempSecondMenu.setPath(secondMenu.getPath());// 路径 + // 设置子菜单 + List tempSecondMenuChildren = new LinkedList<>(); + for (MenuDto thirdMenu : menus) { + if (secondMenu.getMenuId().equals(thirdMenu.getParentId())) { + MenuEntity tempThirdMenu = new MenuEntity(); + tempSecondMenu.setId(thirdMenu.getMenuId());// ID + tempSecondMenu.setLabelName(thirdMenu.getLabelName());// 菜单显示名称 + tempSecondMenu.setIconValue(thirdMenu.getIconValue());// 图标 + tempSecondMenu.setPath(thirdMenu.getPath());// 路径 + // 添加按钮 + tempSecondMenuChildren.add(tempThirdMenu); + } + } + tempSecondMenu.setChildren(tempSecondMenuChildren); + // 添加二级菜单 + tempFirstMenuChildren.add(tempSecondMenu); + } + } + tempFirstMenu.setChildren(tempFirstMenuChildren); + // 添加一级菜单 + menuList.add(tempFirstMenu); + } + } + logger.info("构造用户信息成功,当前用户:{}", currentUser.getUserName()); + // 设置返回信息 + userConfigEntity.setUser(currentUser); + userConfigEntity.setMenuList(menuList); + } catch (Exception e) { + logger.error("构造用户信息失败,当前用户:{}", currentUser.getUserName()); + } + return userConfigEntity; + } +} diff --git a/src/main/java/com/wms/controller/WmsLogController.java b/src/main/java/com/wms/controller/WmsLogController.java new file mode 100644 index 0000000..75f9789 --- /dev/null +++ b/src/main/java/com/wms/controller/WmsLogController.java @@ -0,0 +1,70 @@ +package com.wms.controller; + +import com.alibaba.fastjson2.JSON; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.wms.constants.enums.ResponseCode; +import com.wms.entity.page.PageDomain; +import com.wms.entity.page.TableRequest; +import com.wms.entity.page.TableResponse; +import com.wms.entity.table.WmsLogDto; +import com.wms.service.LogService; +import com.wms.utils.HttpUtils; +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@Controller +@CrossOrigin +@RequestMapping(value = "/wms/log") +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class WmsLogController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + /** + * 请求头部信息 + */ + private final HttpServletRequest servletRequest; + /** + * 日志服务 + */ + private final LogService logService; + + /** + * 查询日志 + * + * @param tableRequest 请求参数 + * @return 结果 + */ + @PostMapping("/queryWmsLog") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + public String queryLogs(@RequestBody TableRequest tableRequest) { + logger.info("查询日志,ip地址:{}, 用户名:{}", HttpUtils.getIpAddr(servletRequest), tableRequest.getParam().getLogUser()); + TableResponse tblResp = new TableResponse(); + try { + // 处理分页信息 + PageDomain pageRequest = tableRequest.getPage(); + PageHelper.startPage(pageRequest.getPageNum(), pageRequest.getPageSize()); + List logList = logService.selWmsLogs(tableRequest.getParam().getLogRequest()); + PageInfo logListPage = new PageInfo<>(logList); + tblResp.setCode(ResponseCode.OK.getCode()); + tblResp.setMessage("查询日志成功!"); + tblResp.setRows(logListPage.getList()); + tblResp.setTotal(logListPage.getTotal()); + return JSON.toJSONString(tblResp); + } catch (Exception e) { + tblResp.setCode(ResponseCode.ERROR.getCode()); + tblResp.setMessage("查询日志失败"); + } + return JSON.toJSONString(tblResp); + } +} diff --git a/src/main/java/com/wms/entity/app/ResponseEntity.java b/src/main/java/com/wms/entity/app/ResponseEntity.java new file mode 100644 index 0000000..0f48344 --- /dev/null +++ b/src/main/java/com/wms/entity/app/ResponseEntity.java @@ -0,0 +1,46 @@ +package com.wms.entity.app; + +/** + * 接口响应实体类 + */ +public class ResponseEntity { + + /** + * 响应代码 + */ + private Integer code; + + /** + * 错误信息 + */ + private String message; + + /** + * 返回数据(非必须) + */ + private Object returnData; + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Object getReturnData() { + return returnData; + } + + public void setReturnData(Object returnData) { + this.returnData = returnData; + } +} diff --git a/src/main/java/com/wms/entity/app/display/LocationData.java b/src/main/java/com/wms/entity/app/display/LocationData.java new file mode 100644 index 0000000..2c9f2b9 --- /dev/null +++ b/src/main/java/com/wms/entity/app/display/LocationData.java @@ -0,0 +1,55 @@ +package com.wms.entity.app.display; + +/** + * 大屏用数据详细类 + */ +public class LocationData { + /** + * 零件号 + */ + private String goodsId; + /** + * 零件名称 + */ + private String goodsName; + /** + * 数量 + */ + private Integer goodsNum; + /** + * 备注 + */ + private String remark; + + public String getGoodsId() { + return goodsId; + } + + public void setGoodsId(String goodsId) { + this.goodsId = goodsId; + } + + public String getGoodsName() { + return goodsName; + } + + public void setGoodsName(String goodsName) { + this.goodsName = goodsName; + } + + public Integer getGoodsNum() { + return goodsNum; + } + + public void setGoodsNum(Integer goodsNum) { + this.goodsNum = goodsNum; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } +} diff --git a/src/main/java/com/wms/entity/app/display/LocationInfo.java b/src/main/java/com/wms/entity/app/display/LocationInfo.java new file mode 100644 index 0000000..10eeee1 --- /dev/null +++ b/src/main/java/com/wms/entity/app/display/LocationInfo.java @@ -0,0 +1,45 @@ +package com.wms.entity.app.display; + +import java.util.List; + +/** + * 大屏用库位信息 + */ +public class LocationInfo { + /** + * 库位编号 + */ + private String locationId; + /** + * 料箱号 + */ + private String vehicleNo; + /** + * 详细数据 + */ + private List locationData; + + public String getLocationId() { + return locationId; + } + + public void setLocationId(String locationId) { + this.locationId = locationId; + } + + public String getVehicleNo() { + return vehicleNo; + } + + public void setVehicleNo(String vehicleNo) { + this.vehicleNo = vehicleNo; + } + + public List getLocationData() { + return locationData; + } + + public void setLocationData(List locationData) { + this.locationData = locationData; + } +} diff --git a/src/main/java/com/wms/entity/app/dto/ConfigDto.java b/src/main/java/com/wms/entity/app/dto/ConfigDto.java new file mode 100644 index 0000000..d8dff40 --- /dev/null +++ b/src/main/java/com/wms/entity/app/dto/ConfigDto.java @@ -0,0 +1,34 @@ +package com.wms.entity.app.dto; + +import lombok.Data; + +/** + * 配置 + */ +@Data +public class ConfigDto { + /** + * 配置ID + */ + private Integer configId; + + /** + * 配置键 + */ + private String configKey; + + /** + * 配置值 + */ + private String configValue; + + /** + * 配置类型 + */ + private String configType; + + /** + * 配置名称 + */ + private String configName; +} diff --git a/src/main/java/com/wms/entity/app/dto/GoodsDto.java b/src/main/java/com/wms/entity/app/dto/GoodsDto.java new file mode 100644 index 0000000..3d9e056 --- /dev/null +++ b/src/main/java/com/wms/entity/app/dto/GoodsDto.java @@ -0,0 +1,56 @@ +package com.wms.entity.app.dto; + +import lombok.Data; + +import java.util.Date; + +/** + * 物料 + */ +@Data +public class GoodsDto { + /** + * 物料编号 + */ + private String goodsId; + /** + * 物料名称 + */ + private String goodsName; + /** + * 单位 + */ + private String goodsUnit; + /** + * 物料ID + */ + private String itemId; + /** + * 用户物料类型 + */ + private String itemType; + /** + * 库存类别 + */ + private String invCategory; + /** + * 存储天数 + */ + private Integer lifeDays; + /** + * 库存组织Id + */ + private String organizationId; + /** + * 库存组织代码 + */ + private String organizationCode; + /** + * 最后更新日期 + */ + private Date lastUpdateTime; + /** + * 最后更新用户 + */ + private String lastUpdateUser; +} diff --git a/src/main/java/com/wms/entity/app/dto/LocationDto.java b/src/main/java/com/wms/entity/app/dto/LocationDto.java new file mode 100644 index 0000000..865c8a9 --- /dev/null +++ b/src/main/java/com/wms/entity/app/dto/LocationDto.java @@ -0,0 +1,50 @@ +package com.wms.entity.app.dto; + +import lombok.Data; + +/** + * 库位 + */ +@Data +public class LocationDto { + /** + * 库位编号 + */ + private String locationId; + /** + * 库区编号 + */ + private Integer areaId; + /** + * 设备编号 + */ + private Integer equipmentId; + /** + * 库位类型 + */ + private Integer locationType; + /** + * 排 + */ + private Integer wRow; + /** + * 列 + */ + private Integer wCol; + /** + * 层 + */ + private Integer wLayer; + /** + * 深度 + */ + private Integer wDepth; + /** + * 是否锁定 + */ + private Integer isLock; + /** + * 库位状态 + */ + private Integer locationStatus; +} diff --git a/src/main/java/com/wms/entity/app/dto/MenuDto.java b/src/main/java/com/wms/entity/app/dto/MenuDto.java new file mode 100644 index 0000000..4a34392 --- /dev/null +++ b/src/main/java/com/wms/entity/app/dto/MenuDto.java @@ -0,0 +1,30 @@ +package com.wms.entity.app.dto; + +import lombok.Data; + +/** + * 菜单 + */ +@Data +public class MenuDto { + /** + * 菜单Id + */ + private String menuId; + /** + * 菜单名称 + */ + private String labelName; + /** + * 图标值 + */ + private String iconValue; + /** + * 地址 + */ + private String path; + /** + * 父菜单Id + */ + private String parentId; +} diff --git a/src/main/java/com/wms/entity/app/dto/PageDto.java b/src/main/java/com/wms/entity/app/dto/PageDto.java new file mode 100644 index 0000000..5996657 --- /dev/null +++ b/src/main/java/com/wms/entity/app/dto/PageDto.java @@ -0,0 +1,43 @@ +package com.wms.entity.app.dto; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Collections; +import java.util.List; +import java.util.function.Function; + +@Data +@ApiModel(value = "分页数据实体") +public class PageDto { + @ApiModelProperty(value ="总行数") + private Long total; + @ApiModelProperty(value ="总页数") + private Long pages; + @ApiModelProperty(value ="数据集合") + private List lists; + + /** + * 将数据库集合转换为分页结果 + * @param page 数据库查询结果 + * @param converter 转换方法 + * @return 转换后的分页结果 + * @param 数据库结果集 + * @param 前端显示结果集 + */ + public static PageDto of(Page page, Function converter) { + PageDto pageDto = new PageDto<>(); + // 设置总数 + pageDto.setTotal(page.getTotal()); + // 设置总页数 + pageDto.setPages(page.getPages()); + if (page.getRecords().isEmpty()) { + pageDto.setLists(Collections.emptyList()); + return pageDto; + } + pageDto.setLists(page.getRecords().stream().map(converter).toList()); + return pageDto; + } +} diff --git a/src/main/java/com/wms/entity/app/dto/StandDto.java b/src/main/java/com/wms/entity/app/dto/StandDto.java new file mode 100644 index 0000000..cf68593 --- /dev/null +++ b/src/main/java/com/wms/entity/app/dto/StandDto.java @@ -0,0 +1,57 @@ +package com.wms.entity.app.dto; + +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 站台表 + */ +@Data +public class StandDto { + /** + * 站台id + */ + private String standId; + /** + * 是否允许入库 + */ + private Integer allowIn; + /** + * 是否允许出库 + */ + private Integer allowOut; + /** + * 站台是否锁定 + */ + private Integer isLock; + /** + * 站台状态 + */ + private Integer standStatus; + /** + * 设备编号 + */ + private Integer equipmentId; + /** + * 库区编号 + */ + private Integer areaId; + /** + * 站台类型 + */ + private Integer standType; + /** + * 站台ip + */ + private String standIp; + /** + * 外部id + * 如果对接,其它系统的站台id + */ + private String outerId; + /** + * 最近一次的使用时间 + */ + private LocalDateTime lastUseTime; +} diff --git a/src/main/java/com/wms/entity/app/dto/StockDto.java b/src/main/java/com/wms/entity/app/dto/StockDto.java new file mode 100644 index 0000000..b7dfaf6 --- /dev/null +++ b/src/main/java/com/wms/entity/app/dto/StockDto.java @@ -0,0 +1,66 @@ +package com.wms.entity.app.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.wms.entity.app.dto.extend.StockDetailInfo; +import com.wms.utils.excel.ExcelExport; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 库存 + */ +@Data +public class StockDto { + /** + * 库存编号 + */ + private String stockId; + /** + * 库位ID + */ + private String locationId; + /** + * 托盘号 + */ + private String vehicleId; + /** + * 重量 + */ + private BigDecimal weight; + /** + * 库存状态 + * 正常、出库中、锁定 等 + */ + private Integer stockStatus; + /** + * 创建时间 + */ + private LocalDateTime createTime; + /** + * 最后更新时间 + */ + private LocalDateTime lastUpdateTime; + /** + * 最后更新用户 + */ + private String lastUpdateUser; + /** + * 是否盘点 + */ + private Integer isInventory; + /** + * 盘点任务号 盘点出库和盘点入库同样 + */ + private String inventoryTaskId; + /** + * 呆滞天数 + */ + private Integer noUseDays; + /** + * 物料相关信息 + */ + private StockDetailInfo goodsRelated; +} diff --git a/src/main/java/com/wms/entity/app/dto/TaskDto.java b/src/main/java/com/wms/entity/app/dto/TaskDto.java new file mode 100644 index 0000000..c1bb74b --- /dev/null +++ b/src/main/java/com/wms/entity/app/dto/TaskDto.java @@ -0,0 +1,70 @@ +package com.wms.entity.app.dto; + +import com.wms.entity.app.dto.extend.TaskDetailInfo; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 任务 + */ +@Data +public class TaskDto { + /** + * 任务号 + */ + private String taskId; + /** + * 任务类型 + */ + private Integer taskType; + /** + * 任务状态 + */ + private Integer taskStatus; + /** + * 起点 + */ + private String origin; + /** + * 终点 + */ + private String destination; + /** + * 任务优先级 + */ + private Integer taskPriority; + /** + * 任务组 + */ + private String taskGroup; + /** + * 载具号 + */ + private String vehicleId; + /** + * 重量 + */ + private BigDecimal weight; + /** + * 载具尺寸 + */ + private Integer vehicleSize; + /** + * 创建时间 + */ + private LocalDateTime createTime; + /** + * 完成时间 + */ + private LocalDateTime finishTime; + /** + * 用户名 + */ + private String userName; + /** + * 物料相关信息 + */ + private TaskDetailInfo goodsRelated; +} diff --git a/src/main/java/com/wms/entity/app/dto/TaskRecordDto.java b/src/main/java/com/wms/entity/app/dto/TaskRecordDto.java new file mode 100644 index 0000000..4365cbd --- /dev/null +++ b/src/main/java/com/wms/entity/app/dto/TaskRecordDto.java @@ -0,0 +1,67 @@ +package com.wms.entity.app.dto; + +import com.wms.entity.app.dto.extend.TaskDetailInfo; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Data +public class TaskRecordDto { + /** + * 任务号 + */ + private String taskId; + /** + * 任务类型 + */ + private Integer taskType; + /** + * 任务状态 + */ + private Integer taskStatus; + /** + * 起点 + */ + private String origin; + /** + * 终点 + */ + private String destination; + /** + * 任务优先级 + */ + private Integer taskPriority; + /** + * 任务组 + */ + private String taskGroup; + /** + * 载具号 + */ + private String vehicleId; + /** + * 重量 + */ + private BigDecimal weight; + /** + * 载具尺寸 + */ + private Integer vehicleSize; + /** + * 创建时间 + */ + private LocalDateTime createTime; + /** + * 完成时间 + */ + private LocalDateTime finishTime; + /** + * 用户名 + */ + private String userName; + /** + * 物料相关 + */ + private TaskDetailInfo goodsRelated; +} diff --git a/src/main/java/com/wms/entity/app/dto/UserDto.java b/src/main/java/com/wms/entity/app/dto/UserDto.java new file mode 100644 index 0000000..2c43710 --- /dev/null +++ b/src/main/java/com/wms/entity/app/dto/UserDto.java @@ -0,0 +1,28 @@ +package com.wms.entity.app.dto; + +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 用户 + */ +@Data +public class UserDto { + /** 用户ID */ + private Integer userId; + /** 用户名 */ + private String userName; + /** 角色Id */ + private Integer roleId = null; + /** 登录账户 */ + private String loginAccount; + /** 登录密码 */ + private String loginPassword; + /** 添加时间 */ + private LocalDateTime addTime; + /** 更新时间 */ + private LocalDateTime updateTime; + /** 添加用户名 */ + private String addUser; +} diff --git a/src/main/java/com/wms/entity/app/dto/VehicleDto.java b/src/main/java/com/wms/entity/app/dto/VehicleDto.java new file mode 100644 index 0000000..e695223 --- /dev/null +++ b/src/main/java/com/wms/entity/app/dto/VehicleDto.java @@ -0,0 +1,35 @@ +package com.wms.entity.app.dto; + +import com.wms.entity.app.dto.extend.VehicleDetailInfo; +import lombok.Data; + +/** + * 载具 + */ +@Data +public class VehicleDto { + /** + * 载具编号 + */ + private String vehicleId; + /** + * 当前所在位置 + */ + private String currentLocation; + /** + * 载具状态 + */ + private Integer vehicleStatus; + /** + * 是否是空箱 + */ + private Integer isEmpty; + /** + * 载具类型 + */ + private Integer vehicleType; + /** + * 额外信息 + */ + private VehicleDetailInfo details; +} diff --git a/src/main/java/com/wms/entity/app/dto/WmsLogDto.java b/src/main/java/com/wms/entity/app/dto/WmsLogDto.java new file mode 100644 index 0000000..664dacf --- /dev/null +++ b/src/main/java/com/wms/entity/app/dto/WmsLogDto.java @@ -0,0 +1,46 @@ +package com.wms.entity.app.dto; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.extension.handlers.Fastjson2TypeHandler; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 操作日志类 + */ +@Data +public class WmsLogDto { + /** + * id + */ + private String logId; + /** + * 描述/标题 + */ + private String logTitle; + /** + * 方法 + */ + private String logMethod; + /** + * 请求参数 + */ + private Object logRequest; + /** + * 响应参数 + */ + private Object logResponse; + /** + * 请求的ip + */ + private String logIp; + /** + * 请求时间 + */ + private LocalDateTime logTime; + /** + * 请求用户 + */ + private String logUser; +} diff --git a/src/main/java/com/wms/entity/app/dto/extend/StockDetailInfo.java b/src/main/java/com/wms/entity/app/dto/extend/StockDetailInfo.java new file mode 100644 index 0000000..49a583f --- /dev/null +++ b/src/main/java/com/wms/entity/app/dto/extend/StockDetailInfo.java @@ -0,0 +1,19 @@ +package com.wms.entity.app.dto.extend; + +import lombok.Data; + +@Data +public class StockDetailInfo { + /** + * 物料编号 + */ + private String goodsId; + /** + * 物料名称 + */ + private String goodsName; + /** + * 物料状态 + */ + private Integer goodsStatus; +} diff --git a/src/main/java/com/wms/entity/app/dto/extend/TaskDetailInfo.java b/src/main/java/com/wms/entity/app/dto/extend/TaskDetailInfo.java new file mode 100644 index 0000000..3519b93 --- /dev/null +++ b/src/main/java/com/wms/entity/app/dto/extend/TaskDetailInfo.java @@ -0,0 +1,15 @@ +package com.wms.entity.app.dto.extend; + +import lombok.Data; + +@Data +public class TaskDetailInfo { + /** + * 物料编号 + */ + private String goodsId; + /** + * 物料名称 + */ + private String goodsName; +} diff --git a/src/main/java/com/wms/entity/app/dto/extend/VehicleDetailInfo.java b/src/main/java/com/wms/entity/app/dto/extend/VehicleDetailInfo.java new file mode 100644 index 0000000..6869970 --- /dev/null +++ b/src/main/java/com/wms/entity/app/dto/extend/VehicleDetailInfo.java @@ -0,0 +1,18 @@ +package com.wms.entity.app.dto.extend; + +import lombok.Data; + +/** + * 料箱详细信息 + */ +@Data +public class VehicleDetailInfo { + /// 上 + private String up; + /// 下 + private String down; + /// 左右 + private String left; + /// 右 + private String right; +} diff --git a/src/main/java/com/wms/entity/app/query/GoodsQuery.java b/src/main/java/com/wms/entity/app/query/GoodsQuery.java new file mode 100644 index 0000000..edabbab --- /dev/null +++ b/src/main/java/com/wms/entity/app/query/GoodsQuery.java @@ -0,0 +1,33 @@ +package com.wms.entity.app.query; + +import com.wms.entity.app.dto.extend.StockDetailInfo; +import com.wms.entity.table.Goods; +import com.wms.entity.table.Stock; +import com.wms.utils.StringUtils; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +@ApiModel(value = "物料查询") +public class GoodsQuery extends PageQuery{ + @ApiModelProperty(value ="物料编号") + private String goodsId; + @ApiModelProperty(value ="物料名称") + private String goodsName; + + + /** + * 将goodsQuery转化为GoodsPO + * @return goodsPO + */ + public Goods toGoodsPO() { + Goods goodsPO = new Goods(); + goodsPO.setGoodsId(goodsId);// 物料编号 + goodsPO.setGoodsName(goodsName);// 物料描述 + + return goodsPO; + } +} diff --git a/src/main/java/com/wms/entity/app/query/PageQuery.java b/src/main/java/com/wms/entity/app/query/PageQuery.java new file mode 100644 index 0000000..b2bd61e --- /dev/null +++ b/src/main/java/com/wms/entity/app/query/PageQuery.java @@ -0,0 +1,48 @@ +package com.wms.entity.app.query; + +import com.baomidou.mybatisplus.core.metadata.OrderItem; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.wms.utils.StringUtils; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "分页查询") +public class PageQuery { + @ApiModelProperty(value ="页码") + private Long pageNo = 1L; + @ApiModelProperty(value ="每页行数") + private Long pageSize = 10L; + @ApiModelProperty(value ="排序字段") + private String sortBy; + @ApiModelProperty(value ="是否升序") + private Boolean isAsc = true; + + /** + * 将前端查询转换为数据库查询可用的分页查询 + * @param orderItems 排序字段 + * @return 分页查询 + * @param 实体类PO + */ + public Page toMpPage(OrderItem ... orderItems){ + Page page = Page.of(pageNo, pageSize); + if (StringUtils.isNotEmpty(sortBy)) { + page.addOrder(new OrderItem().setColumn(sortBy).setAsc(isAsc)); + } else { + page.addOrder(orderItems); + } + return page; + } + + /** + * 传入 默认排序字段的转换 + * @param defaultSortValue 默认查询 + * @param isAsc 排序方式 + * @return 分页查询 + * @param 实体类 + */ + public Page toMpPage(String defaultSortValue, Boolean isAsc){ + return toMpPage(new OrderItem().setColumn(sortBy).setAsc(isAsc)); + } +} diff --git a/src/main/java/com/wms/entity/app/query/StockQuery.java b/src/main/java/com/wms/entity/app/query/StockQuery.java new file mode 100644 index 0000000..e3b66c0 --- /dev/null +++ b/src/main/java/com/wms/entity/app/query/StockQuery.java @@ -0,0 +1,47 @@ +package com.wms.entity.app.query; + +import com.wms.entity.app.dto.extend.StockDetailInfo; +import com.wms.entity.table.Stock; +import com.wms.utils.StringUtils; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "库存记录查询---客户端") +public class StockQuery extends PageQuery { + @ApiModelProperty(value = "库存状态") + private Integer stockStatus; + @ApiModelProperty(value = "物料状态") + private Integer goodsStatus; + @ApiModelProperty(value = "库位编号") + private String locationId; + @ApiModelProperty(value = "载具号/料箱号") + private String vehicleId; + @ApiModelProperty(value = "物料编号") + private String goodsId; + @ApiModelProperty(value = "物料名称/描述") + private String goodsName; + + /** + * 根据客户端查询生成数据库查询条件 + * @return 数据库PO + */ + public Stock toStockPO() { + Stock stockPO = new Stock(); + stockPO.setLocationId(locationId);// 库位号 + stockPO.setStockStatus(stockStatus);// 库存状态 + stockPO.setVehicleId(vehicleId);// 载具号 + if (StringUtils.isNotEmpty(goodsId) || StringUtils.isNotEmpty(goodsName) || goodsStatus != null) {// 包含物料详细信息 + StockDetailInfo goodsRelatedPO = new StockDetailInfo(); + goodsRelatedPO.setGoodsId(goodsId); + goodsRelatedPO.setGoodsName(goodsName); + goodsRelatedPO.setGoodsStatus(goodsStatus); + stockPO.setGoodsRelated(goodsRelatedPO); + } + + return stockPO; + } +} diff --git a/src/main/java/com/wms/entity/app/query/TaskRecordQuery.java b/src/main/java/com/wms/entity/app/query/TaskRecordQuery.java new file mode 100644 index 0000000..8e7d536 --- /dev/null +++ b/src/main/java/com/wms/entity/app/query/TaskRecordQuery.java @@ -0,0 +1,41 @@ +package com.wms.entity.app.query; + +import com.wms.entity.app.dto.extend.TaskDetailInfo; +import com.wms.entity.table.TaskRecord; +import com.wms.utils.StringUtils; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "任务记录查询---客户端") +public class TaskRecordQuery extends PageQuery { + @ApiModelProperty(value = "任务类型") + private Integer taskType; + @ApiModelProperty(value = "载具号/料箱号") + private String vehicleId; + @ApiModelProperty(value = "物料编号") + private String goodsId; + @ApiModelProperty(value = "物料名称/描述") + private String goodsName; + + /** + * 根据客户端查询生成数据库查询条件 + * @return 数据库PO + */ + public TaskRecord toTaskRecordPO() { + TaskRecord recordPO = new TaskRecord(); + recordPO.setTaskType(taskType);// 任务类型 + recordPO.setVehicleId(vehicleId);// 载具号 + if (StringUtils.isNotEmpty(goodsId) || StringUtils.isNotEmpty(goodsName)) {// 包含物料详细信息 + TaskDetailInfo goodsRelatedPO = new TaskDetailInfo(); + goodsRelatedPO.setGoodsId(goodsId); + goodsRelatedPO.setGoodsName(goodsName); + recordPO.setGoodsRelated(goodsRelatedPO); + } + + return recordPO; + } +} diff --git a/src/main/java/com/wms/entity/app/vo/LayerLocation.java b/src/main/java/com/wms/entity/app/vo/LayerLocation.java new file mode 100644 index 0000000..e37a602 --- /dev/null +++ b/src/main/java/com/wms/entity/app/vo/LayerLocation.java @@ -0,0 +1,36 @@ +package com.wms.entity.app.vo; + +import com.wms.entity.table.LocationDto; + +import java.util.List; + +/** + * 按层划分的库位实体类 + */ +public class LayerLocation { + /** + * 当前层 + */ + private Integer layer; + + /** + * 当前层的所有库位 + */ + private List currentColLocations; + + public Integer getLayer() { + return layer; + } + + public void setLayer(Integer layer) { + this.layer = layer; + } + + public List getCurrentColLocations() { + return currentColLocations; + } + + public void setCurrentColLocations(List currentColLocations) { + this.currentColLocations = currentColLocations; + } +} diff --git a/src/main/java/com/wms/entity/app/vo/MenuEntity.java b/src/main/java/com/wms/entity/app/vo/MenuEntity.java new file mode 100644 index 0000000..c79ceb6 --- /dev/null +++ b/src/main/java/com/wms/entity/app/vo/MenuEntity.java @@ -0,0 +1,70 @@ +package com.wms.entity.app.vo; + +import java.util.List; + +public class MenuEntity { + /** + * 菜单Id + */ + private String id; + + /** + * 菜单名称 + */ + private String labelName; + + /** + * 图标值 + */ + private String iconValue; + + /** + * 地址 + */ + private String path; + + /** + * 子菜单 + */ + private List children; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getLabelName() { + return labelName; + } + + public void setLabelName(String labelName) { + this.labelName = labelName; + } + + public String getIconValue() { + return iconValue; + } + + public void setIconValue(String iconValue) { + this.iconValue = iconValue; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } +} diff --git a/src/main/java/com/wms/entity/app/vo/RowLocation.java b/src/main/java/com/wms/entity/app/vo/RowLocation.java new file mode 100644 index 0000000..96af6b3 --- /dev/null +++ b/src/main/java/com/wms/entity/app/vo/RowLocation.java @@ -0,0 +1,34 @@ +package com.wms.entity.app.vo; + +import java.util.List; + +/** + * 排 + */ +public class RowLocation { + /** + * 当前排 + */ + private Integer row; + + /** + * 当前排的所有库位 + */ + private List currentLayerLocations; + + public Integer getRow() { + return row; + } + + public void setRow(Integer row) { + this.row = row; + } + + public List getCurrentLayerLocations() { + return currentLayerLocations; + } + + public void setCurrentLayerLocations(List currentLayerLocations) { + this.currentLayerLocations = currentLayerLocations; + } +} diff --git a/src/main/java/com/wms/entity/app/vo/StockVo.java b/src/main/java/com/wms/entity/app/vo/StockVo.java new file mode 100644 index 0000000..3789d88 --- /dev/null +++ b/src/main/java/com/wms/entity/app/vo/StockVo.java @@ -0,0 +1,14 @@ +package com.wms.entity.app.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +@Data +public class StockVo { + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime createTime; +} diff --git a/src/main/java/com/wms/entity/app/vo/UserConfigEntity.java b/src/main/java/com/wms/entity/app/vo/UserConfigEntity.java new file mode 100644 index 0000000..9650bef --- /dev/null +++ b/src/main/java/com/wms/entity/app/vo/UserConfigEntity.java @@ -0,0 +1,35 @@ +package com.wms.entity.app.vo; + +import com.wms.entity.table.UserDto; +import io.swagger.annotations.ApiModel; + +import java.util.List; + +@ApiModel(value = "用户信息") +public class UserConfigEntity { + /** + * 用户认证信息 + */ + private UserDto user; + + /** + * 菜单及各种按钮信息 + */ + private List menuList; + + public UserDto getUser() { + return user; + } + + public void setUser(UserDto user) { + this.user = user; + } + + public List getMenuList() { + return menuList; + } + + public void setMenuList(List menuList) { + this.menuList = menuList; + } +} diff --git a/src/main/java/com/wms/entity/app/wcs/ETaskData.java b/src/main/java/com/wms/entity/app/wcs/ETaskData.java new file mode 100644 index 0000000..aeb4f56 --- /dev/null +++ b/src/main/java/com/wms/entity/app/wcs/ETaskData.java @@ -0,0 +1,58 @@ +package com.wms.entity.app.wcs; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +@ApiModel(value = "电子标签详细任务数据") +public class ETaskData { + @ApiModelProperty(value = "任务号") + private String taskId; + @ApiModelProperty(value = "点位") + private String location; + @ApiModelProperty(value = "物料编号") + private String goodsId; + @ApiModelProperty(value = "物料名称") + private String goodsName; + @ApiModelProperty(value = "需求数量") + private Integer needNum; + + public String getTaskId() { + return taskId; + } + + public void setTaskId(String taskId) { + this.taskId = taskId; + } + + public String getLocation() { + return location; + } + + public void setLocation(String location) { + this.location = location; + } + + public String getGoodsId() { + return goodsId; + } + + public void setGoodsId(String goodsId) { + this.goodsId = goodsId; + } + + public String getGoodsName() { + return goodsName; + } + + public void setGoodsName(String goodsName) { + this.goodsName = goodsName; + } + + public Integer getNeedNum() { + return needNum; + } + + public void setNeedNum(Integer needNum) { + this.needNum = needNum; + } +} diff --git a/src/main/java/com/wms/entity/app/wcs/WcsBoxArriveRequest.java b/src/main/java/com/wms/entity/app/wcs/WcsBoxArriveRequest.java new file mode 100644 index 0000000..d271c19 --- /dev/null +++ b/src/main/java/com/wms/entity/app/wcs/WcsBoxArriveRequest.java @@ -0,0 +1,48 @@ +package com.wms.entity.app.wcs; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +@ApiModel(value = "WCS料箱到达请求") +public class WcsBoxArriveRequest { + @ApiModelProperty(value = "任务组编号") + private String taskGroup; + @ApiModelProperty(value = "料箱号") + private String vehicleNo; + @ApiModelProperty(value = "点位---站台") + private String location; + @ApiModelProperty(value = "备注") + private String remark; + + public String getTaskGroup() { + return taskGroup; + } + + public void setTaskGroup(String taskGroup) { + this.taskGroup = taskGroup; + } + + public String getVehicleNo() { + return vehicleNo; + } + + public void setVehicleNo(String vehicleNo) { + this.vehicleNo = vehicleNo; + } + + public String getLocation() { + return location; + } + + public void setLocation(String location) { + this.location = location; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } +} diff --git a/src/main/java/com/wms/entity/app/wcs/WcsChangeTaskRequest.java b/src/main/java/com/wms/entity/app/wcs/WcsChangeTaskRequest.java new file mode 100644 index 0000000..f813ac4 --- /dev/null +++ b/src/main/java/com/wms/entity/app/wcs/WcsChangeTaskRequest.java @@ -0,0 +1,28 @@ +package com.wms.entity.app.wcs; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +@ApiModel(description = "向WCS发送任务请求") +public class WcsChangeTaskRequest { + @ApiModelProperty(value = "任务ID", required = true) + private String taskId; + @ApiModelProperty(value = "任务状态---修改后", required = true) + private Integer taskStatus; + + public String getTaskId() { + return taskId; + } + + public void setTaskId(String taskId) { + this.taskId = taskId; + } + + public Integer getTaskStatus() { + return taskStatus; + } + + public void setTaskStatus(Integer taskStatus) { + this.taskStatus = taskStatus; + } +} diff --git a/src/main/java/com/wms/entity/app/wcs/WcsCommonResponse.java b/src/main/java/com/wms/entity/app/wcs/WcsCommonResponse.java new file mode 100644 index 0000000..c4ce534 --- /dev/null +++ b/src/main/java/com/wms/entity/app/wcs/WcsCommonResponse.java @@ -0,0 +1,38 @@ +package com.wms.entity.app.wcs; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +@ApiModel(description = "WCS通用返回信息") +public class WcsCommonResponse { + @ApiModelProperty(value = "返回码", required = true) + private Integer code; + @ApiModelProperty(value = "返回信息", required = true) + private String message; + @ApiModelProperty(value = "返回数据") + private T returnData; + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public T getReturnData() { + return returnData; + } + + public void setReturnData(T returnData) { + this.returnData = returnData; + } +} diff --git a/src/main/java/com/wms/entity/app/wcs/WcsETaskFeedbackRequest.java b/src/main/java/com/wms/entity/app/wcs/WcsETaskFeedbackRequest.java new file mode 100644 index 0000000..b08bd33 --- /dev/null +++ b/src/main/java/com/wms/entity/app/wcs/WcsETaskFeedbackRequest.java @@ -0,0 +1,108 @@ +package com.wms.entity.app.wcs; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +@ApiModel(value = "WCS电子标签任务反馈请求") +public class WcsETaskFeedbackRequest { + @ApiModelProperty(value = "任务组") + private String taskGroup; + @ApiModelProperty(value = "任务类型") + private Integer taskType; + @ApiModelProperty(value = "料箱号") + private String vehicleNo; + @ApiModelProperty(value = "订单号") + private String orderId; + @ApiModelProperty(value = "任务号") + private String taskId; + @ApiModelProperty(value = "点位") + private String location; + @ApiModelProperty(value = "物料编号") + private String goodsId; + @ApiModelProperty(value = "物料名称") + private String goodsName; + @ApiModelProperty(value = "需求数量") + private Integer needNum; + @ApiModelProperty(value = "确认数量") + private Integer confirmNum; + + public String getTaskGroup() { + return taskGroup; + } + + public void setTaskGroup(String taskGroup) { + this.taskGroup = taskGroup; + } + + public Integer getTaskType() { + return taskType; + } + + public void setTaskType(Integer taskType) { + this.taskType = taskType; + } + + public String getVehicleNo() { + return vehicleNo; + } + + public void setVehicleNo(String vehicleNo) { + this.vehicleNo = vehicleNo; + } + + public String getOrderId() { + return orderId; + } + + public void setOrderId(String orderId) { + this.orderId = orderId; + } + + public String getTaskId() { + return taskId; + } + + public void setTaskId(String taskId) { + this.taskId = taskId; + } + + public String getLocation() { + return location; + } + + public void setLocation(String location) { + this.location = location; + } + + public String getGoodsId() { + return goodsId; + } + + public void setGoodsId(String goodsId) { + this.goodsId = goodsId; + } + + public String getGoodsName() { + return goodsName; + } + + public void setGoodsName(String goodsName) { + this.goodsName = goodsName; + } + + public Integer getNeedNum() { + return needNum; + } + + public void setNeedNum(Integer needNum) { + this.needNum = needNum; + } + + public Integer getConfirmNum() { + return confirmNum; + } + + public void setConfirmNum(Integer confirmNum) { + this.confirmNum = confirmNum; + } +} diff --git a/src/main/java/com/wms/entity/app/wcs/WcsETaskRequest.java b/src/main/java/com/wms/entity/app/wcs/WcsETaskRequest.java new file mode 100644 index 0000000..58ba1a9 --- /dev/null +++ b/src/main/java/com/wms/entity/app/wcs/WcsETaskRequest.java @@ -0,0 +1,60 @@ +package com.wms.entity.app.wcs; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.util.List; + +@ApiModel(value = "WCS电子标签任务发送请求") +public class WcsETaskRequest { + @ApiModelProperty(value = "任务组") + private String taskGroup; + @ApiModelProperty(value = "任务类型") + private Integer taskType; + @ApiModelProperty(value = "料箱号") + private String vehicleNo; + @ApiModelProperty(value = "订单号") + private String orderId; + @ApiModelProperty(value = "任务数据") + private List taskData; + + public String getTaskGroup() { + return taskGroup; + } + + public void setTaskGroup(String taskGroup) { + this.taskGroup = taskGroup; + } + + public Integer getTaskType() { + return taskType; + } + + public void setTaskType(Integer taskType) { + this.taskType = taskType; + } + + public String getVehicleNo() { + return vehicleNo; + } + + public void setVehicleNo(String vehicleNo) { + this.vehicleNo = vehicleNo; + } + + public String getOrderId() { + return orderId; + } + + public void setOrderId(String orderId) { + this.orderId = orderId; + } + + public List getTaskData() { + return taskData; + } + + public void setTaskData(List taskData) { + this.taskData = taskData; + } +} diff --git a/src/main/java/com/wms/entity/app/wcs/WcsFeedbackTaskRequest.java b/src/main/java/com/wms/entity/app/wcs/WcsFeedbackTaskRequest.java new file mode 100644 index 0000000..950d53c --- /dev/null +++ b/src/main/java/com/wms/entity/app/wcs/WcsFeedbackTaskRequest.java @@ -0,0 +1,48 @@ +package com.wms.entity.app.wcs; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +@ApiModel(description = "WCS发送任务反馈") +public class WcsFeedbackTaskRequest { + @ApiModelProperty(value = "任务Id") + private String taskId; + @ApiModelProperty(value = "任务状态") + private Integer taskStatus; + @ApiModelProperty(value = "任务终点") + private String destination; + @ApiModelProperty(value = "异常信息") + private String message; + + public String getTaskId() { + return taskId; + } + + public void setTaskId(String taskId) { + this.taskId = taskId; + } + + public Integer getTaskStatus() { + return taskStatus; + } + + public void setTaskStatus(Integer taskStatus) { + this.taskStatus = taskStatus; + } + + public String getDestination() { + return destination; + } + + public void setDestination(String destination) { + this.destination = destination; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/src/main/java/com/wms/entity/app/wcs/WcsStandTaskRequest.java b/src/main/java/com/wms/entity/app/wcs/WcsStandTaskRequest.java new file mode 100644 index 0000000..0376114 --- /dev/null +++ b/src/main/java/com/wms/entity/app/wcs/WcsStandTaskRequest.java @@ -0,0 +1,60 @@ +package com.wms.entity.app.wcs; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.util.List; + +@ApiModel(value = "WCS站台拣选任务请求") +public class WcsStandTaskRequest { + @ApiModelProperty("任务组编号") + private String taskGroup; + @ApiModelProperty("料箱号") + private String vehicleNo; + @ApiModelProperty("任务类型---1:拣选任务") + private Integer taskType; + @ApiModelProperty("点位---站台号") + private List location; + @ApiModelProperty("备注") + private String remark; + + public String getTaskGroup() { + return taskGroup; + } + + public void setTaskGroup(String taskGroup) { + this.taskGroup = taskGroup; + } + + public String getVehicleNo() { + return vehicleNo; + } + + public void setVehicleNo(String vehicleNo) { + this.vehicleNo = vehicleNo; + } + + public Integer getTaskType() { + return taskType; + } + + public void setTaskType(Integer taskType) { + this.taskType = taskType; + } + + public List getLocation() { + return location; + } + + public void setLocation(List location) { + this.location = location; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } +} diff --git a/src/main/java/com/wms/entity/app/wcs/WcsTaskRequest.java b/src/main/java/com/wms/entity/app/wcs/WcsTaskRequest.java new file mode 100644 index 0000000..bf82f3e --- /dev/null +++ b/src/main/java/com/wms/entity/app/wcs/WcsTaskRequest.java @@ -0,0 +1,93 @@ +package com.wms.entity.app.wcs; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.math.BigDecimal; + +/** + * 向Wcs发送任务的请求 + */ +@ApiModel(description = "向WCS发送任务请求") +public class WcsTaskRequest { + @ApiModelProperty(value = "任务ID", required = true) + private String taskId; + @ApiModelProperty(value = "任务类型", required = true) + private Integer taskType; + @ApiModelProperty(value = "任务优先级---同一任务类型中优先级") + private Integer priority; + @ApiModelProperty(value = "任务起点") + private String origin; + @ApiModelProperty(value = "任务终点") + private String destination; + @ApiModelProperty(value = "料箱号", required = true) + private String vehicleNo; + @ApiModelProperty(value = "料箱尺寸") + private Integer vehicleSize = 0; + @ApiModelProperty(value = "重量") + private BigDecimal weight = BigDecimal.ZERO; + + public String getTaskId() { + return taskId; + } + + public void setTaskId(String taskId) { + this.taskId = taskId; + } + + public Integer getTaskType() { + return taskType; + } + + public void setTaskType(Integer taskType) { + this.taskType = taskType; + } + + public Integer getPriority() { + return priority; + } + + public void setPriority(Integer priority) { + this.priority = priority; + } + + public String getOrigin() { + return origin; + } + + public void setOrigin(String origin) { + this.origin = origin; + } + + public String getDestination() { + return destination; + } + + public void setDestination(String destination) { + this.destination = destination; + } + + public String getVehicleNo() { + return vehicleNo; + } + + public void setVehicleNo(String vehicleNo) { + this.vehicleNo = vehicleNo; + } + + public Integer getVehicleSize() { + return vehicleSize; + } + + public void setVehicleSize(Integer vehicleSize) { + this.vehicleSize = vehicleSize; + } + + public BigDecimal getWeight() { + return weight; + } + + public void setWeight(BigDecimal weight) { + this.weight = weight; + } +} diff --git a/src/main/java/com/wms/entity/app/wcs/WcsVehicleInRequest.java b/src/main/java/com/wms/entity/app/wcs/WcsVehicleInRequest.java new file mode 100644 index 0000000..7c8b909 --- /dev/null +++ b/src/main/java/com/wms/entity/app/wcs/WcsVehicleInRequest.java @@ -0,0 +1,48 @@ +package com.wms.entity.app.wcs; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +@ApiModel(value = "WCS请求料箱入库") +public class WcsVehicleInRequest { + @ApiModelProperty(value = "点位") + private String point; + @ApiModelProperty(value = "料箱号") + private String vehicleNo; + @ApiModelProperty(value = "条码信息") + private String codeMessage; + @ApiModelProperty(value = "备注") + private String remark; + + public String getPoint() { + return point; + } + + public void setPoint(String point) { + this.point = point; + } + + public String getVehicleNo() { + return vehicleNo; + } + + public void setVehicleNo(String vehicleNo) { + this.vehicleNo = vehicleNo; + } + + public String getCodeMessage() { + return codeMessage; + } + + public void setCodeMessage(String codeMessage) { + this.codeMessage = codeMessage; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } +} diff --git a/src/main/java/com/wms/entity/page/PageDomain.java b/src/main/java/com/wms/entity/page/PageDomain.java new file mode 100644 index 0000000..dc6e300 --- /dev/null +++ b/src/main/java/com/wms/entity/page/PageDomain.java @@ -0,0 +1,67 @@ +package com.wms.entity.page; + +import com.wms.utils.StringUtils; + +/** + * 分页请求 + * 前端表格用 + */ +public class PageDomain { + /** + * 当前记录起始索引 + */ + private Integer pageNum; + /** + * 每页显示记录数 + */ + private Integer pageSize; + /** + *排序列 + */ + private String orderByColumn; + /** + * 排序方向 + */ + private String isAsc = "asc"; + + public String getOrderBy() + { + if (StringUtils.isEmpty(orderByColumn)) + { + return ""; + } + return StringUtils.toUnderScoreCase(orderByColumn) + " " + isAsc; + } + + public Integer getPageNum() { + return pageNum; + } + + public void setPageNum(Integer pageNum) { + this.pageNum = pageNum; + } + + public Integer getPageSize() { + return pageSize; + } + + public void setPageSize(Integer pageSize) { + this.pageSize = pageSize; + } + + public String getOrderByColumn() { + return orderByColumn; + } + + public void setOrderByColumn(String orderByColumn) { + this.orderByColumn = orderByColumn; + } + + public String getIsAsc() { + return isAsc; + } + + public void setIsAsc(String isAsc) { + this.isAsc = isAsc; + } +} diff --git a/src/main/java/com/wms/entity/page/TableRequest.java b/src/main/java/com/wms/entity/page/TableRequest.java new file mode 100644 index 0000000..a29b835 --- /dev/null +++ b/src/main/java/com/wms/entity/page/TableRequest.java @@ -0,0 +1,43 @@ +package com.wms.entity.page; + +/** + * 前端请求表格数据 + */ +public class TableRequest { + /** + * 分页请求数据 + */ + private PageDomain page; + /** + * 参数 + */ + private T param; + /** + * 参数2 + */ + private T2 param2; + + public PageDomain getPage() { + return page; + } + + public void setPage(PageDomain page) { + this.page = page; + } + + public T getParam() { + return param; + } + + public void setParam(T param) { + this.param = param; + } + + public T2 getParam2() { + return param2; + } + + public void setParam2(T2 param2) { + this.param2 = param2; + } +} diff --git a/src/main/java/com/wms/entity/page/TableResponse.java b/src/main/java/com/wms/entity/page/TableResponse.java new file mode 100644 index 0000000..4ea4218 --- /dev/null +++ b/src/main/java/com/wms/entity/page/TableResponse.java @@ -0,0 +1,57 @@ +package com.wms.entity.page; + +import java.util.List; + +/** + * 前端表格请求的返回值 + */ +public class TableResponse { + /** + * 总记录数 + */ + private long total; + /** + * 列表数据 + */ + private List rows; + /** + * 状态码 + */ + private int code; + /** + * 消息 + */ + private String message; + + public long getTotal() { + return total; + } + + public void setTotal(long total) { + this.total = total; + } + + public List getRows() { + return rows; + } + + public void setRows(List rows) { + this.rows = rows; + } + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/src/main/java/com/wms/entity/table/Config.java b/src/main/java/com/wms/entity/table/Config.java new file mode 100644 index 0000000..d5643b5 --- /dev/null +++ b/src/main/java/com/wms/entity/table/Config.java @@ -0,0 +1,44 @@ +package com.wms.entity.table; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * 配置 + */ +@Data +@TableName(value = "tbl_sys_config", autoResultMap = true) +public class Config { + /** + * 配置ID + */ + @TableId(value = "config_id", type = IdType.AUTO) + private Integer configId; + + /** + * 配置键 + */ + @TableField(value = "config_key") + private String configKey; + + /** + * 配置值 + */ + @TableField(value = "config_value") + private String configValue; + + /** + * 配置展示类型 + */ + @TableField(value = "config_type") + private String configType; + + /** + * 配置名称 + */ + @TableField(value = "config_name") + private String configName; +} diff --git a/src/main/java/com/wms/entity/table/Goods.java b/src/main/java/com/wms/entity/table/Goods.java new file mode 100644 index 0000000..28c80af --- /dev/null +++ b/src/main/java/com/wms/entity/table/Goods.java @@ -0,0 +1,68 @@ +package com.wms.entity.table; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.util.Date; + +/** + * 物料 + */ +@Data +@TableName("tbl_app_goods") +public class Goods { + + /** + * 物料编号 + */ + @TableId(value = "goods_id") + private String goodsId; + + /** + * 物料名称 + */ + @TableField(value = "goods_name") + private String goodsName; + + /** + * 单位 + */ + private String goodsUnit; + + /** + * 物料ID + */ + private String itemId; + /** + * 用户物料类型 + */ + private String itemType; + /** + * 库存类别 + */ + private String invCategory; + /** + * 存储天数 + */ + private Integer lifeDays; + /** + * 库存组织Id + */ + private String organizationId; + /** + * 库存组织代码 + */ + private String organizationCode; + + /** + * 最后更新日期 + */ + private Date lastUpdateTime; + + /** + * 最后更新用户 + */ + private String lastUpdateUser; +} diff --git a/src/main/java/com/wms/entity/table/Location.java b/src/main/java/com/wms/entity/table/Location.java new file mode 100644 index 0000000..b15c1a5 --- /dev/null +++ b/src/main/java/com/wms/entity/table/Location.java @@ -0,0 +1,64 @@ +package com.wms.entity.table; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * 库位 + */ +@Data +@TableName(value = "tbl_app_location", autoResultMap = true) +public class Location { + /** + * 库位编号 + */ + @TableId(value = "location_id") + private String locationId; + /** + * 库区编号 + */ + @TableField(value = "area_id") + private Integer areaId; + /** + * 设备编号 + */ + @TableField(value = "equipment_id") + private Integer equipmentId; + /** + * 库位类型 + */ + @TableField(value = "location_type") + private Integer locationType; + /** + * 排 + */ + @TableField(value = "w_row") + private Integer wRow; + /** + * 列 + */ + @TableField(value = "w_col") + private Integer wCol; + /** + * 层 + */ + @TableField(value = "w_layer") + private Integer wLayer; + /** + * 深度 + */ + @TableField(value = "w_depth") + private Integer wDepth; + /** + * 是否锁定 + */ + @TableField(value = "is_lock") + private Integer isLock; + /** + * 库位状态 + */ + @TableField(value = "location_status") + private Integer locationStatus; +} diff --git a/src/main/java/com/wms/entity/table/Menu.java b/src/main/java/com/wms/entity/table/Menu.java new file mode 100644 index 0000000..d13eed3 --- /dev/null +++ b/src/main/java/com/wms/entity/table/Menu.java @@ -0,0 +1,39 @@ +package com.wms.entity.table; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +/** + * 菜单 + */ +@Data +@TableName(value = "tbl_app_menu", autoResultMap = true) +public class Menu { + /** + * 菜单Id + */ + @TableId(value = "menu_id") + private String menuId; + /** + * 菜单名称 + */ + @TableField(value = "label_name") + private String labelName; + /** + * 图标值 + */ + @TableField(value = "icon_value") + private String iconValue; + /** + * 地址 + */ + @TableField(value = "path") + private String path; + /** + * 父菜单Id + */ + @TableField(value = "parent_id") + private String parentId; +} diff --git a/src/main/java/com/wms/entity/table/Stand.java b/src/main/java/com/wms/entity/table/Stand.java new file mode 100644 index 0000000..d7ea532 --- /dev/null +++ b/src/main/java/com/wms/entity/table/Stand.java @@ -0,0 +1,74 @@ +package com.wms.entity.table; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 站台表 + */ +@Data +@TableName(value = "tbl_app_stand", autoResultMap = true) +public class Stand { + /** + * 站台id + */ + @TableId(value = "stand_id") + private String standId; + /** + * 是否允许入库 + */ + @TableField(value = "allow_in") + private Integer allowIn; + /** + * 是否允许出库 + */ + @TableField(value = "allow_out") + private Integer allowOut; + /** + * 站台是否锁定 + */ + @TableField(value = "is_lock") + private Integer isLock; + /** + * 站台状态 + */ + @TableField(value = "stand_status") + private Integer standStatus; + + /** + * 设备编号 + */ + @TableField(value = "equipment_id") + private Integer equipmentId; + + /** + * 库区编号 + */ + @TableField(value = "area_id") + private Integer areaId; + /** + * 站台类型 + */ + @TableField(value = "stand_type") + private Integer standType; + /** + * 站台ip + */ + @TableField(value = "stand_ip") + private String standIp; + /** + * 外部id + * 如mes上的站台编号 + */ + @TableField(value = "outer_id") + private String outerId; + /** + * 最近一次的使用时间 + */ + @TableField(value = "last_use_time") + private LocalDateTime lastUseTime; +} diff --git a/src/main/java/com/wms/entity/table/Stock.java b/src/main/java/com/wms/entity/table/Stock.java new file mode 100644 index 0000000..a9c39e5 --- /dev/null +++ b/src/main/java/com/wms/entity/table/Stock.java @@ -0,0 +1,80 @@ +package com.wms.entity.table; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.Fastjson2TypeHandler; +import com.wms.entity.app.dto.extend.StockDetailInfo; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 库存 + */ +@Data +@TableName(value = "tbl_app_stock", autoResultMap = true) +public class Stock { + /** + * 库存编号 + */ + @TableId(value = "stock_id") + private String stockId; + /** + * 库位ID + */ + @TableField(value = "location_id") + private String locationId; + /** + * 托盘号 + */ + @TableField(value = "vehicle_id") + private String vehicleId; + /** + * 重量 + */ + @TableField(value = "weight") + private BigDecimal weight; + /** + * 库存状态 + * 正常、出库中、锁定 等 + */ + @TableField(value = "stock_status") + private Integer stockStatus; + /** + * 创建时间 + */ + @TableField(value = "create_time") + private LocalDateTime createTime; + /** + * 最后更新时间 + */ + @TableField(value = "last_update_time") + private LocalDateTime lastUpdateTime; + /** + * 最后更新用户 + */ + @TableField(value = "last_update_user") + private String lastUpdateUser; + /** + * 是否盘点 + */ + @TableField(value = "is_inventory") + private Integer isInventory; + /** + * 盘点任务号 盘点出库和盘点入库同样 + */ + @TableField(value = "inventory_task_id") + private String inventoryTaskId; + /** + * 呆滞天数 + */ + @TableField(value = "no_use_days") + private Integer noUseDays; + /** + * 物料相关信息 + */ + @TableField(value = "goods_related", typeHandler = Fastjson2TypeHandler.class) + private StockDetailInfo goodsRelated; +} diff --git a/src/main/java/com/wms/entity/table/Task.java b/src/main/java/com/wms/entity/table/Task.java new file mode 100644 index 0000000..82e659a --- /dev/null +++ b/src/main/java/com/wms/entity/table/Task.java @@ -0,0 +1,89 @@ +package com.wms.entity.table; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.Fastjson2TypeHandler; +import com.wms.entity.app.dto.extend.TaskDetailInfo; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 任务 + */ +@Data +@TableName(value = "tbl_app_task", autoResultMap = true) +public class Task { + /** + * 任务号 + */ + @TableId(value = "task_id") + private String taskId; + /** + * 任务类型 + */ + @TableField(value = "task_type") + private Integer taskType; + /** + * 任务状态 + */ + @TableField(value = "task_status") + private Integer taskStatus; + /** + * 起点 + */ + @TableField(value = "origin") + private String origin; + /** + * 终点 + */ + @TableField(value = "destination") + private String destination; + /** + * 任务优先级 + */ + @TableField(value = "task_priority") + private Integer taskPriority; + /** + * 任务组---多与载具绑定 + */ + @TableField(value = "task_group") + private String taskGroup; + /** + * 载具号/料箱号 + */ + @TableField(value = "vehicle_id") + private String vehicleId; + /** + * 重量 + */ + @TableField(value = "weight") + private BigDecimal weight; + /** + * 载具尺寸 + */ + @TableField(value = "vehicle_size") + private Integer vehicleSize; + /** + * 创建时间 + */ + @TableField(value = "create_time") + private LocalDateTime createTime; + /** + * 完成时间 + */ + @TableField(value = "finish_time") + private LocalDateTime finishTime; + /** + * 用户名 + */ + @TableField(value = "user_name") + private String userName; + /** + * 物料相关的详细信息 + */ + @TableField(value = "goods_related", typeHandler = Fastjson2TypeHandler.class) + private TaskDetailInfo goodsRelated; +} diff --git a/src/main/java/com/wms/entity/table/TaskRecord.java b/src/main/java/com/wms/entity/table/TaskRecord.java new file mode 100644 index 0000000..4163ac7 --- /dev/null +++ b/src/main/java/com/wms/entity/table/TaskRecord.java @@ -0,0 +1,86 @@ +package com.wms.entity.table; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.Fastjson2TypeHandler; +import com.wms.entity.app.dto.extend.TaskDetailInfo; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Data +@TableName(value = "tbl_app_task_bak", autoResultMap = true) +public class TaskRecord { + /** + * 任务号 + */ + @TableId(value = "task_id") + private String taskId; + /** + * 任务类型 + */ + @TableField(value = "task_type") + private Integer taskType; + /** + * 任务状态 + */ + @TableField(value = "task_status") + private Integer taskStatus; + /** + * 起点 + */ + @TableField(value = "origin") + private String origin; + /** + * 终点 + */ + @TableField(value = "destination") + private String destination; + /** + * 任务优先级 + */ + @TableField(value = "task_priority") + private Integer taskPriority; + /** + * 任务组 + */ + @TableField(value = "task_group") + private String taskGroup; + /** + * 载具号 + */ + @TableField(value = "vehicle_id") + private String vehicleId; + /** + * 重量 + */ + @TableField(value = "weight") + private BigDecimal weight; + /** + * 载具尺寸 + */ + @TableField(value = "vehicle_size") + private Integer vehicleSize; + /** + * 创建时间 + */ + @TableField(value = "create_time") + private LocalDateTime createTime; + /** + * 完成时间 + */ + @TableField(value = "finish_time") + private LocalDateTime finishTime; + /** + * 用户名 + */ + @TableField(value = "user_name") + private String userName; + /** + * 物料相关的详细信息 + */ + @TableField(value = "goods_related", typeHandler = Fastjson2TypeHandler.class) + private TaskDetailInfo goodsRelated; +} diff --git a/src/main/java/com/wms/entity/table/User.java b/src/main/java/com/wms/entity/table/User.java new file mode 100644 index 0000000..6e11732 --- /dev/null +++ b/src/main/java/com/wms/entity/table/User.java @@ -0,0 +1,49 @@ +package com.wms.entity.table; + + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 用户 + */ +@Data +@TableName(value = "tbl_sys_user", autoResultMap = true) +public class User { + /** 用户ID */ + @TableId(value = "user_id", type = IdType.AUTO) + private Integer userId; + + /** 用户名 */ + @TableField(value = "user_name") + private String userName; + + /** 角色Id */ + @TableField(value = "role_id") + private Integer roleId = null; + + /** 登录账户 */ + @TableField(value = "login_account") + private String loginAccount; + + /** 登录密码 */ + @TableField(value = "login_password") + private String loginPassword; + + /** 添加时间 */ + @TableField(value = "add_time") + private LocalDateTime addTime; + + /** 更新时间 */ + @TableField(value = "update_time") + private LocalDateTime updateTime; + + /** 添加用户名 */ + @TableField(value = "add_user") + private String addUser; +} diff --git a/src/main/java/com/wms/entity/table/Vehicle.java b/src/main/java/com/wms/entity/table/Vehicle.java new file mode 100644 index 0000000..345d8a2 --- /dev/null +++ b/src/main/java/com/wms/entity/table/Vehicle.java @@ -0,0 +1,46 @@ +package com.wms.entity.table; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.Fastjson2TypeHandler; +import com.wms.entity.app.dto.extend.VehicleDetailInfo; +import lombok.Data; + +/** + * 载具 + */ +@Data +@TableName(value = "tbl_app_vehicle", autoResultMap = true) +public class Vehicle { + /** + * 载具编号 + */ + @TableId(value = "vehicle_id") + private String vehicleId; + /** + * 当前所在位置 + */ + @TableField(value = "current_location") + private String currentLocation; + /** + * 载具状态 + */ + @TableField(value = "vehicle_status") + private Integer vehicleStatus; + /** + * 是否是空箱 + */ + @TableField(value = "is_empty") + private Integer isEmpty; + /** + * 载具类型 + */ + @TableField(value = "vehicle_type") + private Integer vehicleType; + /** + * 额外信息 + */ + @TableField(value = "details", typeHandler = Fastjson2TypeHandler.class) + private VehicleDetailInfo details; +} diff --git a/src/main/java/com/wms/entity/table/WmsLog.java b/src/main/java/com/wms/entity/table/WmsLog.java new file mode 100644 index 0000000..4640649 --- /dev/null +++ b/src/main/java/com/wms/entity/table/WmsLog.java @@ -0,0 +1,57 @@ +package com.wms.entity.table; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.handlers.Fastjson2TypeHandler; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 操作日志类 + */ +@Data +@TableName(value = "tbl_sys_log", autoResultMap = true) +public class WmsLog { + /** + * id + */ + @TableId(value = "log_id") + private String logId; + /** + * 描述/标题 + */ + @TableField(value = "log_title") + private String logTitle; + /** + * 方法 + */ + @TableField(value = "log_method") + private String logMethod; + /** + * 请求参数 + */ + @TableField(value = "log_request", typeHandler = Fastjson2TypeHandler.class) + private Object logRequest; + /** + * 响应参数 + */ + @TableField(value = "log_response", typeHandler = Fastjson2TypeHandler.class) + private Object logResponse; + /** + * 请求的ip + */ + @TableField(value = "log_ip") + private String logIp; + /** + * 请求时间 + */ + @TableField(value = "log_time") + private LocalDateTime logTime; + /** + * 请求用户 + */ + @TableField(value = "log_user") + private String logUser; +} diff --git a/src/main/java/com/wms/entity/test/ExcelTest.java b/src/main/java/com/wms/entity/test/ExcelTest.java new file mode 100644 index 0000000..03bead4 --- /dev/null +++ b/src/main/java/com/wms/entity/test/ExcelTest.java @@ -0,0 +1,36 @@ +package com.wms.entity.test; + +import com.wms.utils.excel.ExcelExport; +import com.wms.utils.excel.ExcelImport; + +public class ExcelTest { + @ExcelImport("库位") + @ExcelExport("库位") + private String locationId; + @ExcelImport("箱号") + @ExcelExport("箱号") + private String vehicleId; + + public ExcelTest(){}; + + public ExcelTest(String locationId, String vehicleId) { + this.locationId = locationId; + this.vehicleId = vehicleId; + } + + public String getLocationId() { + return locationId; + } + + public void setLocationId(String locationId) { + this.locationId = locationId; + } + + public String getVehicleId() { + return vehicleId; + } + + public void setVehicleId(String vehicleId) { + this.vehicleId = vehicleId; + } +} diff --git a/src/main/java/com/wms/mapper/ConfigMapper.java b/src/main/java/com/wms/mapper/ConfigMapper.java new file mode 100644 index 0000000..a4446ad --- /dev/null +++ b/src/main/java/com/wms/mapper/ConfigMapper.java @@ -0,0 +1,15 @@ +package com.wms.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.wms.entity.table.Config; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 配置 + */ +@Mapper +public interface ConfigMapper extends BaseMapper { + +} diff --git a/src/main/java/com/wms/mapper/GoodsMapper.java b/src/main/java/com/wms/mapper/GoodsMapper.java new file mode 100644 index 0000000..cef13d9 --- /dev/null +++ b/src/main/java/com/wms/mapper/GoodsMapper.java @@ -0,0 +1,10 @@ +package com.wms.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.wms.entity.table.GoodsDto; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface GoodsMapper extends BaseMapper { + +} diff --git a/src/main/java/com/wms/mapper/LocationMapper.java b/src/main/java/com/wms/mapper/LocationMapper.java new file mode 100644 index 0000000..c8326a0 --- /dev/null +++ b/src/main/java/com/wms/mapper/LocationMapper.java @@ -0,0 +1,10 @@ +package com.wms.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.wms.entity.table.LocationDto; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface LocationMapper extends BaseMapper { + +} diff --git a/src/main/java/com/wms/mapper/LogMapper.java b/src/main/java/com/wms/mapper/LogMapper.java new file mode 100644 index 0000000..7e0c5f1 --- /dev/null +++ b/src/main/java/com/wms/mapper/LogMapper.java @@ -0,0 +1,10 @@ +package com.wms.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.wms.entity.table.WmsLog; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface LogMapper extends BaseMapper { + +} diff --git a/src/main/java/com/wms/mapper/MenuMapper.java b/src/main/java/com/wms/mapper/MenuMapper.java new file mode 100644 index 0000000..feb69c6 --- /dev/null +++ b/src/main/java/com/wms/mapper/MenuMapper.java @@ -0,0 +1,13 @@ +package com.wms.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.wms.entity.table.MenuDto; +import org.apache.ibatis.annotations.Mapper; + +/** + * 菜单Mapper + */ +@Mapper +public interface MenuMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/wms/mapper/StandMapper.java b/src/main/java/com/wms/mapper/StandMapper.java new file mode 100644 index 0000000..098880e --- /dev/null +++ b/src/main/java/com/wms/mapper/StandMapper.java @@ -0,0 +1,10 @@ +package com.wms.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.wms.entity.table.StandDto; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface StandMapper extends BaseMapper { + +} diff --git a/src/main/java/com/wms/mapper/StockMapper.java b/src/main/java/com/wms/mapper/StockMapper.java new file mode 100644 index 0000000..faba906 --- /dev/null +++ b/src/main/java/com/wms/mapper/StockMapper.java @@ -0,0 +1,10 @@ +package com.wms.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.wms.entity.table.Stock; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface StockMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/wms/mapper/TaskMapper.java b/src/main/java/com/wms/mapper/TaskMapper.java new file mode 100644 index 0000000..341d2b3 --- /dev/null +++ b/src/main/java/com/wms/mapper/TaskMapper.java @@ -0,0 +1,10 @@ +package com.wms.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.wms.entity.table.Task; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface TaskMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/wms/mapper/TaskRecordMapper.java b/src/main/java/com/wms/mapper/TaskRecordMapper.java new file mode 100644 index 0000000..f9b0ee2 --- /dev/null +++ b/src/main/java/com/wms/mapper/TaskRecordMapper.java @@ -0,0 +1,10 @@ +package com.wms.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.wms.entity.table.TaskRecord; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface TaskRecordMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/wms/mapper/UserMapper.java b/src/main/java/com/wms/mapper/UserMapper.java new file mode 100644 index 0000000..7dfb6ea --- /dev/null +++ b/src/main/java/com/wms/mapper/UserMapper.java @@ -0,0 +1,10 @@ +package com.wms.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.wms.entity.table.UserDto; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface UserMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/wms/mapper/VehicleMapper.java b/src/main/java/com/wms/mapper/VehicleMapper.java new file mode 100644 index 0000000..45fd9b0 --- /dev/null +++ b/src/main/java/com/wms/mapper/VehicleMapper.java @@ -0,0 +1,10 @@ +package com.wms.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.wms.entity.table.Vehicle; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface VehicleMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/src/main/java/com/wms/service/ConfigService.java b/src/main/java/com/wms/service/ConfigService.java new file mode 100644 index 0000000..b47f9e9 --- /dev/null +++ b/src/main/java/com/wms/service/ConfigService.java @@ -0,0 +1,11 @@ +package com.wms.service; + +import com.wms.entity.table.Config; + +import java.util.List; + +public interface ConfigService { + List selectConfigs(String configKey); + + int updateConfig(Config config); +} diff --git a/src/main/java/com/wms/service/GoodsService.java b/src/main/java/com/wms/service/GoodsService.java new file mode 100644 index 0000000..36a8c95 --- /dev/null +++ b/src/main/java/com/wms/service/GoodsService.java @@ -0,0 +1,4 @@ +package com.wms.service; + +public interface GoodsService { +} diff --git a/src/main/java/com/wms/service/LocationService.java b/src/main/java/com/wms/service/LocationService.java new file mode 100644 index 0000000..3ac0255 --- /dev/null +++ b/src/main/java/com/wms/service/LocationService.java @@ -0,0 +1,5 @@ +package com.wms.service; + +public interface LocationService { + +} diff --git a/src/main/java/com/wms/service/LogService.java b/src/main/java/com/wms/service/LogService.java new file mode 100644 index 0000000..8bbf436 --- /dev/null +++ b/src/main/java/com/wms/service/LogService.java @@ -0,0 +1,13 @@ +package com.wms.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.wms.entity.table.WmsLog; + +public interface LogService extends IService { + /** + * 定期删除日志记录(30天清一次) + * + * @return 结果 + */ + boolean deleteWmsLogsRegularly(int interval); +} diff --git a/src/main/java/com/wms/service/MenuService.java b/src/main/java/com/wms/service/MenuService.java new file mode 100644 index 0000000..8060aba --- /dev/null +++ b/src/main/java/com/wms/service/MenuService.java @@ -0,0 +1,5 @@ +package com.wms.service; + +public interface MenuService { + +} diff --git a/src/main/java/com/wms/service/StandService.java b/src/main/java/com/wms/service/StandService.java new file mode 100644 index 0000000..10fe691 --- /dev/null +++ b/src/main/java/com/wms/service/StandService.java @@ -0,0 +1,8 @@ +package com.wms.service; + +/** + * + */ +public interface StandService { + +} diff --git a/src/main/java/com/wms/service/StockService.java b/src/main/java/com/wms/service/StockService.java new file mode 100644 index 0000000..dff85f5 --- /dev/null +++ b/src/main/java/com/wms/service/StockService.java @@ -0,0 +1,11 @@ +package com.wms.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.wms.entity.app.dto.StockDto; +import com.wms.entity.table.Stock; + +import java.util.List; + +public interface StockService extends IService { + List selectStocks(Stock stock); +} \ No newline at end of file diff --git a/src/main/java/com/wms/service/TaskRecordService.java b/src/main/java/com/wms/service/TaskRecordService.java new file mode 100644 index 0000000..a5e2188 --- /dev/null +++ b/src/main/java/com/wms/service/TaskRecordService.java @@ -0,0 +1,34 @@ +package com.wms.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.wms.entity.app.dto.TaskRecordDto; +import com.wms.entity.table.TaskRecord; + +import java.util.List; + +public interface TaskRecordService extends IService { + /** + * 查找入库任务记录 + * @param query 查询参数 + * @return 查询结果 + */ + List selectInTaskRecord(TaskRecord query); + /** + * 查找出库任务记录 + * @param query 查询参数 + * @return 查询结果 + */ + List selectOutTaskRecord(TaskRecord query); + /** + * 查找盘点任务记录 + * @param query 查询参数 + * @return 查询结果 + */ + List selectInventoryTaskRecord(TaskRecord query); + /** + * 查找任务记录 + * @param query 查询参数 + * @return 查询结果 + */ + List selectTaskRecord(TaskRecord query); +} diff --git a/src/main/java/com/wms/service/TaskService.java b/src/main/java/com/wms/service/TaskService.java new file mode 100644 index 0000000..ec2c8e0 --- /dev/null +++ b/src/main/java/com/wms/service/TaskService.java @@ -0,0 +1,5 @@ +package com.wms.service; + +public interface TaskService{ + +} diff --git a/src/main/java/com/wms/service/UserService.java b/src/main/java/com/wms/service/UserService.java new file mode 100644 index 0000000..8d0ebd0 --- /dev/null +++ b/src/main/java/com/wms/service/UserService.java @@ -0,0 +1,5 @@ +package com.wms.service; + +public interface UserService { + +} diff --git a/src/main/java/com/wms/service/VehicleService.java b/src/main/java/com/wms/service/VehicleService.java new file mode 100644 index 0000000..37f48ad --- /dev/null +++ b/src/main/java/com/wms/service/VehicleService.java @@ -0,0 +1,12 @@ +package com.wms.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.wms.entity.app.dto.VehicleDto; +import com.wms.entity.table.Vehicle; + +import java.util.List; + +public interface VehicleService extends IService { + + List selVehicles(Vehicle vehicle); +} diff --git a/src/main/java/com/wms/service/serviceImplements/ConfigServiceImplement.java b/src/main/java/com/wms/service/serviceImplements/ConfigServiceImplement.java new file mode 100644 index 0000000..250a141 --- /dev/null +++ b/src/main/java/com/wms/service/serviceImplements/ConfigServiceImplement.java @@ -0,0 +1,39 @@ +package com.wms.service.serviceImplements; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.wms.entity.table.Config; +import com.wms.mapper.ConfigMapper; +import com.wms.service.ConfigService; +import com.wms.utils.StringUtils; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class ConfigServiceImplement implements ConfigService { + private final ConfigMapper configMapper; + + @Override + public List selectConfigs(String configKey) { + // 查询条件 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + if (StringUtils.isNotEmpty(configKey)) {// 判断configKey是否为空 + queryWrapper.eq(Config::getConfigKey, configKey); + } + return configMapper.selectList(queryWrapper); + } + + @Override + public int updateConfig(Config config) { + if (StringUtils.isEmpty(config.getConfigKey())) { + return 0; + } else { + LambdaQueryWrapper queryWrapperForUpdate = new LambdaQueryWrapper() + .eq(Config::getConfigKey, config.getConfigKey()); + return configMapper.update(config, queryWrapperForUpdate); + } + } +} diff --git a/src/main/java/com/wms/service/serviceImplements/GoodsServiceImplements.java b/src/main/java/com/wms/service/serviceImplements/GoodsServiceImplements.java new file mode 100644 index 0000000..cf59f93 --- /dev/null +++ b/src/main/java/com/wms/service/serviceImplements/GoodsServiceImplements.java @@ -0,0 +1,57 @@ +package com.wms.service.serviceImplements; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.wms.entity.table.GoodsDto; +import com.wms.mapper.GoodsMapper; +import com.wms.service.GoodsService; +import com.wms.utils.StringUtils; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class GoodsServiceImplements implements GoodsService { + + private final GoodsMapper goodsMapper; + + @Override + public List selGoods(GoodsDto goods){ + return goodsMapper.selGoods(goods); + } + + @Override + public GoodsDto selGoodsByGoodsId(String goodsId) { + if (StringUtils.isEmpty(goodsId)) { + return null; + } else { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("goods_id", goodsId); + return goodsMapper.selectOne(queryWrapper); + } + } + + @Override + public int addGoods(GoodsDto goods) { + return goodsMapper.insert(goods); + } + + @Override + public int modifyGoods(GoodsDto goods) { + if (StringUtils.isEmpty(goods.getGoodsId())) { + return 0; + } else { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("goods_id", goods.getGoodsId()); + goodsMapper.update(goods, updateWrapper); + } + } + + @Override + public int deleteGoods(String goodsId) { + return goodsMapper.deleteById(goodsId); + } +} diff --git a/src/main/java/com/wms/service/serviceImplements/LocationServiceImplements.java b/src/main/java/com/wms/service/serviceImplements/LocationServiceImplements.java new file mode 100644 index 0000000..44c7c7e --- /dev/null +++ b/src/main/java/com/wms/service/serviceImplements/LocationServiceImplements.java @@ -0,0 +1,42 @@ +package com.wms.service.serviceImplements; + +import com.wms.entity.table.LocationDto; +import com.wms.mapper.LocationMapper; +import com.wms.service.LocationService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class LocationServiceImplements implements LocationService { + + private final LocationMapper locationMapper; + + @Override + public List selLocations(LocationDto location) { + return this.locationMapper.selLocations(location); + } + + @Override + public List selNextLocation(LocationDto location) { + return locationMapper.selNextLocation(location); + } + + @Override + public int addLocation(LocationDto location) { + return locationMapper.addLocation(location); + } + + @Override + public int modifyLocation(LocationDto location) { + return this.locationMapper.modifyLocation(location); + } + + @Override + public List selLocationsWithNum(int equipmentId, int needLocationNum) { + return locationMapper.selLocationsWithNum(equipmentId, needLocationNum); + } +} diff --git a/src/main/java/com/wms/service/serviceImplements/LogServiceImplements.java b/src/main/java/com/wms/service/serviceImplements/LogServiceImplements.java new file mode 100644 index 0000000..0a0d154 --- /dev/null +++ b/src/main/java/com/wms/service/serviceImplements/LogServiceImplements.java @@ -0,0 +1,23 @@ +package com.wms.service.serviceImplements; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.wms.entity.table.WmsLog; +import com.wms.mapper.LogMapper; +import com.wms.service.LogService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class LogServiceImplements extends ServiceImpl implements LogService { + private final LogMapper logMapper; + + @Override + public boolean deleteWmsLogsRegularly(int interval) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper() + .apply("log_time <= date_add(curdate(),INTERVAL -{0} DAY", interval); + return super.remove(lambdaQueryWrapper); + } +} diff --git a/src/main/java/com/wms/service/serviceImplements/MenuServiceImplements.java b/src/main/java/com/wms/service/serviceImplements/MenuServiceImplements.java new file mode 100644 index 0000000..b0eec70 --- /dev/null +++ b/src/main/java/com/wms/service/serviceImplements/MenuServiceImplements.java @@ -0,0 +1,23 @@ +package com.wms.service.serviceImplements; + +import com.wms.entity.table.MenuDto; +import com.wms.mapper.MenuMapper; +import com.wms.service.MenuService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class MenuServiceImplements implements MenuService { + + + private final MenuMapper menuMapper; + + @Override + public List selMenuByRoleId(int roleId) { + return this.menuMapper.selMenuByRoleId(roleId); + } +} diff --git a/src/main/java/com/wms/service/serviceImplements/StandServiceImplements.java b/src/main/java/com/wms/service/serviceImplements/StandServiceImplements.java new file mode 100644 index 0000000..723b901 --- /dev/null +++ b/src/main/java/com/wms/service/serviceImplements/StandServiceImplements.java @@ -0,0 +1,45 @@ +package com.wms.service.serviceImplements; + +import com.wms.entity.table.StandDto; +import com.wms.mapper.StandMapper; +import com.wms.service.StandService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class StandServiceImplements implements StandService { + + private final StandMapper standMapper; + + @Autowired + public StandServiceImplements(StandMapper standMapper) { + this.standMapper = standMapper; + } + + @Override + public List selStands(StandDto stand) { + return this.standMapper.selStands(stand); + } + + @Override + public StandDto selStandById(String standId) { + return this.standMapper.selStandById(standId); + } + + @Override + public int addStand(StandDto stand) { + return this.standMapper.addStand(stand); + } + + @Override + public int modifyStand(StandDto stand) { + return this.standMapper.modifyStand(stand); + } + + @Override + public int deleteStand(StandDto stand) { + return this.standMapper.deleteStand(stand); + } +} diff --git a/src/main/java/com/wms/service/serviceImplements/StockServiceImplements.java b/src/main/java/com/wms/service/serviceImplements/StockServiceImplements.java new file mode 100644 index 0000000..f7a289b --- /dev/null +++ b/src/main/java/com/wms/service/serviceImplements/StockServiceImplements.java @@ -0,0 +1,32 @@ +package com.wms.service.serviceImplements; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.wms.entity.app.dto.StockDto; +import com.wms.entity.table.Stock; +import com.wms.entity.table.Vehicle; +import com.wms.mapper.StockMapper; +import com.wms.service.StockService; +import com.wms.utils.StringUtils; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class StockServiceImplements extends ServiceImpl implements StockService { + private final StockMapper stockMapper; + + @Override + public List selectStocks(Stock stock) { + // TODO 具体查询条件待添加 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .eq(StringUtils.isNotEmpty(stock.getVehicleId()), Stock::getVehicleId, stock.getVehicleId()); + List results = super.list(queryWrapper); + + return BeanUtil.copyToList(results, StockDto.class); + } +} \ No newline at end of file diff --git a/src/main/java/com/wms/service/serviceImplements/TaskRecordServiceImplements.java b/src/main/java/com/wms/service/serviceImplements/TaskRecordServiceImplements.java new file mode 100644 index 0000000..35f429a --- /dev/null +++ b/src/main/java/com/wms/service/serviceImplements/TaskRecordServiceImplements.java @@ -0,0 +1,57 @@ +package com.wms.service.serviceImplements; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.wms.constants.enums.TaskType; +import com.wms.entity.app.dto.TaskRecordDto; +import com.wms.entity.app.dto.extend.TaskDetailInfo; +import com.wms.entity.table.TaskRecord; +import com.wms.mapper.TaskRecordMapper; +import com.wms.service.TaskRecordService; +import com.wms.utils.StringUtils; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + + +@Service +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class TaskRecordServiceImplements extends ServiceImpl implements TaskRecordService { + private final TaskRecordMapper taskRecordMapper; + + @Override + public List selectInTaskRecord(TaskRecord query) { + query.setTaskType(TaskType.IN.getCode());// 设置为入库 + return selectTaskRecord(query); + } + + @Override + public List selectOutTaskRecord(TaskRecord query) { + query.setTaskType(TaskType.OUT.getCode());// 设置为出库 + return selectTaskRecord(query); + } + + @Override + public List selectInventoryTaskRecord(TaskRecord query) { + query.setTaskType(TaskType.INVENTORY.getCode());// 设置为盘点 + return selectTaskRecord(query); + } + + @Override + public List selectTaskRecord(TaskRecord query) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .eq(TaskRecord::getTaskType, query.getTaskType()) + .like(StringUtils.isNotEmpty(query.getVehicleId()), TaskRecord::getVehicleId, query.getVehicleId()); + if (query.getGoodsRelated() != null) { + queryWrapper + // 物料编号 + .apply(StringUtils.isNotEmpty(query.getGoodsRelated().getGoodsId()), "goods_related ->> '$.goodsId' like concat('%', {0}, '%')", query.getGoodsRelated().getGoodsId()) + // 物料名称/描述 + .apply(StringUtils.isNotEmpty(query.getGoodsRelated().getGoodsName()), "goods_related ->> '$.goodsName' like concat('%', {0}, '%')", query.getGoodsRelated().getGoodsName()); + } + return BeanUtil.copyToList(super.list(queryWrapper), TaskRecordDto.class); + } +} diff --git a/src/main/java/com/wms/service/serviceImplements/TaskServiceImplements.java b/src/main/java/com/wms/service/serviceImplements/TaskServiceImplements.java new file mode 100644 index 0000000..278a49e --- /dev/null +++ b/src/main/java/com/wms/service/serviceImplements/TaskServiceImplements.java @@ -0,0 +1,40 @@ +package com.wms.service.serviceImplements; + +import com.wms.entity.table.TaskDto; +import com.wms.mapper.TaskMapper; +import com.wms.service.TaskService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class TaskServiceImplements implements TaskService { + + private final TaskMapper taskMapper; + + @Autowired + public TaskServiceImplements(TaskMapper taskMapper) { + this.taskMapper = taskMapper; + } + + @Override + public List selTasks(TaskDto task) { + return taskMapper.selTasks(task); + } + + @Override + public int addTask(TaskDto task) { + return taskMapper.addTask(task); + } + + @Override + public int executeTask(TaskDto task) { + return taskMapper.executeTask(task); + } + + @Override + public int deleteTask(String taskId) { + return taskMapper.deleteTask(taskId); + } +} diff --git a/src/main/java/com/wms/service/serviceImplements/UserServiceImplements.java b/src/main/java/com/wms/service/serviceImplements/UserServiceImplements.java new file mode 100644 index 0000000..1610335 --- /dev/null +++ b/src/main/java/com/wms/service/serviceImplements/UserServiceImplements.java @@ -0,0 +1,24 @@ +package com.wms.service.serviceImplements; + +import com.wms.entity.table.UserDto; +import com.wms.mapper.UserMapper; +import com.wms.service.UserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class UserServiceImplements implements UserService { + + private final UserMapper userMapper; + @Autowired + public UserServiceImplements(UserMapper userMapper) { + this.userMapper = userMapper; + } + + @Override + public List selectUsers(UserDto user) { + return userMapper.selectUsers(user); + } +} diff --git a/src/main/java/com/wms/service/serviceImplements/VehicleServiceImplements.java b/src/main/java/com/wms/service/serviceImplements/VehicleServiceImplements.java new file mode 100644 index 0000000..111867c --- /dev/null +++ b/src/main/java/com/wms/service/serviceImplements/VehicleServiceImplements.java @@ -0,0 +1,31 @@ +package com.wms.service.serviceImplements; + +import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.wms.entity.app.dto.VehicleDto; +import com.wms.entity.table.Vehicle; +import com.wms.mapper.VehicleMapper; +import com.wms.service.VehicleService; +import com.wms.utils.StringUtils; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class VehicleServiceImplements extends ServiceImpl implements VehicleService { + private final VehicleMapper vehicleMapper; + + @Override + public List selVehicles(Vehicle vehicle) { + // TODO 具体查询条件待添加 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .eq(StringUtils.isNotEmpty(vehicle.getVehicleId()), Vehicle::getVehicleId, vehicle.getVehicleId()); + List results = super.list(queryWrapper); + + return BeanUtil.copyToList(results, VehicleDto.class); + } +} diff --git a/src/main/java/com/wms/system_service/ISystemService.java b/src/main/java/com/wms/system_service/ISystemService.java new file mode 100644 index 0000000..3d85592 --- /dev/null +++ b/src/main/java/com/wms/system_service/ISystemService.java @@ -0,0 +1,16 @@ +package com.wms.system_service; + +/** + * 系统相关的服务 + */ +public interface ISystemService { + /** + * 重启系统 + */ + public boolean restartSystem(); + + /** + * 重新加载配置 + */ + public boolean reloadConfig(); +} diff --git a/src/main/java/com/wms/system_service/serviceImplents/SystemServiceImplements.java b/src/main/java/com/wms/system_service/serviceImplents/SystemServiceImplements.java new file mode 100644 index 0000000..11dbb6a --- /dev/null +++ b/src/main/java/com/wms/system_service/serviceImplents/SystemServiceImplements.java @@ -0,0 +1,43 @@ +package com.wms.system_service.serviceImplents; + +import com.wms.WmsApplication; +import com.wms.entity.table.Config; +import com.wms.service.ConfigService; +import com.wms.system_service.ISystemService; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +import static com.wms.config.InitLocalConfig.configMap; + +@Service +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class SystemServiceImplements implements ISystemService { + private final ConfigService configService; + @Override + public boolean restartSystem() { + try { + WmsApplication.restart(); + } catch (Exception e) { + return false; + } + return true; + } + + @Override + public boolean reloadConfig() { + try { + List configs = configService.selectConfigs(""); + if (configs.size() > 0) { + for (Config config : configs) { + configMap.put(config.getConfigKey(), config.getConfigValue()); + } + } + } catch (Exception e) { + return false; + } + return true; + } +} diff --git a/src/main/java/com/wms/utils/HttpUtils.java b/src/main/java/com/wms/utils/HttpUtils.java new file mode 100644 index 0000000..99c1d3c --- /dev/null +++ b/src/main/java/com/wms/utils/HttpUtils.java @@ -0,0 +1,227 @@ +package com.wms.utils; + +import java.io.IOException; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.nio.charset.Charset; +import java.util.Base64; +import java.util.Map; + +import jakarta.servlet.http.HttpServletRequest; +import org.apache.commons.lang3.StringUtils; +import org.apache.http.HttpEntity; +import org.apache.http.ParseException; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; + +/** + * Http工具类 + */ +public class HttpUtils { + + /** + * 获取请求的ip地址 + * @param request 请求 + * @return ip地址 + */ + public static String getIpAddr(HttpServletRequest request) { + String ip = request.getHeader("x-forwarded-for"); + if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + if (ip != null && ip.indexOf(",") > 0) { + String[] parts = ip.split(","); + for (String part : parts) { + if (!part.isEmpty() && !"unknown".equalsIgnoreCase(part)) { + ip = part.trim(); + break; + } + } + } + if ("0:0:0:0:0:0:0:1".equals(ip)) { + ip = "127.0.0.1"; + } + return ip; + } + + /** + * 发送HttpGet请求(无参数) + * @param url 地址 + * @return 响应结果 + */ + public static String sendHttpGet(String url) { + String result = ""; + CloseableHttpClient httpClient = null; + CloseableHttpResponse response = null; + try { + httpClient = HttpClients.createDefault(); + HttpGet httpget = new HttpGet(url); + response = httpClient.execute(httpget); + HttpEntity entity = null; + if (response != null) { + entity = response.getEntity(); + } + if (entity != null) { + result = EntityUtils.toString(entity); + } + } catch (ParseException | IOException e) { + e.printStackTrace(); + } finally { + if(response!=null){ try{response.close();}catch (IOException e){ e.printStackTrace();} } + if(httpClient!=null){ try{httpClient.close();}catch(IOException e){ e.printStackTrace();} } + } + return result; + } + + /** + * 发送HttpGet请求(带参数) + * @param url 地址 + * @param header 参数放在请求头里面 + * @return 响应结果 + */ + public static String sendHttpGet(String url, Map header) { + if (header == null) {// 没有参数 + return sendHttpGet(url); + } + String result = ""; + CloseableHttpClient httpClient = null; + CloseableHttpResponse response = null; + try { + httpClient = HttpClients.createDefault(); + HttpGet httpGet = new HttpGet(url); + // 设置超时时间 + RequestConfig requestConfig = RequestConfig.custom() + .setConnectTimeout(5000) + .setConnectionRequestTimeout(1000) + .setSocketTimeout(5000).build(); + httpGet.setConfig(requestConfig); + for(Map.Entry entry : header.entrySet()){ + + httpGet.setHeader(entry.getKey(), entry.getValue()); + } + response = httpClient.execute(httpGet); + HttpEntity entity = null; + if (response != null) { + entity = response.getEntity(); + } + if (entity != null) { + result = EntityUtils.toString(entity); + } + } catch (ParseException | IOException e) { + e.printStackTrace(); + } finally { + if(response!=null){ try{response.close();}catch (IOException e){ e.printStackTrace();} } + if(httpClient!=null){ try{httpClient.close();}catch(IOException e){ e.printStackTrace();} } + } + return result; + } + + /** + * 发送httpPost请求(不需要认证信息) + * @param url 目的地址 + * @param param 参数 + * @return 请求结果 + */ + public static String sendHttpPostWithoutToken(String url,String param) { + return sendHttpPost(url, param, null, null, null); + } + + /** + * 发送httpPost请求 + * @param url 目的地址 + * @param param 参数 + * @param token 认证信息 + * @param userName 登录账户 + * @param password 登录密码 + * @return 请求结果 + */ + public static String sendHttpPost(String url, String param, String token, String userName, String password) { + String data=""; + CloseableHttpClient httpClient = null; + CloseableHttpResponse response = null; + try { + httpClient = HttpClients.createDefault(); + HttpPost httppost = new HttpPost(url); + RequestConfig requestConfig = RequestConfig.custom() + .setConnectTimeout(5000) + .setConnectionRequestTimeout(5000) + .setSocketTimeout(5000).build(); + httppost.setConfig(requestConfig); + httppost.setHeader("Content-Type", "application/json;charset=UTF-8"); + if (StringUtils.isEmpty(token) && StringUtils.isNotEmpty(userName) && StringUtils.isNotEmpty(password)) { + httppost.setHeader("Authorization", "Basic " + Base64.getUrlEncoder().encodeToString((userName + ":" + password).getBytes())); + } else { + httppost.setHeader("Authorization", "Bearer " + token); + } + StringEntity se = new StringEntity(param, Charset.forName("UTF-8")); + se.setContentType("text/json"); + se.setContentEncoding("UTF-8"); + httppost.setEntity(se); + response = httpClient.execute(httppost); + data = EntityUtils.toString(response.getEntity(), "utf-8"); + EntityUtils.consume(response.getEntity()); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if(response!=null){ try{response.close();}catch (IOException e){ e.printStackTrace();} } + if(httpClient!=null){ try{httpClient.close();}catch(IOException e){ e.printStackTrace();} } + } + return data; + } + + /** + * 发送httpPost请求 + * @param url 目的地址 + * @param param 参数 + * @param token 认证信息 + * @param userName 登录账户 + * @param password 登录密码 + * @return 请求结果 + */ + public static String sendHttpPostForm(String url, String param, String token, String userName, String password) { + + String data=""; + CloseableHttpClient httpClient = null; + CloseableHttpResponse response = null; + try { + httpClient = HttpClients.createDefault(); + HttpPost httppost = new HttpPost(url); + RequestConfig requestConfig = RequestConfig.custom() + .setConnectTimeout(5000) + .setConnectionRequestTimeout(1000) + .setSocketTimeout(5000).build(); + httppost.setConfig(requestConfig); + httppost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8"); + if (StringUtils.isEmpty(token) && StringUtils.isNotEmpty(userName) && StringUtils.isNotEmpty(password)) { + httppost.setHeader("Authorization", "Basic " + Base64.getUrlEncoder().encodeToString((userName + ":" + password).getBytes())); + } else { + httppost.setHeader("Authorization", "Bearer " + token); + } + StringEntity se = new StringEntity(param, Charset.forName("UTF-8")); + se.setContentType("application/x-www-form-urlencoded"); + se.setContentEncoding("UTF-8"); + httppost.setEntity(se); + response = httpClient.execute(httppost); + data = EntityUtils.toString(response.getEntity(), "utf-8"); + EntityUtils.consume(response.getEntity()); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if(response!=null){ try{response.close();}catch (IOException e){ e.printStackTrace();} } + if(httpClient!=null){ try{httpClient.close();}catch(IOException e){ e.printStackTrace();} } + } + return data; + } +} diff --git a/src/main/java/com/wms/utils/JWTUtils.java b/src/main/java/com/wms/utils/JWTUtils.java new file mode 100644 index 0000000..20363ad --- /dev/null +++ b/src/main/java/com/wms/utils/JWTUtils.java @@ -0,0 +1,15 @@ +package com.wms.utils; + +import com.auth0.jwt.JWT; +import com.auth0.jwt.interfaces.DecodedJWT; + +public class JWTUtils { + /** + * 解码token + * @param token token + * @return 结果 + */ + public static DecodedJWT decodeToken(String token) { + return JWT.decode(token); + } +} diff --git a/src/main/java/com/wms/utils/MyPassword.java b/src/main/java/com/wms/utils/MyPassword.java new file mode 100644 index 0000000..ceb6ab3 --- /dev/null +++ b/src/main/java/com/wms/utils/MyPassword.java @@ -0,0 +1,113 @@ +package com.wms.utils; + +import javax.crypto.Cipher; +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import java.security.SecureRandom; + +/** + * Md5加密算法 + */ +public class MyPassword { + + // 密钥 + private static final String myPwd = "fdbk"; + + /** + * 加密 + * @param originalPassword + * @return + */ + public static String encrypt(String originalPassword) { + byte[] targetPassword; + try { + // 声明加密算法 + KeyGenerator kgen = KeyGenerator.getInstance("AES"); + SecureRandom random = SecureRandom.getInstance("SHA1PRNG"); + random.setSeed(myPwd.getBytes()); + kgen.init(128, random); + SecretKey secretKey = kgen.generateKey(); + byte[] enCodeFormat = secretKey.getEncoded(); + SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES"); + + // 创建密码器 + Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); + cipher.init(Cipher.ENCRYPT_MODE, key); + byte[] byteContent = originalPassword.getBytes(); + targetPassword = cipher.doFinal(byteContent); + + } catch (Exception e) { + return null; + } + + return parseByte2HexStr(targetPassword); + } + + /** + * 解密 + * @param targetPassword + * @return + */ + public static String decrypt(String targetPassword) { + byte[] originalPassword; + byte[] content = parseHexStr2Byte(targetPassword); + try { + KeyGenerator kgen = KeyGenerator.getInstance("AES"); + SecureRandom random = SecureRandom.getInstance("SHA1PRNG"); + random.setSeed(myPwd.getBytes()); + kgen.init(128, random); + SecretKey secretKey = kgen.generateKey(); + byte[] enCodeFormat = secretKey.getEncoded(); + SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES"); + + // 创建密码器 + Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); + cipher.init(Cipher.DECRYPT_MODE, key); + originalPassword = cipher.doFinal(content); + + } catch (Exception e) { + e.printStackTrace(); + return null; + } + + return new String(originalPassword); + } + + /** + * 将二进制转换成十六进制 + * + * @param buf + * @return + */ + public static String parseByte2HexStr(byte buf[]) { + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < buf.length; i++) { + String hex = Integer.toHexString(buf[i] & 0xFF); + if (hex.length() == 1) { + hex = '0' + hex; + } + sb.append(hex.toUpperCase()); + } + return sb.toString(); + } + + /** + * 将十六进制转换为二进制 + * + * @param hexStr + * @return + */ + public static byte[] parseHexStr2Byte(String hexStr) { + if (hexStr.length() < 1) { + return null; + } + byte[] result = new byte[hexStr.length() / 2]; + for (int i = 0; i < hexStr.length() / 2; i++) { + int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16); + int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16); + result[i] = (byte) (high * 16 + low); + } + return result; + } +} diff --git a/src/main/java/com/wms/utils/StringUtils.java b/src/main/java/com/wms/utils/StringUtils.java new file mode 100644 index 0000000..ca18756 --- /dev/null +++ b/src/main/java/com/wms/utils/StringUtils.java @@ -0,0 +1,121 @@ +package com.wms.utils; + +import com.alibaba.fastjson2.JSON; + +/** + * WMS字符串工具类 + * @author 梁州 + * @date 2023/2/13 + */ +public class StringUtils { + /** 空字符串 */ + private static final String NULLSTR = ""; + + /** 下划线 */ + private static final char SEPARATOR = '_'; + + public static boolean isEmpty(String value) { + return value == null || value.equals(NULLSTR); + } + + public static boolean isNotEmpty(String value) { + return !isEmpty(value); + } + + /** + * 驼峰转下划线命名 + */ + public static String toUnderScoreCase(String str) + { + if (str == null) + { + return null; + } + StringBuilder sb = new StringBuilder(); + // 前置字符是否大写 + boolean preCharIsUpperCase = true; + // 当前字符是否大写 + boolean curreCharIsUpperCase = true; + // 下一字符是否大写 + boolean nexteCharIsUpperCase = true; + for (int i = 0; i < str.length(); i++) + { + char c = str.charAt(i); + if (i > 0) + { + preCharIsUpperCase = Character.isUpperCase(str.charAt(i - 1)); + } + else + { + preCharIsUpperCase = false; + } + + curreCharIsUpperCase = Character.isUpperCase(c); + + if (i < (str.length() - 1)) + { + nexteCharIsUpperCase = Character.isUpperCase(str.charAt(i + 1)); + } + + if (preCharIsUpperCase && curreCharIsUpperCase && !nexteCharIsUpperCase) + { + sb.append(SEPARATOR); + } + else if ((i != 0 && !preCharIsUpperCase) && curreCharIsUpperCase) + { + sb.append(SEPARATOR); + } + sb.append(Character.toLowerCase(c)); + } + + return sb.toString(); + } + + /** + * 驼峰式命名法 + * 例如:user_name->userName + */ + public static String toCamelCase(String s) + { + if (s == null) + { + return null; + } + if (s.indexOf(SEPARATOR) == -1) + { + s = s.toLowerCase(); + return s; + } + s = s.toLowerCase(); + StringBuilder sb = new StringBuilder(s.length()); + boolean upperCase = false; + for (int i = 0; i < s.length(); i++) + { + char c = s.charAt(i); + + if (c == SEPARATOR) + { + upperCase = true; + } + else if (upperCase) + { + sb.append(Character.toUpperCase(c)); + upperCase = false; + } + else + { + sb.append(c); + } + } + return sb.toString(); + } + + /** + * 将对象转为json字符串 + * @param o 实体类 + * @return 字符串 + */ + public static String convertJsonString(Object o) { + return JSON.toJSONString(o); + } +} diff --git a/src/main/java/com/wms/utils/TokenUtils.java b/src/main/java/com/wms/utils/TokenUtils.java new file mode 100644 index 0000000..f824f25 --- /dev/null +++ b/src/main/java/com/wms/utils/TokenUtils.java @@ -0,0 +1,6 @@ +package com.wms.utils; + +public class TokenUtils { + private static final long EXPIRE_TIME= 10*60*60*1000; //十小时 + private static final String TOKEN_SECRET="123456"; //密钥盐 +} diff --git a/src/main/java/com/wms/utils/WmsUtils.java b/src/main/java/com/wms/utils/WmsUtils.java new file mode 100644 index 0000000..cc5a234 --- /dev/null +++ b/src/main/java/com/wms/utils/WmsUtils.java @@ -0,0 +1,181 @@ +package com.wms.utils; + +import org.apache.commons.lang3.StringUtils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.UUID; + +/** + * WMS工具类 + * @author 梁州 + * @date 2023/2/13 + */ +public class WmsUtils { + // 日期格式 + public static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + // 时间格式 + public static final SimpleDateFormat timeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + // id用的时间格式 + public static final SimpleDateFormat idTimeFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS"); + public static volatile Long lastTimestamp = -1L; + /** + * 生成唯一的编号 + * @param code 插入字符串 + * @return 唯一id + */ + public static String generateId(String code) { + return code + generateUUIDString(); + } + + /** + * 生成UUID + */ + public synchronized static String generateUUIDString() { + long timeStamp = System.currentTimeMillis(); + if (timeStamp == lastTimestamp) { + try { + Thread.sleep(1); + } catch (InterruptedException e){ + timeStamp = System.currentTimeMillis(); + lastTimestamp = timeStamp; + return idTimeFormat.format(new Date()).concat(String.valueOf(timeStamp)); + } + timeStamp = System.currentTimeMillis(); + lastTimestamp = timeStamp; + return idTimeFormat.format(new Date()).concat(String.valueOf(timeStamp)); + } else { + lastTimestamp = timeStamp; + return idTimeFormat.format(new Date()).concat(String.valueOf(timeStamp)); + } + } + + // 方法接收一个字符参数,返回对应的1-26之间的数字 + public static int letterToNumber(char letter) { + if ('a' <= letter && letter <= 'z') { + return letter - 'a' + 1; + } else if ('A' <= letter && letter <= 'Z') { + return letter - 'A' + 1; + } else { + return -1; + } + } + + /** + * 时间字符串转时间格式 + * @param time 时间 + */ + public static Date timeStringToTime(String time) throws ParseException { + return timeFormat.parse(time); + } + + /** + * 日期字符串 + * @param date 日期 + */ + public static Date dateStringToDate(String date) throws ParseException { + return dateFormat.parse(date); + } + + /** + * 生成时间戳,格式yyyy-MM-dd HH:mm:ss + * @return 时间戳 + */ + public static String createCurrentTimeString() { + return timeFormat.format(new Date()); + } + + /** + * 生成日期字符串,格式yyyy-MM-dd + * @return 时间戳 + */ + public static String createCurrentDateString() { + return dateFormat.format(new Date()); + } + + /** + * 格式化日期,格式yyyy-MM-dd + * @param date 日期 + * @return 时间戳 + */ + public static String formatDateString(Date date) { + return dateFormat.format(date); + } + + /** + * 格式化时间,格式yyyy-MM-dd HH:mm:ss + * @param date 日期 + * @return 时间戳 + */ + public static String formatTimeString(Date date) { + return timeFormat.format(date); + } + + /** + * 获得指定日期之后指定天数的日期 + * @param beginDay 开始日期 + * @param days 天数 + * @return 日期 + */ + public static Date calculationDate(Date beginDay, int days){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(beginDay); + calendar.add(Calendar.DATE, days); + return calendar.getTime(); + } + + /** + * 获得指定日期之后指定月数的日期 + * @param beginDay 开始日期 + * @param months 月数 + * @return 日期 + */ + public static Date calculationMonth(Date beginDay, int months){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(beginDay); + calendar.add(Calendar.MONTH, months); + return calendar.getTime(); + } + + /** + * 获得指定日期之后指定年数的日期 + * @param beginDay 开始日期 + * @param years 年数 + * @return 日期 + */ + public static Date calculationYear(Date beginDay, int years){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(beginDay); + calendar.add(Calendar.YEAR, years); + return calendar.getTime(); + } + + /** + * 获取指定天数后的日期 + * @param day 天数 + * @return 日期 + */ + public static Date getDay(int day){ + return calculationDate(new Date(), day); + } + + /** + * 获取任意月后的时间 + * @Params: mon 1表示后一个月 -1表示前一个月 + * @Return + */ + public static Date getMon(int mon){ + return calculationMonth(new Date(), mon); + } + + /** + * 获取任意年之后的日期 + * @param year 年 + * @return 日期 + */ + public static Date getYear(int year){ + return calculationYear(new Date(), year); + } +} diff --git a/src/main/java/com/wms/utils/excel/ExcelClassField.java b/src/main/java/com/wms/utils/excel/ExcelClassField.java new file mode 100644 index 0000000..008be2b --- /dev/null +++ b/src/main/java/com/wms/utils/excel/ExcelClassField.java @@ -0,0 +1,71 @@ +package com.wms.utils.excel; + +import java.util.LinkedHashMap; + +public class ExcelClassField { + /** 字段名称 */ + private String fieldName; + + /** 表头名称 */ + private String name; + + /** 映射关系 */ + private LinkedHashMap kvMap; + + /** 示例值 */ + private Object example; + + /** 排序 */ + private int sort; + + /** 是否为注解字段:0-否,1-是 */ + private int hasAnnotation; + + public String getFieldName() { + return fieldName; + } + + public void setFieldName(String fieldName) { + this.fieldName = fieldName; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public LinkedHashMap getKvMap() { + return kvMap; + } + + public void setKvMap(LinkedHashMap kvMap) { + this.kvMap = kvMap; + } + + public Object getExample() { + return example; + } + + public void setExample(Object example) { + this.example = example; + } + + public int getSort() { + return sort; + } + + public void setSort(int sort) { + this.sort = sort; + } + + public int getHasAnnotation() { + return hasAnnotation; + } + + public void setHasAnnotation(int hasAnnotation) { + this.hasAnnotation = hasAnnotation; + } +} diff --git a/src/main/java/com/wms/utils/excel/ExcelExport.java b/src/main/java/com/wms/utils/excel/ExcelExport.java new file mode 100644 index 0000000..431d99e --- /dev/null +++ b/src/main/java/com/wms/utils/excel/ExcelExport.java @@ -0,0 +1,22 @@ +package com.wms.utils.excel; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface ExcelExport { + /** 字段名称 */ + String value(); + + /** 导出排序先后: 数字越小越靠前(默认按Java类字段顺序导出) */ + int sort() default 0; + + /** 导出映射,格式如:0-未知;1-男;2-女 */ + String kv() default ""; + + /** 导出模板示例值(有值的话,直接取该值,不做映射) */ + String example() default ""; +} diff --git a/src/main/java/com/wms/utils/excel/ExcelImport.java b/src/main/java/com/wms/utils/excel/ExcelImport.java new file mode 100644 index 0000000..58c7b52 --- /dev/null +++ b/src/main/java/com/wms/utils/excel/ExcelImport.java @@ -0,0 +1,25 @@ +package com.wms.utils.excel; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface ExcelImport { + /** 字段名称 */ + String value(); + + /** 导出映射,格式如:0-未知;1-男;2-女 */ + String kv() default ""; + + /** 是否为必填字段(默认为非必填) */ + boolean required() default false; + + /** 最大长度(默认255) */ + int maxLength() default 255; + + /** 导入唯一性验证(多个字段则取联合验证) */ + boolean unique() default false; +} diff --git a/src/main/java/com/wms/utils/excel/ExcelUtils.java b/src/main/java/com/wms/utils/excel/ExcelUtils.java new file mode 100644 index 0000000..28c81d1 --- /dev/null +++ b/src/main/java/com/wms/utils/excel/ExcelUtils.java @@ -0,0 +1,1026 @@ +package com.wms.utils.excel; + + +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.http.HttpServletResponse; +import org.apache.poi.hssf.usermodel.HSSFDataFormatter; +import org.apache.poi.hssf.usermodel.HSSFDataValidation; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.poifs.filesystem.POIFSFileSystem; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.ss.util.CellRangeAddressList; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; +import org.apache.poi.xssf.usermodel.*; +import org.springframework.web.multipart.MultipartFile; +import org.apache.poi.ss.usermodel.DateUtil; + +import java.io.*; +import java.lang.reflect.Field; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.net.URL; +import java.text.DecimalFormat; +import java.text.NumberFormat; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * Excel工具类 + */ +@SuppressWarnings("unused") +public class ExcelUtils { + private static final String XLSX = ".xlsx"; + private static final String XLS = ".xls"; + public static final String ROW_MERGE = "row_merge"; + public static final String COLUMN_MERGE = "column_merge"; + private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; + private static final String ROW_NUM = "rowNum"; + private static final String ROW_DATA = "rowData"; + private static final String ROW_TIPS = "rowTips"; + private static final int CELL_OTHER = 0; + private static final int CELL_ROW_MERGE = 1; + private static final int CELL_COLUMN_MERGE = 2; + private static final int IMG_HEIGHT = 30; + private static final int IMG_WIDTH = 30; + private static final char LEAN_LINE = '/'; + private static final int BYTES_DEFAULT_LENGTH = 10240; + private static final NumberFormat NUMBER_FORMAT = NumberFormat.getNumberInstance(); + + public static List readFile(File file, Class clazz) throws Exception { + JSONArray array = readFile(file); + return getBeanList(array, clazz); + } + + public static List readMultipartFile(MultipartFile mFile, Class clazz) throws Exception { + JSONArray array = readMultipartFile(mFile); + return getBeanList(array, clazz); + } + public static JSONArray readFile(File file) throws Exception { + return readExcel(null, file); + } + + public static JSONArray readMultipartFile(MultipartFile mFile) throws Exception { + return readExcel(mFile, null); + } + + public static Map readFileManySheet(File file) throws Exception { + return readExcelManySheet(null, file); + } + + public static Map readFileManySheet(MultipartFile file) throws Exception { + return readExcelManySheet(file, null); + } + + private static List getBeanList(JSONArray array, Class clazz) throws Exception { + List list = new ArrayList<>(); + Map uniqueMap = new HashMap<>(16); + for (int i = 0; i < array.size(); i++) { + list.add(getBean(clazz, array.getJSONObject(i), uniqueMap)); + } + return list; + } + + + /** + * 获取每个对象的数据 + */ + private static T getBean(Class c, JSONObject obj, Map uniqueMap) throws Exception { + T t = c.getDeclaredConstructor().newInstance(); + Field[] fields = c.getDeclaredFields(); + List errMsgList = new ArrayList<>(); + boolean hasRowTipsField = false; + StringBuilder uniqueBuilder = new StringBuilder(); + int rowNum = 0; + for (Field field : fields) { + // 行号 + if (field.getName().equals(ROW_NUM)) { + rowNum = obj.getInteger(ROW_NUM); + field.setAccessible(true); + field.set(t, rowNum); + continue; + } + // 是否需要设置异常信息 + if (field.getName().equals(ROW_TIPS)) { + hasRowTipsField = true; + continue; + } + // 原始数据 + if (field.getName().equals(ROW_DATA)) { + field.setAccessible(true); + field.set(t, obj.toString()); + continue; + } + // 设置对应属性值 + setFieldValue(t, field, obj, uniqueBuilder, errMsgList); + } + // 数据唯一性校验 + if (uniqueBuilder.length() > 0) { + if (uniqueMap.containsValue(uniqueBuilder.toString())) { + Set rowNumKeys = uniqueMap.keySet(); + for (Integer num : rowNumKeys) { + if (uniqueMap.get(num).equals(uniqueBuilder.toString())) { + errMsgList.add(String.format("数据唯一性校验失败,(%s)与第%s行重复)", uniqueBuilder, num)); + } + } + } else { + uniqueMap.put(rowNum, uniqueBuilder.toString()); + } + } + // 失败处理 + if (errMsgList.isEmpty() && !hasRowTipsField) { + return t; + } + StringBuilder sb = new StringBuilder(); + int size = errMsgList.size(); + for (int i = 0; i < size; i++) { + if (i == size - 1) { + sb.append(errMsgList.get(i)); + } else { + sb.append(errMsgList.get(i)).append(";"); + } + } + // 设置错误信息 + for (Field field : fields) { + if (field.getName().equals(ROW_TIPS)) { + field.setAccessible(true); + field.set(t, sb.toString()); + } + } + return t; + } + + private static void setFieldValue(T t, Field field, JSONObject obj, StringBuilder uniqueBuilder, List errMsgList) { + // 获取 ExcelImport 注解属性 + ExcelImport annotation = field.getAnnotation(ExcelImport.class); + if (annotation == null) { + return; + } + String cname = annotation.value(); + if (cname.trim().length() == 0) { + return; + } + // 获取具体值 + String val = null; + if (obj.containsKey(cname)) { + val = getString(obj.getString(cname)); + } + if (val == null) { + return; + } + field.setAccessible(true); + // 判断是否必填 + boolean require = annotation.required(); + if (require && val.isEmpty()) { + errMsgList.add(String.format("[%s]不能为空", cname)); + return; + } + // 数据唯一性获取 + boolean unique = annotation.unique(); + if (unique) { + if (uniqueBuilder.length() > 0) { + uniqueBuilder.append("--").append(val); + } else { + uniqueBuilder.append(val); + } + } + // 判断是否超过最大长度 + int maxLength = annotation.maxLength(); + if (maxLength > 0 && val.length() > maxLength) { + errMsgList.add(String.format("[%s]长度不能超过%s个字符(当前%s个字符)", cname, maxLength, val.length())); + } + // 判断当前属性是否有映射关系 + LinkedHashMap kvMap = getKvMap(annotation.kv()); + if (!kvMap.isEmpty()) { + boolean isMatch = false; + for (String key : kvMap.keySet()) { + if (kvMap.get(key).equals(val)) { + val = key; + isMatch = true; + break; + } + } + if (!isMatch) { + errMsgList.add(String.format("[%s]的值不正确(当前值为%s)", cname, val)); + return; + } + } + // 其余情况根据类型赋值 + String fieldClassName = field.getType().getSimpleName(); + try { + if ("String".equalsIgnoreCase(fieldClassName)) { + field.set(t, val); + } else if ("boolean".equalsIgnoreCase(fieldClassName)) { + field.set(t, Boolean.valueOf(val)); + } else if ("int".equalsIgnoreCase(fieldClassName) || "Integer".equals(fieldClassName)) { + try { + field.set(t, Integer.valueOf(val)); + } catch (NumberFormatException e) { + errMsgList.add(String.format("[%s]的值格式不正确(当前值为%s)", cname, val)); + } + } else if ("double".equalsIgnoreCase(fieldClassName)) { + field.set(t, Double.valueOf(val)); + } else if ("long".equalsIgnoreCase(fieldClassName)) { + field.set(t, Long.valueOf(val)); + } else if ("BigDecimal".equalsIgnoreCase(fieldClassName)) { + field.set(t, new BigDecimal(val)); + } else if ("Date".equalsIgnoreCase(fieldClassName)) { + try { + field.set(t, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(val)); + } catch (Exception e) { + field.set(t, new SimpleDateFormat("yyyy-MM-dd").parse(val)); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + private static Map readExcelManySheet(MultipartFile mFile, File file) throws IOException { + Workbook book = getWorkbook(mFile, file); + if (book == null) { + return Collections.emptyMap(); + } + Map map = new LinkedHashMap<>(); + for (int i = 0; i < book.getNumberOfSheets(); i++) { + Sheet sheet = book.getSheetAt(i); + JSONArray arr = readSheet(sheet); + map.put(sheet.getSheetName(), arr); + } + book.close(); + return map; + } + + private static JSONArray readExcel(MultipartFile mFile, File file) throws IOException { + Workbook book = getWorkbook(mFile, file); + if (book == null) { + return new JSONArray(); + } + JSONArray array = readSheet(book.getSheetAt(0)); + book.close(); + return array; + } + + private static Workbook getWorkbook(MultipartFile mFile, File file) throws IOException { + boolean fileNotExist = (file == null || !file.exists()); + if (mFile == null && fileNotExist) { + return null; + } + // 解析表格数据 + InputStream in; + String fileName; + if (mFile != null) { + // 上传文件解析 + in = mFile.getInputStream(); + fileName = getString(mFile.getOriginalFilename()).toLowerCase(); + } else { + // 本地文件解析 + in = new FileInputStream(file); + fileName = file.getName().toLowerCase(); + } + Workbook book; + if (fileName.endsWith(XLSX)) { + book = new XSSFWorkbook(in); + } else if (fileName.endsWith(XLS)) { + POIFSFileSystem poifsFileSystem = new POIFSFileSystem(in); + book = new HSSFWorkbook(poifsFileSystem); + } else { + return null; + } + in.close(); + return book; + } + + private static JSONArray readSheet(Sheet sheet) { + // 首行下标 + int rowStart = sheet.getFirstRowNum(); + // 尾行下标 + int rowEnd = sheet.getLastRowNum(); + // 获取表头行 + Row headRow = sheet.getRow(rowStart); + if (headRow == null) { + return new JSONArray(); + } + int cellStart = headRow.getFirstCellNum(); + int cellEnd = headRow.getLastCellNum(); + Map keyMap = new HashMap<>(); + for (int j = cellStart; j < cellEnd; j++) { + // 获取表头数据 + String val = getCellValue(headRow.getCell(j)); + if (val != null && val.trim().length() != 0) { + keyMap.put(j, val); + } + } + // 如果表头没有数据则不进行解析 + if (keyMap.isEmpty()) { + return (JSONArray) Collections.emptyList(); + } + // 获取每行JSON对象的值 + JSONArray array = new JSONArray(); + // 如果首行与尾行相同,表明只有一行,返回表头数据 + if (rowStart == rowEnd) { + JSONObject obj = new JSONObject(); + // 添加行号 + obj.put(ROW_NUM, 1); + for (int i : keyMap.keySet()) { + obj.put(keyMap.get(i), ""); + } + array.add(obj); + return array; + } + for (int i = rowStart + 1; i <= rowEnd; i++) { + Row eachRow = sheet.getRow(i); + JSONObject obj = new JSONObject(); + // 添加行号 + obj.put(ROW_NUM, i + 1); + StringBuilder sb = new StringBuilder(); + for (int k = cellStart; k < cellEnd; k++) { + if (eachRow != null) { + String val = getCellValue(eachRow.getCell(k)); + // 所有数据添加到里面,用于判断该行是否为空 + sb.append(val); + obj.put(keyMap.get(k), val); + } + } + if (sb.length() > 0) { + array.add(obj); + } + } + return array; + } + + private static String getCellValue(Cell cell) { + // 空白或空 + if (cell == null || cell.getCellType() == CellType.BLANK) { + return ""; + } + // String类型 + if (cell.getCellType() == CellType.STRING) { + String val = cell.getStringCellValue(); + if (val == null || val.trim().length() == 0) { + return ""; + } + return val.trim(); + } + // 数字类型 + if (cell.getCellType() == CellType.NUMERIC) { + if (DateUtil.isCellDateFormatted(cell)) {// 日期类型 + // 短日期转化为字符串 + Date date = cell.getDateCellValue(); + if (date != null) { + // 标准0点 1970/01/01 08:00:00 + if (date.getTime() % 86400000 == 16 * 3600 * 1000 && cell.getCellStyle().getDataFormat() == 14) { + return new SimpleDateFormat("yyyy-MM-dd").format(date); + } else { + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date); + } + } + } else {// 数值 + //System.out.println("Value:"+cell.getNumericCellValue()); + String numberStr = new HSSFDataFormatter().formatCellValue(cell); + // 货币格式,如:1,200.00 + if (numberStr.contains(",")) { + numberStr = numberStr.replace(",", ""); + } + if (numberStr.contains("E")) { // 科学计算法 + numberStr = new DecimalFormat("0").format(cell.getNumericCellValue()); //4.89481368464913E14还原为长整数 + return numberStr; + } else { + if (numberStr.contains(".")) { // 小数 + return numberStr; + } else { // 转换为整数 + return numberStr; + } + } + } +// String s = cell.getNumericCellValue() + ""; +// // 去掉尾巴上的小数点0 +// if (Pattern.matches(".*\\.0*", s)) { +// return s.split("\\.")[0]; +// } else { +// return s; +// } + } + // 布尔值类型 + if (cell.getCellType() == CellType.BOOLEAN) { + return String.valueOf(cell.getBooleanCellValue()); + } + // 错误类型 + return cell.getCellFormula(); + } + + public static void exportTemplate(HttpServletResponse response, String fileName, Class clazz) { + exportTemplate(response, fileName, fileName, clazz, false); + } + + public static void exportTemplate(HttpServletResponse response, String fileName, String sheetName, + Class clazz) { + exportTemplate(response, fileName, sheetName, clazz, false); + } + + public static void exportTemplate(HttpServletResponse response, String fileName, Class clazz, + boolean isContainExample) { + exportTemplate(response, fileName, fileName, clazz, isContainExample); + } + + public static void exportTemplate(HttpServletResponse response, String fileName, String sheetName, + Class clazz, boolean isContainExample) { + // 获取表头字段 + List headFieldList = getExcelClassFieldList(clazz); + // 获取表头数据和示例数据 + List> sheetDataList = new ArrayList<>(); + List headList = new ArrayList<>(); + List exampleList = new ArrayList<>(); + Map> selectMap = new LinkedHashMap<>(); + for (int i = 0; i < headFieldList.size(); i++) { + ExcelClassField each = headFieldList.get(i); + headList.add(each.getName()); + exampleList.add(each.getExample()); + LinkedHashMap kvMap = each.getKvMap(); + if (kvMap != null && kvMap.size() > 0) { + selectMap.put(i, new ArrayList<>(kvMap.values())); + } + } + sheetDataList.add(headList); + if (isContainExample) { + sheetDataList.add(exampleList); + } + // 导出数据 + export(response, fileName, sheetName, sheetDataList, selectMap); + } + + private static List getExcelClassFieldList(Class clazz) { + // 解析所有字段 + Field[] fields = clazz.getDeclaredFields(); + boolean hasExportAnnotation = false; + Map> map = new LinkedHashMap<>(); + List sortList = new ArrayList<>(); + for (Field field : fields) { + ExcelClassField cf = getExcelClassField(field); + if (cf.getHasAnnotation() == 1) { + hasExportAnnotation = true; + } + int sort = cf.getSort(); + if (map.containsKey(sort)) { + map.get(sort).add(cf); + } else { + List list = new ArrayList<>(); + list.add(cf); + sortList.add(sort); + map.put(sort, list); + } + } + Collections.sort(sortList); + // 获取表头 + List headFieldList = new ArrayList<>(); + if (hasExportAnnotation) { + for (Integer sort : sortList) { + for (ExcelClassField cf : map.get(sort)) { + if (cf.getHasAnnotation() == 1) { + headFieldList.add(cf); + } + } + } + } else { + headFieldList.addAll(map.get(0)); + } + return headFieldList; + } + + private static ExcelClassField getExcelClassField(Field field) { + ExcelClassField cf = new ExcelClassField(); + String fieldName = field.getName(); + cf.setFieldName(fieldName); + ExcelExport annotation = field.getAnnotation(ExcelExport.class); + // 无 ExcelExport 注解情况 + if (annotation == null) { + cf.setHasAnnotation(0); + cf.setName(fieldName); + cf.setSort(0); + return cf; + } + // 有 ExcelExport 注解情况 + cf.setHasAnnotation(1); + cf.setName(annotation.value()); + String example = getString(annotation.example()); + if (!example.isEmpty()) { + if (isNumeric(example) && example.length() < 8) { + cf.setExample(Double.valueOf(example)); + } else { + cf.setExample(example); + } + } else { + cf.setExample(""); + } + cf.setSort(annotation.sort()); + // 解析映射 + String kv = getString(annotation.kv()); + cf.setKvMap(getKvMap(kv)); + return cf; + } + + private static LinkedHashMap getKvMap(String kv) { + LinkedHashMap kvMap = new LinkedHashMap<>(); + if (kv.isEmpty()) { + return kvMap; + } + String[] kvs = kv.split(";"); + for (String each : kvs) { + String[] eachKv = getString(each).split("-"); + if (eachKv.length != 2) { + continue; + } + String k = eachKv[0]; + String v = eachKv[1]; + if (k.isEmpty() || v.isEmpty()) { + continue; + } + kvMap.put(k, v); + } + return kvMap; + } + + /** + * 导出表格到本地 + * + * @param file 本地文件对象 + * @param sheetData 导出数据 + */ + public static void exportFile(File file, List> sheetData) { + if (file == null) { + System.out.println("文件创建失败"); + return; + } + if (sheetData == null) { + sheetData = new ArrayList<>(); + } + Map>> map = new HashMap<>(); + map.put(file.getName(), sheetData); + export(null, file, file.getName(), map, null); + } + + /** + * 导出表格到本地 + * + * @param 导出数据类似,和K类型保持一致 + * @param filePath 文件父路径(如:D:/doc/excel/) + * @param fileName 文件名称(不带尾缀,如:学生表) + * @param list 导出数据 + * @throws IOException IO异常 + */ + public static File exportFile(String filePath, String fileName, List list) throws IOException { + File file = getFile(filePath, fileName); + List> sheetData = getSheetData(list); + exportFile(file, sheetData); + return file; + } + + /** + * 获取文件 + * + * @param filePath filePath 文件父路径(如:D:/doc/excel/) + * @param fileName 文件名称(不带尾缀,如:用户表) + * @return 本地File文件对象 + */ + private static File getFile(String filePath, String fileName) throws IOException { + String dirPath = getString(filePath); + String fileFullPath; + if (dirPath.isEmpty()) { + fileFullPath = fileName; + } else { + // 判定文件夹是否存在,如果不存在,则级联创建 + File dirFile = new File(dirPath); + if (!dirFile.exists()) { + boolean mkdirs = dirFile.mkdirs(); + if (!mkdirs) { + return null; + } + } + // 获取文件夹全名 + if (dirPath.endsWith(String.valueOf(LEAN_LINE))) { + fileFullPath = dirPath + fileName + XLSX; + } else { + fileFullPath = dirPath + LEAN_LINE + fileName + XLSX; + } + } + System.out.println(fileFullPath); + File file = new File(fileFullPath); + if (!file.exists()) { + boolean result = file.createNewFile(); + if (!result) { + return null; + } + } + return file; + } + + private static List> getSheetData(List list) { + // 获取表头字段 + List excelClassFieldList = getExcelClassFieldList(list.get(0).getClass()); + List headFieldList = new ArrayList<>(); + List headList = new ArrayList<>(); + Map headFieldMap = new HashMap<>(); + for (ExcelClassField each : excelClassFieldList) { + String fieldName = each.getFieldName(); + headFieldList.add(fieldName); + headFieldMap.put(fieldName, each); + headList.add(each.getName()); + } + // 添加表头名称 + List> sheetDataList = new ArrayList<>(); + sheetDataList.add(headList); + // 获取表数据 + for (T t : list) { + Map fieldDataMap = getFieldDataMap(t); + Set fieldDataKeys = fieldDataMap.keySet(); + List rowList = new ArrayList<>(); + for (String headField : headFieldList) { + if (!fieldDataKeys.contains(headField)) { + continue; + } + Object data = fieldDataMap.get(headField); + if (data == null) { + rowList.add(""); + continue; + } + ExcelClassField cf = headFieldMap.get(headField); + // 判断是否有映射关系 + LinkedHashMap kvMap = cf.getKvMap(); + if (kvMap == null || kvMap.isEmpty()) { + rowList.add(data); + continue; + } + String val = kvMap.get(data.toString()); + if (isNumeric(val)) { + rowList.add(Double.valueOf(val)); + } else { + rowList.add(val); + } + } + sheetDataList.add(rowList); + } + return sheetDataList; + } + + private static Map getFieldDataMap(T t) { + Map map = new HashMap<>(); + Field[] fields = t.getClass().getDeclaredFields(); + try { + for (Field field : fields) { + String fieldName = field.getName(); + field.setAccessible(true); + Object object = field.get(t); + map.put(fieldName, object); + } + } catch (IllegalArgumentException | IllegalAccessException e) { + e.printStackTrace(); + } + return map; + } + + public static void exportEmpty(HttpServletResponse response, String fileName) { + List> sheetDataList = new ArrayList<>(); + List headList = new ArrayList<>(); + headList.add("导出无数据"); + sheetDataList.add(headList); + export(response, fileName, sheetDataList); + } + + public static void export(HttpServletResponse response, String fileName, List> sheetDataList) { + export(response, fileName, fileName, sheetDataList, null); + } + + public static void exportManySheet(HttpServletResponse response, String fileName, Map>> sheetMap) { + export(response, null, fileName, sheetMap, null); + } + + + public static void export(HttpServletResponse response, String fileName, String sheetName, + List> sheetDataList) { + export(response, fileName, sheetName, sheetDataList, null); + } + + public static void export(HttpServletResponse response, String fileName, String sheetName, + List> sheetDataList, Map> selectMap) { + + Map>> map = new HashMap<>(); + map.put(sheetName, sheetDataList); + export(response, null, fileName, map, selectMap); + } + + public static void export(HttpServletResponse response, String fileName, List list, Class template) { + // list 是否为空 + boolean lisIsEmpty = list == null || list.isEmpty(); + // 如果模板数据为空,且导入的数据为空,则导出空文件 + if (template == null && lisIsEmpty) { + exportEmpty(response, fileName); + return; + } + // 如果 list 数据,则导出模板数据 + if (lisIsEmpty) { + exportTemplate(response, fileName, template); + return; + } + // 导出数据 + List> sheetDataList = getSheetData(list); + export(response, fileName, sheetDataList); + } + + public static void export(HttpServletResponse response, String fileName, List> sheetDataList, Map> selectMap) { + export(response, fileName, fileName, sheetDataList, selectMap); + } + + private static void export(HttpServletResponse response, File file, String fileName, + Map>> sheetMap, Map> selectMap) { + // 整个 Excel 表格 book 对象 + SXSSFWorkbook book = new SXSSFWorkbook(); + // 每个 Sheet 页 + Set>>> entries = sheetMap.entrySet(); + for (Map.Entry>> entry : entries) { + List> sheetDataList = entry.getValue(); + Sheet sheet = book.createSheet(entry.getKey()); + Drawing patriarch = sheet.createDrawingPatriarch(); + // 设置表头背景色(灰色) + CellStyle headStyle = book.createCellStyle(); + headStyle.setFillForegroundColor(IndexedColors.GREY_80_PERCENT.index); + headStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + headStyle.setAlignment(HorizontalAlignment.CENTER); + headStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.index); + // 设置表身背景色(默认色) + CellStyle rowStyle = book.createCellStyle(); + rowStyle.setAlignment(HorizontalAlignment.CENTER); + rowStyle.setVerticalAlignment(VerticalAlignment.CENTER); + // 设置表格列宽度(默认为15个字节) + sheet.setDefaultColumnWidth(15); + // 创建合并算法数组 + int rowLength = sheetDataList.size(); + int columnLength = sheetDataList.get(0).size(); + int[][] mergeArray = new int[rowLength][columnLength]; + for (int i = 0; i < sheetDataList.size(); i++) { + // 每个 Sheet 页中的行数据 + Row row = sheet.createRow(i); + List rowList = sheetDataList.get(i); + for (int j = 0; j < rowList.size(); j++) { + // 每个行数据中的单元格数据 + Object o = rowList.get(j); + int v = 0; + if (o instanceof URL) { + // 如果要导出图片的话, 链接需要传递 URL 对象 + setCellPicture(book, row, patriarch, i, j, (URL) o); + } else { + Cell cell = row.createCell(j); + if (i == 0) { + // 第一行为表头行,采用灰色底背景 + v = setCellValue(cell, o, headStyle); + } else { + // 其他行为数据行,默认白底色 + v = setCellValue(cell, o, rowStyle); + } + } + mergeArray[i][j] = v; + } + } + // 合并单元格 + mergeCells(sheet, mergeArray); + // 设置下拉列表 + setSelect(sheet, selectMap); + } + // 写数据 + if (response != null) { + // 前端导出 + try { + write(response, book, fileName); + } catch (IOException e) { + e.printStackTrace(); + } + } else { + // 本地导出 + FileOutputStream fos; + try { + fos = new FileOutputStream(file); + ByteArrayOutputStream ops = new ByteArrayOutputStream(); + book.write(ops); + fos.write(ops.toByteArray()); + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + /** + * 合并当前Sheet页的单元格 + * + * @param sheet 当前 sheet 页 + * @param mergeArray 合并单元格算法 + */ + private static void mergeCells(Sheet sheet, int[][] mergeArray) { + // 横向合并 + for (int x = 0; x < mergeArray.length; x++) { + int[] arr = mergeArray[x]; + boolean merge = false; + int y1 = 0; + int y2 = 0; + for (int y = 0; y < arr.length; y++) { + int value = arr[y]; + if (value == CELL_COLUMN_MERGE) { + if (!merge) { + y1 = y; + } + y2 = y; + merge = true; + } else { + merge = false; + if (y1 > 0) { + sheet.addMergedRegion(new CellRangeAddress(x, x, (y1 - 1), y2)); + } + y1 = 0; + y2 = 0; + } + } + if (y1 > 0) { + sheet.addMergedRegion(new CellRangeAddress(x, x, (y1 - 1), y2)); + } + } + // 纵向合并 + int xLen = mergeArray.length; + int yLen = mergeArray[0].length; + for (int y = 0; y < yLen; y++) { + boolean merge = false; + int x1 = 0; + int x2 = 0; + for (int x = 0; x < xLen; x++) { + int value = mergeArray[x][y]; + if (value == CELL_ROW_MERGE) { + if (!merge) { + x1 = x; + } + x2 = x; + merge = true; + } else { + merge = false; + if (x1 > 0) { + sheet.addMergedRegion(new CellRangeAddress((x1 - 1), x2, y, y)); + } + x1 = 0; + x2 = 0; + } + } + if (x1 > 0) { + sheet.addMergedRegion(new CellRangeAddress((x1 - 1), x2, y, y)); + } + } + } + + private static void write(HttpServletResponse response, SXSSFWorkbook book, String fileName) throws IOException { + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + String name = new String(fileName.getBytes("GBK"), "ISO8859_1") + XLSX; + response.addHeader("Content-Disposition", "attachment;filename=" + name); + ServletOutputStream out = response.getOutputStream(); + book.write(out); + out.flush(); + out.close(); + } + + private static int setCellValue(Cell cell, Object o, CellStyle style) { + // 设置样式 + cell.setCellStyle(style); + // 数据为空时 + if (o == null) { +// cell.setCellType(CellType.STRING); + cell.setCellValue(""); + return CELL_OTHER; + } + // 是否为字符串 + if (o instanceof String) { + String s = o.toString(); + // 当数字类型长度超过8位时,改为字符串类型显示(Excel数字超过一定长度会显示为科学计数法) +// if (isNumeric(s) && s.length() < 8) { +//// cell.setCellType(CellType.NUMERIC); +// cell.setCellValue(Double.parseDouble(s)); +// return CELL_OTHER; +// } else { +//// cell.setCellType(CellType.STRING); +// cell.setCellValue(s); +// } + cell.setCellValue(s); + if (s.equals(ROW_MERGE)) { + return CELL_ROW_MERGE; + } else if (s.equals(COLUMN_MERGE)) { + return CELL_COLUMN_MERGE; + } else { + return CELL_OTHER; + } + } + // 是否为字符串 + if (o instanceof Integer || o instanceof Long || o instanceof Double || o instanceof Float) { +// cell.setCellType(CellType.NUMERIC); + cell.setCellValue(Double.parseDouble(o.toString())); + return CELL_OTHER; + } + // 是否为Boolean + if (o instanceof Boolean) { +// cell.setCellType(CellType.BOOLEAN); + cell.setCellValue((Boolean) o); + return CELL_OTHER; + } + // 如果是BigDecimal,则默认3位小数 + if (o instanceof BigDecimal) { +// cell.setCellType(CellType.NUMERIC); + cell.setCellValue(((BigDecimal) o).setScale(3, RoundingMode.HALF_UP).doubleValue()); + return CELL_OTHER; + } + // 如果是Date数据,则显示格式化数据 + if (o instanceof Date) { +// cell.setCellType(CellType.STRING); + cell.setCellValue(formatDate((Date) o)); + return CELL_OTHER; + } + // 如果是其他,则默认字符串类型 +// cell.setCellType(CellType.STRING); + cell.setCellValue(o.toString()); + return CELL_OTHER; + } + + private static void setCellPicture(SXSSFWorkbook wb, Row sr, Drawing patriarch, int x, int y, URL url) { + // 设置图片宽高 + sr.setHeight((short) (IMG_WIDTH * IMG_HEIGHT)); + // (jdk1.7版本try中定义流可自动关闭) + try (InputStream is = url.openStream(); ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { + byte[] buff = new byte[BYTES_DEFAULT_LENGTH]; + int rc; + while ((rc = is.read(buff, 0, BYTES_DEFAULT_LENGTH)) > 0) { + outputStream.write(buff, 0, rc); + } + // 设置图片位置 + XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, y, x, y + 1, x + 1); + // 设置这个,图片会自动填满单元格的长宽 + anchor.setAnchorType(ClientAnchor.AnchorType.MOVE_AND_RESIZE); + patriarch.createPicture(anchor, wb.addPicture(outputStream.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG)); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private static String formatDate(Date date) { + if (date == null) { + return ""; + } + SimpleDateFormat format = new SimpleDateFormat(DATE_FORMAT); + return format.format(date); + } + + private static void setSelect(Sheet sheet, Map> selectMap) { + if (selectMap == null || selectMap.isEmpty()) { + return; + } + Set>> entrySet = selectMap.entrySet(); + for (Map.Entry> entry : entrySet) { + int y = entry.getKey(); + List list = entry.getValue(); + if (list == null || list.isEmpty()) { + continue; + } + String[] arr = new String[list.size()]; + for (int i = 0; i < list.size(); i++) { + arr[i] = list.get(i); + } + DataValidationHelper helper = sheet.getDataValidationHelper(); + CellRangeAddressList addressList = new CellRangeAddressList(1, 65000, y, y); + DataValidationConstraint dvc = helper.createExplicitListConstraint(arr); + DataValidation dv = helper.createValidation(dvc, addressList); + if (dv instanceof HSSFDataValidation) { + dv.setSuppressDropDownArrow(false); + } else { + dv.setSuppressDropDownArrow(true); + dv.setShowErrorBox(true); + } + sheet.addValidationData(dv); + } + } + + private static boolean isNumeric(String str) { + if (Objects.nonNull(str) && "0.0".equals(str)) { + return true; + } + for (int i = str.length(); --i >= 0; ) { + if (!Character.isDigit(str.charAt(i))) { + return false; + } + } + return true; + } + + private static String getString(String s) { + if (s == null) { + return ""; + } + if (s.isEmpty()) { + return s; + } + return s.trim(); + } +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..690921d --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,73 @@ +spring: + datasource: + # 配置多数据源 + dynamic: + primary: master + strict: false + datasource: + # 主库 + master: + # 本地环境 +# url: jdbc:mysql://localhost:3306/wms_xizhou?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true +# username: developer +# password: developer + # 宝开服务器--外网 + url: jdbc:mysql://112.4.208.194:3001/wms_kate_xuzhou?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true + username: coder + password: coder + # 宝开服务器--内网 +# url: jdbc:mysql://192.168.3.254:3306/wms_kate_xuzhou?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true +# username: coder +# password: coder + # 上线环境 +# url: jdbc:mysql://localhost:3306/wms_xizhou?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true +# username: developer +# password: developer + # 从库 + slave_1: + url: jdbc:mysql://localhost:3306/wms_xizhou?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true + username: developer + password: developer + profiles: + active: online +server: + # 服务端配置 + port: 12315 + servlet: + # 接口地址 + context-path: / + encoding: + charset: utf-8 + enabled: true + force: true + +swagger: + # swagger配置 + enable: true + title: 菲达宝开WMS + description: 菲达宝开WMS + version: 1.0 + base-package: com.wms.controller + scan-packages: com.wms.controller + +mybatis-plus: + mapper-locations: classpath*:mapper/*.xml # mapper.xml扫描包 + type-aliases-package: com.wms.entity.table # 实体类扫描包 + configuration: + map-underscore-to-camel-case: true # 开启驼峰映射 + cache-enabled: false # 是否开启二级缓存 + global-config: + db-config: + id-type: assign_id + update-strategy: not_null + +logging: + config: classpath:logback-spring.xml + +#mybatis 分页插件 +#pagehelper: +# helperDialect: mysql +# reasonable: true +# supportMethodsArguments: true +# params: count=countSql + diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..1fb421f --- /dev/null +++ b/src/main/resources/logback-spring.xml @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + ${LOG_HOME}/info/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.%i.log + + 10MB + + + 30 + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + + + INFO + ACCEPT + DENY + + + + + + ${LOG_HOME}/warning/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.%i.log + + 10MB + + + 30 + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + + + WARNING + ACCEPT + DENY + + + + + + ${LOG_HOME}/error/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.%i.log + + 10MB + + + 30 + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + + + ERROR + ACCEPT + DENY + + + + + + ${LOG_HOME}/debug/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.%i.log + + 10MB + + + 30 + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + + + DEBUG + ACCEPT + DENY + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/ConfigMapper.xml b/src/main/resources/mapper/ConfigMapper.xml new file mode 100644 index 0000000..1aad51f --- /dev/null +++ b/src/main/resources/mapper/ConfigMapper.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + update tbl_sys_config + set config_value = #{configValue} + where config_id = #{configId} + + \ No newline at end of file diff --git a/src/main/resources/mapper/GoodsMapper.xml b/src/main/resources/mapper/GoodsMapper.xml new file mode 100644 index 0000000..550f8cd --- /dev/null +++ b/src/main/resources/mapper/GoodsMapper.xml @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + select goods_id, goods_name, goods_unit, item_id, item_type, inv_category, life_days, organization_id, + organization_code, last_update_time, last_update_user + from tbl_app_goods + + + + + + + + insert into tbl_app_goods + + goods_id, + goods_name, + goods_unit, + item_id, + item_type, + inv_category, + life_days, + organization_id, + organization_code, + last_update_time, + last_update_user, + + + #{goodsId}, + #{goodsName}, + #{goodsUnit}, + #{itemId}, + #{itemType}, + #{invCategory}, + #{lifeDays}, + #{organizationId}, + #{organizationCode}, + #{lastUpdateTime}, + #{lastUpdateUser}, + + + + + update tbl_app_goods + + goods_name = #{goodsName}, + goods_unit = #{goodsUnit}, + item_id = #{itemId}, + item_type = #{itemType}, + inv_category = #{invCategory}, + life_days = #{lifeDays}, + organization_id = #{organizationId}, + organization_code = #{organizationCode}, + last_update_time = #{lastUpdateTime}, + last_update_user = #{lastUpdateUser}, + + where goods_id = #{goodsId} + + + + delete from tbl_app_goods where goods_id = #{goodsId} + + \ No newline at end of file diff --git a/src/main/resources/mapper/LocationMapper.xml b/src/main/resources/mapper/LocationMapper.xml new file mode 100644 index 0000000..dd8c24a --- /dev/null +++ b/src/main/resources/mapper/LocationMapper.xml @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + select location_id, area_id, tunnel_id, equipment_id, location_type, queue, line, layer, depth, is_lock, location_status, goods_id, mark_depth + from tbl_app_location + + + + + + + + + + insert into tbl_app_location + + location_id, + area_id, + tunnel_id, + equipment_id, + location_type, + queue, + line, + layer, + depth, + is_lock, + location_status, + goods_id, + mark_depth, + + + #{locationId}, + #{areaId}, + #{tunnelId}, + #{equipmentId}, + #{locationType}, + #{queue}, + #{line}, + #{layer}, + #{depth}, + #{isLock}, + #{locationStatus}, + #{goodsId}, + #{markDepth}, + + + + + update tbl_app_location + + is_lock = #{isLock}, + location_status = #{locationStatus}, + goods_id = #{goodsId}, + + where location_id = #{locationId} + + \ No newline at end of file diff --git a/src/main/resources/mapper/LogMapper.xml b/src/main/resources/mapper/LogMapper.xml new file mode 100644 index 0000000..bb03d6d --- /dev/null +++ b/src/main/resources/mapper/LogMapper.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + select log_id, log_title, log_method, log_request, log_response, log_ip, log_time, log_user + from tbl_sys_log + + + + + + insert into tbl_sys_log + + log_id, + log_title, + log_method, + log_request, + log_response, + log_ip, + log_time, + log_user, + + + #{logId}, + #{logTitle}, + #{logMethod}, + #{logRequest}, + #{logResponse}, + #{logIp}, + #{logTime}, + #{logUser}, + + + + + update tbl_sys_log + + log_title = #{logTitle}, + log_method = #{logMethod}, + log_request = #{logRequest}, + log_response = #{logResponse}, + log_ip = #{logIp}, + log_time = #{logTime}, + log_user = #{logUser}, + + where log_id = #{logId} + + + + delete from tbl_sys_log where log_id = #{logId} + + + + delete from tbl_sys_log where log_time < date_add(curdate(),INTERVAL -30 DAY) + + \ No newline at end of file diff --git a/src/main/resources/mapper/MenuMapper.xml b/src/main/resources/mapper/MenuMapper.xml new file mode 100644 index 0000000..0be30d7 --- /dev/null +++ b/src/main/resources/mapper/MenuMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/StandMapper.xml b/src/main/resources/mapper/StandMapper.xml new file mode 100644 index 0000000..f3ca43c --- /dev/null +++ b/src/main/resources/mapper/StandMapper.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + select stand_id, allow_in, allow_out, allow_inventory, task_id, is_lock, stand_status, equipment_id, area_id, + stand_type, stand_ip, outer_id + from tbl_app_stand + + + + + + + + insert into tbl_app_stand + + stand_id, + allow_in, + allow_out, + allow_inventory, + task_id, + is_lock, + stand_status, + equipment_id, + area_id, + stand_type, + stand_ip, + outer_id, + + + #{standId}, + #{allowIn}, + #{allowOut}, + #{allowInventory}, + #{taskId}, + #{isLock}, + #{standStatus}, + #{equipmentId}, + #{areaId}, + #{standType}, + #{standIp}, + #{outerId}, + + + + + update tbl_app_stand + + allow_in = #{allowIn}, + allow_out = #{allowOut}, + allow_inventory = #{allowInventory}, + task_id = #{taskId}, + is_lock = #{isLock}, + stand_status = #{standStatus}, + equipment_id = #{equipmentId}, + area_id = #{areaId}, + stand_type = #{standType}, + stand_ip = #{standIp}, + outer_id = #{outerId}, + + where stand_id = #{standId} + + + + delete from tbl_app_stand where stand_id = #{standId} + + \ No newline at end of file diff --git a/src/main/resources/mapper/StockMapper.xml b/src/main/resources/mapper/StockMapper.xml new file mode 100644 index 0000000..98c2150 --- /dev/null +++ b/src/main/resources/mapper/StockMapper.xml @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select stock_id, location_id, vehicle_id, barcode, batch_no, goods_type, specification, weight, goods_id, goods_name, + origin_num, real_num, stock_status, goods_status, create_time, last_update_time, last_update_user, + remark, is_inventory, inventory_task_id, order_id, no_use_days, production_date, expiration_date, tunnel_id, + goods_unit, weigh_date, goods_code + from tbl_app_stock + + + + + + + + + + + + + + + + insert into tbl_app_stock + + stock_id, + location_id, + vehicle_id, + barcode, + batch_no, + goods_type, + specification, + weight, + goods_id, + goods_name, + origin_num, + real_num, + stock_status, + goods_status, + create_time, + last_update_time, + last_update_user, + remark, + is_inventory, + inventory_task_id, + order_id, + no_use_days, + production_date, + expiration_date, + tunnel_id, + goods_unit, + weigh_date, + goods_code, + + + #{stockId}, + #{locationId}, + #{vehicleId}, + #{barcode}, + #{batchNo}, + #{goodsType}, + #{specification}, + #{weight}, + #{goodsId}, + #{goodsName}, + #{originNum}, + #{realNum}, + #{stockStatus}, + #{goodsStatus}, + #{createTime}, + #{lastUpdateTime}, + #{lastUpdateUser}, + #{remark}, + #{isInventory}, + #{inventoryTaskId}, + #{orderId}, + #{noUseDays}, + #{productionDate}, + #{expirationDate}, + #{tunnelId}, + #{goodsUnit}, + #{weighDate}, + #{goodsCode}, + + + + + update tbl_app_stock + + location_id = #{locationId}, + vehicle_id = #{vehicleId}, + barcode = #{barcode}, + batch_no = #{batchNo}, + goods_type = #{goodsType}, + specification = #{specification}, + weight = #{weight}, + goods_id = #{goodsId}, + goods_name = #{goodsName}, + origin_num = #{originNum}, + real_num = #{realNum}, + stock_status = #{stockStatus}, + goods_status = #{goodsStatus}, + create_time = #{createTime}, + last_update_time = #{lastUpdateTime}, + last_update_user = #{lastUpdateUser}, + remark = #{remark}, + is_inventory = #{isInventory}, + inventory_task_id = #{inventoryTaskId}, + order_id = #{orderId}, + no_use_days = #{noUseDays}, + production_date = #{productionDate}, + expiration_date = #{expirationDate}, + tunnel_id = #{tunnelId}, + goods_unit = #{goodsUnit}, + weigh_date = #{weighDate}, + goods_code = #{goodsCode}, + + where stock_id = #{stockId} + + + + delete from tbl_app_stock where stock_id = #{stockId} + + \ No newline at end of file diff --git a/src/main/resources/mapper/TaskMapper.xml b/src/main/resources/mapper/TaskMapper.xml new file mode 100644 index 0000000..3ea8e99 --- /dev/null +++ b/src/main/resources/mapper/TaskMapper.xml @@ -0,0 +1,185 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select task_id, task_type, task_status, task_group, origin, destination, weight, vehicle_no, vehicle_size, + create_time, user_name, goods_id, goods_name, operate_num, total_num, task_priority, remark1, locator, + barcode, batch_no, goods_type, specification, production_date, expiration_date, pre_task, finish_time, + goods_code, goods_unit, weigh_date + from tbl_app_task + + + + + + insert into tbl_app_task + + task_id, + task_type, + task_status, + task_group, + origin, + destination, + weight, + vehicle_no, + vehicle_size, + create_time, + user_name, + goods_id, + goods_name, + operate_num, + total_num, + task_priority, + remark1, + locator, + barcode, + batch_no, + goods_type, + specification, + production_date, + expiration_date, + pre_task, + finish_time, + goods_code, + goods_unit, + weigh_date, + + + #{taskId}, + #{taskType}, + #{taskStatus}, + #{taskGroup}, + #{origin}, + #{destination}, + #{weight}, + #{vehicleNo}, + #{vehicleSize}, + #{createTime}, + #{userName}, + #{goodsId}, + #{goodsName}, + #{operateNum}, + #{totalNum}, + #{taskPriority}, + #{remark1}, + #{locator}, + #{barcode}, + #{batchNo}, + #{goodsType}, + #{specification}, + #{productionDate}, + #{expirationDate}, + #{preTask}, + #{finishTime}, + #{goodsCode}, + #{goodsUnit}, + #{weighDate}, + + + + + update tbl_app_task + + task_type = #{taskType}, + task_status = #{taskStatus}, + task_group = #{taskGroup}, + origin = #{origin}, + destination = #{destination}, + weight = #{weight}, + vehicle_no = #{vehicleNo}, + vehicle_size = #{vehicleSize}, + create_time = #{createTime}, + user_name = #{userName}, + goods_id = #{goodsId}, + goods_name = #{goodsName}, + operate_num = #{operateNum}, + total_num = #{totalNum}, + task_priority = #{taskPriority}, + production_date = #{productionDate}, + expiration_date = #{expirationDate}, + remark1 = #{remark1}, + locator = #{locator}, + barcode = #{barcode}, + batch_no = #{batchNo}, + goods_type = #{goodsType}, + specification = #{specification}, + pre_task = #{preTask}, + finish_time = #{finishTime}, + goods_code = #{goodsCode}, + goods_unit = #{goodsUnit}, + weigh_date = #{weighDate}, + + where task_id = #{taskId} + + + + delete from tbl_app_task where task_id = #{taskId} + + \ No newline at end of file diff --git a/src/main/resources/mapper/TaskRecordMapper.xml b/src/main/resources/mapper/TaskRecordMapper.xml new file mode 100644 index 0000000..63b1882 --- /dev/null +++ b/src/main/resources/mapper/TaskRecordMapper.xml @@ -0,0 +1,185 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select task_id, task_type, task_status, task_group, origin, destination, weight, vehicle_no, vehicle_size, + create_time, user_name, goods_id, goods_name, operate_num, total_num, task_priority, remark1, locator, + barcode, batch_no, goods_type, specification, production_date, expiration_date, finish_time, pre_task, + goods_code, goods_unit, weigh_date + from tbl_app_task_bak + + + + + + insert into tbl_app_task_bak + + task_id, + task_type, + task_status, + task_group, + origin, + destination, + weight, + vehicle_no, + vehicle_size, + create_time, + user_name, + goods_id, + goods_name, + operate_num, + total_num, + task_priority, + remark1, + locator, + barcode, + batch_no, + goods_type, + specification, + production_date, + expiration_date, + finish_time, + pre_task, + goods_code, + goods_unit, + weigh_date, + + + #{taskId}, + #{taskType}, + #{taskStatus}, + #{taskGroup}, + #{origin}, + #{destination}, + #{weight}, + #{vehicleNo}, + #{vehicleSize}, + #{createTime}, + #{userName}, + #{goodsId}, + #{goodsName}, + #{operateNum}, + #{totalNum}, + #{taskPriority}, + #{remark1}, + #{locator}, + #{barcode}, + #{batchNo}, + #{goodsType}, + #{specification}, + #{productionDate}, + #{expirationDate}, + #{finishTime}, + #{preTask}, + #{goodsCode}, + #{goodsUnit}, + #{weighDate}, + + + + + update tbl_app_task + + task_type = #{taskType}, + task_status = #{taskStatus}, + task_group = #{taskGroup}, + origin = #{origin}, + destination = #{destination}, + weight = #{weight}, + vehicle_no = #{vehicleNo}, + vehicle_size = #{vehicleSize}, + create_time = #{createTime}, + user_name = #{userName}, + goods_id = #{goodsId}, + goods_name = #{goodsName}, + operate_num = #{operateNum}, + total_num = #{totalNum}, + task_priority = #{taskPriority}, + production_date = #{productionDate}, + expiration_date = #{expirationDate}, + remark1 = #{remark1}, + locator = #{locator}, + barcode = #{barcode}, + batch_no = #{batchNo}, + goods_type = #{goodsType}, + specification = #{specification}, + finish_time = #{finishTime}, + pre_task = #{preTask}, + goods_code = #{goodsCode}, + goods_unit = #{goodsUnit}, + weigh_date = #{weighDate}, + + where task_id = #{taskId} + + + + delete from tbl_app_task_bak where task_id = #{taskId} + + \ No newline at end of file diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml new file mode 100644 index 0000000..9b7bf82 --- /dev/null +++ b/src/main/resources/mapper/UserMapper.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mapper/VehicleMapper.xml b/src/main/resources/mapper/VehicleMapper.xml new file mode 100644 index 0000000..983999d --- /dev/null +++ b/src/main/resources/mapper/VehicleMapper.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + select vehicle_id, current_location, vehicle_status, is_empty + from tbl_app_vehicle + + + + + + + + insert into tbl_app_vehicle + + vehicle_id, + current_location, + vehicle_status, + is_empty, + + + #{vehicleId}, + #{currentLocation}, + #{vehicleStatus}, + #{isEmpty}, + + + + + update tbl_app_vehicle + + current_location = #{currentLocation}, + vehicle_status = #{vehicleStatus}, + is_empty = #{isEmpty}, + + where vehicle_id = #{vehicleId} + + + + delete from tbl_app_vehicle where vehicle_id = #{vehicleId} + + \ No newline at end of file diff --git a/src/main/resources/sql/wms_kate_suzhou.sql b/src/main/resources/sql/wms_kate_suzhou.sql new file mode 100644 index 0000000..8ed5587 --- /dev/null +++ b/src/main/resources/sql/wms_kate_suzhou.sql @@ -0,0 +1,2799 @@ +/* + Navicat Premium Data Transfer + + Source Server : 本地数据库 + Source Server Type : MySQL + Source Server Version : 80032 (8.0.32) + Source Host : localhost:3306 + Source Schema : wms_kate_suzhou + + Target Server Type : MySQL + Target Server Version : 80032 (8.0.32) + File Encoding : 65001 + + Date: 14/06/2024 14:22:11 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for tbl_app_e_location +-- ---------------------------- +DROP TABLE IF EXISTS `tbl_app_e_location`; +CREATE TABLE `tbl_app_e_location` ( + `e_location_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '电子标签库位号', + `e_area_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '区域号', + `e_sequence_no` int NOT NULL COMMENT '顺序号', + PRIMARY KEY (`e_location_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of tbl_app_e_location +-- ---------------------------- + +-- ---------------------------- +-- Table structure for tbl_app_goods +-- ---------------------------- +DROP TABLE IF EXISTS `tbl_app_goods`; +CREATE TABLE `tbl_app_goods` ( + `goods_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '物料编号', + `goods_name` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '物料名称', + `goods_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '型号', + `specification` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '规格', + `last_update_time` datetime NULL DEFAULT NULL COMMENT '最后更新时间', + `last_update_user` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '最后更新用户', + PRIMARY KEY (`goods_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tbl_app_goods +-- ---------------------------- + +-- ---------------------------- +-- Table structure for tbl_app_location +-- ---------------------------- +DROP TABLE IF EXISTS `tbl_app_location`; +CREATE TABLE `tbl_app_location` ( + `location_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '库位编号', + `area_id` int NULL DEFAULT NULL COMMENT '区域编号', + `tunnel_id` int NULL DEFAULT NULL COMMENT '巷道编号', + `equipment_id` int NULL DEFAULT NULL COMMENT '设备编号', + `location_type` int NULL DEFAULT NULL COMMENT '库位类型', + `queue` int NULL DEFAULT NULL COMMENT '排', + `line` int NULL DEFAULT NULL COMMENT '列', + `layer` int NULL DEFAULT NULL COMMENT '层', + `depth` int NULL DEFAULT NULL COMMENT '深度', + `is_lock` int NULL DEFAULT NULL COMMENT '库位是否锁定(0:未锁定,1:锁定)', + `location_status` int NULL DEFAULT NULL COMMENT '库位状态(0:空闲,1:占用)', + `goods_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '物料编号', + `mark_depth` int NULL DEFAULT NULL COMMENT '特殊-为了判断能否放到此位置', + PRIMARY KEY (`location_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tbl_app_location +-- ---------------------------- +INSERT INTO `tbl_app_location` VALUES ('010101-01', 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010101-02', 1, 1, 1, 0, 1, 1, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010101-03', 1, 1, 1, 0, 1, 1, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010102-01', 1, 1, 1, 0, 1, 1, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010102-02', 1, 1, 1, 0, 1, 1, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010102-03', 1, 1, 1, 0, 1, 1, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010103-01', 1, 1, 1, 0, 1, 1, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010103-02', 1, 1, 1, 0, 1, 1, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010103-03', 1, 1, 1, 0, 1, 1, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010104-01', 1, 1, 1, 0, 1, 1, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010104-02', 1, 1, 1, 0, 1, 1, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010104-03', 1, 1, 1, 0, 1, 1, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010105-01', 1, 1, 1, 0, 1, 1, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010105-02', 1, 1, 1, 0, 1, 1, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010105-03', 1, 1, 1, 0, 1, 1, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010106-01', 1, 1, 1, 0, 1, 1, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010106-02', 1, 1, 1, 0, 1, 1, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010106-03', 1, 1, 1, 0, 1, 1, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010107-01', 1, 1, 1, 0, 1, 1, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010107-02', 1, 1, 1, 0, 1, 1, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010107-03', 1, 1, 1, 0, 1, 1, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010108-01', 1, 1, 1, 0, 1, 1, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010108-02', 1, 1, 1, 0, 1, 1, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010108-03', 1, 1, 1, 0, 1, 1, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010109-01', 1, 1, 1, 0, 1, 1, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010109-02', 1, 1, 1, 0, 1, 1, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010109-03', 1, 1, 1, 0, 1, 1, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010110-01', 1, 1, 1, 0, 1, 1, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010110-02', 1, 1, 1, 0, 1, 1, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010110-03', 1, 1, 1, 0, 1, 1, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010111-01', 1, 1, 1, 0, 1, 1, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010111-02', 1, 1, 1, 0, 1, 1, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010111-03', 1, 1, 1, 0, 1, 1, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010201-01', 1, 1, 1, 0, 1, 2, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010201-02', 1, 1, 1, 0, 1, 2, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010201-03', 1, 1, 1, 0, 1, 2, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010202-01', 1, 1, 1, 0, 1, 2, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010202-02', 1, 1, 1, 0, 1, 2, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010202-03', 1, 1, 1, 0, 1, 2, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010203-01', 1, 1, 1, 0, 1, 2, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010203-02', 1, 1, 1, 0, 1, 2, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010203-03', 1, 1, 1, 0, 1, 2, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010204-01', 1, 1, 1, 0, 1, 2, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010204-02', 1, 1, 1, 0, 1, 2, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010204-03', 1, 1, 1, 0, 1, 2, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010205-01', 1, 1, 1, 0, 1, 2, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010205-02', 1, 1, 1, 0, 1, 2, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010205-03', 1, 1, 1, 0, 1, 2, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010206-01', 1, 1, 1, 0, 1, 2, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010206-02', 1, 1, 1, 0, 1, 2, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010206-03', 1, 1, 1, 0, 1, 2, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010207-01', 1, 1, 1, 0, 1, 2, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010207-02', 1, 1, 1, 0, 1, 2, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010207-03', 1, 1, 1, 0, 1, 2, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010208-01', 1, 1, 1, 0, 1, 2, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010208-02', 1, 1, 1, 0, 1, 2, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010208-03', 1, 1, 1, 0, 1, 2, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010209-01', 1, 1, 1, 0, 1, 2, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010209-02', 1, 1, 1, 0, 1, 2, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010209-03', 1, 1, 1, 0, 1, 2, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010210-01', 1, 1, 1, 0, 1, 2, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010210-02', 1, 1, 1, 0, 1, 2, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010210-03', 1, 1, 1, 0, 1, 2, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010211-01', 1, 1, 1, 0, 1, 2, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010211-02', 1, 1, 1, 0, 1, 2, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010211-03', 1, 1, 1, 0, 1, 2, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010301-01', 1, 1, 1, 0, 1, 3, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010301-02', 1, 1, 1, 0, 1, 3, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010301-03', 1, 1, 1, 0, 1, 3, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010302-01', 1, 1, 1, 0, 1, 3, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010302-02', 1, 1, 1, 0, 1, 3, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010302-03', 1, 1, 1, 0, 1, 3, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010303-01', 1, 1, 1, 0, 1, 3, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010303-02', 1, 1, 1, 0, 1, 3, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010303-03', 1, 1, 1, 0, 1, 3, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010304-01', 1, 1, 1, 0, 1, 3, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010304-02', 1, 1, 1, 0, 1, 3, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010304-03', 1, 1, 1, 0, 1, 3, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010305-01', 1, 1, 1, 0, 1, 3, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010305-02', 1, 1, 1, 0, 1, 3, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010305-03', 1, 1, 1, 0, 1, 3, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010306-01', 1, 1, 1, 0, 1, 3, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010306-02', 1, 1, 1, 0, 1, 3, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010306-03', 1, 1, 1, 0, 1, 3, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010307-01', 1, 1, 1, 0, 1, 3, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010307-02', 1, 1, 1, 0, 1, 3, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010307-03', 1, 1, 1, 0, 1, 3, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010308-01', 1, 1, 1, 0, 1, 3, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010308-02', 1, 1, 1, 0, 1, 3, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010308-03', 1, 1, 1, 0, 1, 3, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010309-01', 1, 1, 1, 0, 1, 3, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010309-02', 1, 1, 1, 0, 1, 3, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010309-03', 1, 1, 1, 0, 1, 3, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010310-01', 1, 1, 1, 0, 1, 3, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010310-02', 1, 1, 1, 0, 1, 3, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010310-03', 1, 1, 1, 0, 1, 3, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010311-01', 1, 1, 1, 0, 1, 3, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010311-02', 1, 1, 1, 0, 1, 3, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010311-03', 1, 1, 1, 0, 1, 3, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010401-01', 1, 1, 1, 0, 1, 4, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010401-02', 1, 1, 1, 0, 1, 4, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010401-03', 1, 1, 1, 0, 1, 4, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010402-01', 1, 1, 1, 0, 1, 4, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010402-02', 1, 1, 1, 0, 1, 4, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010402-03', 1, 1, 1, 0, 1, 4, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010403-01', 1, 1, 1, 0, 1, 4, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010403-02', 1, 1, 1, 0, 1, 4, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010403-03', 1, 1, 1, 0, 1, 4, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010404-01', 1, 1, 1, 0, 1, 4, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010404-02', 1, 1, 1, 0, 1, 4, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010404-03', 1, 1, 1, 0, 1, 4, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010405-01', 1, 1, 1, 0, 1, 4, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010405-02', 1, 1, 1, 0, 1, 4, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010405-03', 1, 1, 1, 0, 1, 4, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010406-01', 1, 1, 1, 0, 1, 4, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010406-02', 1, 1, 1, 0, 1, 4, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010406-03', 1, 1, 1, 0, 1, 4, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010407-01', 1, 1, 1, 0, 1, 4, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010407-02', 1, 1, 1, 0, 1, 4, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010407-03', 1, 1, 1, 0, 1, 4, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010408-01', 1, 1, 1, 0, 1, 4, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010408-02', 1, 1, 1, 0, 1, 4, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010408-03', 1, 1, 1, 0, 1, 4, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010409-01', 1, 1, 1, 0, 1, 4, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010409-02', 1, 1, 1, 0, 1, 4, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010409-03', 1, 1, 1, 0, 1, 4, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010410-01', 1, 1, 1, 0, 1, 4, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010410-02', 1, 1, 1, 0, 1, 4, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010410-03', 1, 1, 1, 0, 1, 4, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010411-01', 1, 1, 1, 0, 1, 4, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010411-02', 1, 1, 1, 0, 1, 4, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010411-03', 1, 1, 1, 0, 1, 4, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010501-01', 1, 1, 1, 0, 1, 5, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010501-02', 1, 1, 1, 0, 1, 5, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010501-03', 1, 1, 1, 0, 1, 5, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010502-01', 1, 1, 1, 0, 1, 5, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010502-02', 1, 1, 1, 0, 1, 5, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010502-03', 1, 1, 1, 0, 1, 5, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010503-01', 1, 1, 1, 0, 1, 5, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010503-02', 1, 1, 1, 0, 1, 5, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010503-03', 1, 1, 1, 0, 1, 5, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010504-01', 1, 1, 1, 0, 1, 5, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010504-02', 1, 1, 1, 0, 1, 5, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010504-03', 1, 1, 1, 0, 1, 5, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010505-01', 1, 1, 1, 0, 1, 5, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010505-02', 1, 1, 1, 0, 1, 5, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010505-03', 1, 1, 1, 0, 1, 5, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010506-01', 1, 1, 1, 0, 1, 5, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010506-02', 1, 1, 1, 0, 1, 5, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010506-03', 1, 1, 1, 0, 1, 5, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010507-01', 1, 1, 1, 0, 1, 5, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010507-02', 1, 1, 1, 0, 1, 5, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010507-03', 1, 1, 1, 0, 1, 5, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010508-01', 1, 1, 1, 0, 1, 5, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010508-02', 1, 1, 1, 0, 1, 5, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010508-03', 1, 1, 1, 0, 1, 5, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010509-01', 1, 1, 1, 0, 1, 5, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010509-02', 1, 1, 1, 0, 1, 5, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010509-03', 1, 1, 1, 0, 1, 5, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010510-01', 1, 1, 1, 0, 1, 5, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010510-02', 1, 1, 1, 0, 1, 5, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010510-03', 1, 1, 1, 0, 1, 5, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010511-01', 1, 1, 1, 0, 1, 5, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010511-02', 1, 1, 1, 0, 1, 5, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010511-03', 1, 1, 1, 0, 1, 5, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010601-01', 1, 1, 1, 0, 1, 6, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010601-02', 1, 1, 1, 0, 1, 6, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010601-03', 1, 1, 1, 0, 1, 6, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010602-01', 1, 1, 1, 0, 1, 6, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010602-02', 1, 1, 1, 0, 1, 6, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010602-03', 1, 1, 1, 0, 1, 6, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010603-01', 1, 1, 1, 0, 1, 6, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010603-02', 1, 1, 1, 0, 1, 6, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010603-03', 1, 1, 1, 0, 1, 6, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010604-01', 1, 1, 1, 0, 1, 6, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010604-02', 1, 1, 1, 0, 1, 6, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010604-03', 1, 1, 1, 0, 1, 6, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010605-01', 1, 1, 1, 0, 1, 6, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010605-02', 1, 1, 1, 0, 1, 6, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010605-03', 1, 1, 1, 0, 1, 6, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010606-01', 1, 1, 1, 0, 1, 6, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010606-02', 1, 1, 1, 0, 1, 6, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010606-03', 1, 1, 1, 0, 1, 6, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010607-01', 1, 1, 1, 0, 1, 6, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010607-02', 1, 1, 1, 0, 1, 6, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010607-03', 1, 1, 1, 0, 1, 6, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010608-01', 1, 1, 1, 0, 1, 6, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010608-02', 1, 1, 1, 0, 1, 6, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010608-03', 1, 1, 1, 0, 1, 6, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010609-01', 1, 1, 1, 0, 1, 6, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010609-02', 1, 1, 1, 0, 1, 6, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010609-03', 1, 1, 1, 0, 1, 6, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010610-01', 1, 1, 1, 0, 1, 6, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010610-02', 1, 1, 1, 0, 1, 6, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010610-03', 1, 1, 1, 0, 1, 6, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010611-01', 1, 1, 1, 0, 1, 6, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010611-02', 1, 1, 1, 0, 1, 6, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010611-03', 1, 1, 1, 0, 1, 6, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010701-01', 1, 1, 1, 0, 1, 7, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010701-02', 1, 1, 1, 0, 1, 7, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010701-03', 1, 1, 1, 0, 1, 7, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010702-01', 1, 1, 1, 0, 1, 7, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010702-02', 1, 1, 1, 0, 1, 7, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010702-03', 1, 1, 1, 0, 1, 7, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010703-01', 1, 1, 1, 0, 1, 7, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010703-02', 1, 1, 1, 0, 1, 7, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010703-03', 1, 1, 1, 0, 1, 7, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010704-01', 1, 1, 1, 0, 1, 7, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010704-02', 1, 1, 1, 0, 1, 7, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010704-03', 1, 1, 1, 0, 1, 7, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010705-01', 1, 1, 1, 0, 1, 7, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010705-02', 1, 1, 1, 0, 1, 7, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010705-03', 1, 1, 1, 0, 1, 7, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010706-01', 1, 1, 1, 0, 1, 7, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010706-02', 1, 1, 1, 0, 1, 7, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010706-03', 1, 1, 1, 0, 1, 7, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010707-01', 1, 1, 1, 0, 1, 7, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010707-02', 1, 1, 1, 0, 1, 7, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010707-03', 1, 1, 1, 0, 1, 7, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010708-01', 1, 1, 1, 0, 1, 7, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010708-02', 1, 1, 1, 0, 1, 7, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010708-03', 1, 1, 1, 0, 1, 7, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010709-01', 1, 1, 1, 0, 1, 7, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010709-02', 1, 1, 1, 0, 1, 7, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010709-03', 1, 1, 1, 0, 1, 7, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010710-01', 1, 1, 1, 0, 1, 7, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010710-02', 1, 1, 1, 0, 1, 7, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010710-03', 1, 1, 1, 0, 1, 7, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010711-01', 1, 1, 1, 0, 1, 7, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010711-02', 1, 1, 1, 0, 1, 7, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010711-03', 1, 1, 1, 0, 1, 7, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010801-01', 1, 1, 1, 0, 1, 8, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010801-02', 1, 1, 1, 0, 1, 8, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010801-03', 1, 1, 1, 0, 1, 8, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010802-01', 1, 1, 1, 0, 1, 8, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010802-02', 1, 1, 1, 0, 1, 8, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010802-03', 1, 1, 1, 0, 1, 8, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010803-01', 1, 1, 1, 0, 1, 8, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010803-02', 1, 1, 1, 0, 1, 8, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010803-03', 1, 1, 1, 0, 1, 8, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010804-01', 1, 1, 1, 0, 1, 8, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010804-02', 1, 1, 1, 0, 1, 8, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010804-03', 1, 1, 1, 0, 1, 8, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010805-01', 1, 1, 1, 0, 1, 8, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010805-02', 1, 1, 1, 0, 1, 8, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010805-03', 1, 1, 1, 0, 1, 8, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010806-01', 1, 1, 1, 0, 1, 8, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010806-02', 1, 1, 1, 0, 1, 8, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010806-03', 1, 1, 1, 0, 1, 8, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010807-01', 1, 1, 1, 0, 1, 8, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010807-02', 1, 1, 1, 0, 1, 8, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010807-03', 1, 1, 1, 0, 1, 8, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010808-01', 1, 1, 1, 0, 1, 8, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010808-02', 1, 1, 1, 0, 1, 8, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010808-03', 1, 1, 1, 0, 1, 8, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010809-01', 1, 1, 1, 0, 1, 8, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010809-02', 1, 1, 1, 0, 1, 8, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010809-03', 1, 1, 1, 0, 1, 8, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010810-01', 1, 1, 1, 0, 1, 8, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010810-02', 1, 1, 1, 0, 1, 8, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010810-03', 1, 1, 1, 0, 1, 8, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010811-01', 1, 1, 1, 0, 1, 8, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010811-02', 1, 1, 1, 0, 1, 8, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010811-03', 1, 1, 1, 0, 1, 8, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010901-01', 1, 1, 1, 0, 1, 9, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010901-02', 1, 1, 1, 0, 1, 9, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010901-03', 1, 1, 1, 0, 1, 9, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010902-01', 1, 1, 1, 0, 1, 9, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010902-02', 1, 1, 1, 0, 1, 9, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010902-03', 1, 1, 1, 0, 1, 9, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010903-01', 1, 1, 1, 0, 1, 9, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010903-02', 1, 1, 1, 0, 1, 9, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010903-03', 1, 1, 1, 0, 1, 9, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010904-01', 1, 1, 1, 0, 1, 9, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010904-02', 1, 1, 1, 0, 1, 9, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010904-03', 1, 1, 1, 0, 1, 9, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010905-01', 1, 1, 1, 0, 1, 9, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010905-02', 1, 1, 1, 0, 1, 9, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010905-03', 1, 1, 1, 0, 1, 9, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010906-01', 1, 1, 1, 0, 1, 9, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010906-02', 1, 1, 1, 0, 1, 9, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010906-03', 1, 1, 1, 0, 1, 9, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010907-01', 1, 1, 1, 0, 1, 9, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010907-02', 1, 1, 1, 0, 1, 9, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010907-03', 1, 1, 1, 0, 1, 9, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010908-01', 1, 1, 1, 0, 1, 9, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010908-02', 1, 1, 1, 0, 1, 9, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010908-03', 1, 1, 1, 0, 1, 9, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010909-01', 1, 1, 1, 0, 1, 9, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010909-02', 1, 1, 1, 0, 1, 9, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010909-03', 1, 1, 1, 0, 1, 9, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010910-01', 1, 1, 1, 0, 1, 9, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010910-02', 1, 1, 1, 0, 1, 9, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010910-03', 1, 1, 1, 0, 1, 9, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('010911-01', 1, 1, 1, 0, 1, 9, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('010911-02', 1, 1, 1, 0, 1, 9, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('010911-03', 1, 1, 1, 0, 1, 9, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011001-01', 1, 1, 1, 0, 1, 10, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011001-02', 1, 1, 1, 0, 1, 10, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011001-03', 1, 1, 1, 0, 1, 10, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011002-01', 1, 1, 1, 0, 1, 10, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011002-02', 1, 1, 1, 0, 1, 10, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011002-03', 1, 1, 1, 0, 1, 10, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011003-01', 1, 1, 1, 0, 1, 10, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011003-02', 1, 1, 1, 0, 1, 10, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011003-03', 1, 1, 1, 0, 1, 10, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011004-01', 1, 1, 1, 0, 1, 10, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011004-02', 1, 1, 1, 0, 1, 10, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011004-03', 1, 1, 1, 0, 1, 10, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011005-01', 1, 1, 1, 0, 1, 10, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011005-02', 1, 1, 1, 0, 1, 10, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011005-03', 1, 1, 1, 0, 1, 10, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011006-01', 1, 1, 1, 0, 1, 10, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011006-02', 1, 1, 1, 0, 1, 10, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011006-03', 1, 1, 1, 0, 1, 10, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011007-01', 1, 1, 1, 0, 1, 10, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011007-02', 1, 1, 1, 0, 1, 10, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011007-03', 1, 1, 1, 0, 1, 10, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011008-01', 1, 1, 1, 0, 1, 10, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011008-02', 1, 1, 1, 0, 1, 10, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011008-03', 1, 1, 1, 0, 1, 10, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011009-01', 1, 1, 1, 0, 1, 10, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011009-02', 1, 1, 1, 0, 1, 10, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011009-03', 1, 1, 1, 0, 1, 10, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011010-01', 1, 1, 1, 0, 1, 10, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011010-02', 1, 1, 1, 0, 1, 10, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011010-03', 1, 1, 1, 0, 1, 10, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011011-01', 1, 1, 1, 0, 1, 10, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011011-02', 1, 1, 1, 0, 1, 10, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011011-03', 1, 1, 1, 0, 1, 10, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011101-01', 1, 1, 1, 0, 1, 11, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011101-02', 1, 1, 1, 0, 1, 11, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011101-03', 1, 1, 1, 0, 1, 11, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011102-01', 1, 1, 1, 0, 1, 11, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011102-02', 1, 1, 1, 0, 1, 11, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011102-03', 1, 1, 1, 0, 1, 11, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011103-01', 1, 1, 1, 0, 1, 11, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011103-02', 1, 1, 1, 0, 1, 11, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011103-03', 1, 1, 1, 0, 1, 11, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011104-01', 1, 1, 1, 0, 1, 11, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011104-02', 1, 1, 1, 0, 1, 11, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011104-03', 1, 1, 1, 0, 1, 11, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011105-01', 1, 1, 1, 0, 1, 11, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011105-02', 1, 1, 1, 0, 1, 11, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011105-03', 1, 1, 1, 0, 1, 11, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011106-01', 1, 1, 1, 0, 1, 11, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011106-02', 1, 1, 1, 0, 1, 11, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011106-03', 1, 1, 1, 0, 1, 11, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011107-01', 1, 1, 1, 0, 1, 11, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011107-02', 1, 1, 1, 0, 1, 11, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011107-03', 1, 1, 1, 0, 1, 11, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011108-01', 1, 1, 1, 0, 1, 11, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011108-02', 1, 1, 1, 0, 1, 11, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011108-03', 1, 1, 1, 0, 1, 11, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011109-01', 1, 1, 1, 0, 1, 11, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011109-02', 1, 1, 1, 0, 1, 11, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011109-03', 1, 1, 1, 0, 1, 11, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011110-01', 1, 1, 1, 0, 1, 11, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011110-02', 1, 1, 1, 0, 1, 11, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011110-03', 1, 1, 1, 0, 1, 11, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011111-01', 1, 1, 1, 0, 1, 11, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011111-02', 1, 1, 1, 0, 1, 11, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011111-03', 1, 1, 1, 0, 1, 11, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011201-01', 1, 1, 1, 0, 1, 12, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011201-02', 1, 1, 1, 0, 1, 12, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011201-03', 1, 1, 1, 0, 1, 12, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011202-01', 1, 1, 1, 0, 1, 12, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011202-02', 1, 1, 1, 0, 1, 12, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011202-03', 1, 1, 1, 0, 1, 12, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011203-01', 1, 1, 1, 0, 1, 12, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011203-02', 1, 1, 1, 0, 1, 12, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011203-03', 1, 1, 1, 0, 1, 12, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011204-01', 1, 1, 1, 0, 1, 12, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011204-02', 1, 1, 1, 0, 1, 12, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011204-03', 1, 1, 1, 0, 1, 12, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011205-01', 1, 1, 1, 0, 1, 12, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011205-02', 1, 1, 1, 0, 1, 12, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011205-03', 1, 1, 1, 0, 1, 12, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011206-01', 1, 1, 1, 0, 1, 12, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011206-02', 1, 1, 1, 0, 1, 12, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011206-03', 1, 1, 1, 0, 1, 12, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011207-01', 1, 1, 1, 0, 1, 12, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011207-02', 1, 1, 1, 0, 1, 12, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011207-03', 1, 1, 1, 0, 1, 12, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011208-01', 1, 1, 1, 0, 1, 12, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011208-02', 1, 1, 1, 0, 1, 12, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011208-03', 1, 1, 1, 0, 1, 12, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011209-01', 1, 1, 1, 0, 1, 12, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011209-02', 1, 1, 1, 0, 1, 12, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011209-03', 1, 1, 1, 0, 1, 12, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011210-01', 1, 1, 1, 0, 1, 12, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011210-02', 1, 1, 1, 0, 1, 12, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011210-03', 1, 1, 1, 0, 1, 12, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011211-01', 1, 1, 1, 0, 1, 12, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011211-02', 1, 1, 1, 0, 1, 12, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011211-03', 1, 1, 1, 0, 1, 12, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011301-01', 1, 1, 1, 0, 1, 13, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011301-02', 1, 1, 1, 0, 1, 13, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011301-03', 1, 1, 1, 0, 1, 13, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011302-01', 1, 1, 1, 0, 1, 13, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011302-02', 1, 1, 1, 0, 1, 13, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011302-03', 1, 1, 1, 0, 1, 13, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011303-01', 1, 1, 1, 0, 1, 13, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011303-02', 1, 1, 1, 0, 1, 13, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011303-03', 1, 1, 1, 0, 1, 13, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011304-01', 1, 1, 1, 0, 1, 13, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011304-02', 1, 1, 1, 0, 1, 13, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011304-03', 1, 1, 1, 0, 1, 13, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011305-01', 1, 1, 1, 0, 1, 13, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011305-02', 1, 1, 1, 0, 1, 13, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011305-03', 1, 1, 1, 0, 1, 13, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011306-01', 1, 1, 1, 0, 1, 13, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011306-02', 1, 1, 1, 0, 1, 13, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011306-03', 1, 1, 1, 0, 1, 13, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011307-01', 1, 1, 1, 0, 1, 13, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011307-02', 1, 1, 1, 0, 1, 13, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011307-03', 1, 1, 1, 0, 1, 13, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011308-01', 1, 1, 1, 0, 1, 13, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011308-02', 1, 1, 1, 0, 1, 13, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011308-03', 1, 1, 1, 0, 1, 13, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011309-01', 1, 1, 1, 0, 1, 13, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011309-02', 1, 1, 1, 0, 1, 13, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011309-03', 1, 1, 1, 0, 1, 13, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011310-01', 1, 1, 1, 0, 1, 13, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011310-02', 1, 1, 1, 0, 1, 13, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011310-03', 1, 1, 1, 0, 1, 13, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011311-01', 1, 1, 1, 0, 1, 13, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011311-02', 1, 1, 1, 0, 1, 13, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011311-03', 1, 1, 1, 0, 1, 13, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011401-01', 1, 1, 1, 0, 1, 14, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011401-02', 1, 1, 1, 0, 1, 14, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011401-03', 1, 1, 1, 0, 1, 14, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011402-01', 1, 1, 1, 0, 1, 14, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011402-02', 1, 1, 1, 0, 1, 14, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011402-03', 1, 1, 1, 0, 1, 14, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011403-01', 1, 1, 1, 0, 1, 14, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011403-02', 1, 1, 1, 0, 1, 14, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011403-03', 1, 1, 1, 0, 1, 14, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011404-01', 1, 1, 1, 0, 1, 14, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011404-02', 1, 1, 1, 0, 1, 14, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011404-03', 1, 1, 1, 0, 1, 14, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011405-01', 1, 1, 1, 0, 1, 14, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011405-02', 1, 1, 1, 0, 1, 14, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011405-03', 1, 1, 1, 0, 1, 14, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011406-01', 1, 1, 1, 0, 1, 14, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011406-02', 1, 1, 1, 0, 1, 14, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011406-03', 1, 1, 1, 0, 1, 14, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011407-01', 1, 1, 1, 0, 1, 14, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011407-02', 1, 1, 1, 0, 1, 14, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011407-03', 1, 1, 1, 0, 1, 14, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011408-01', 1, 1, 1, 0, 1, 14, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011408-02', 1, 1, 1, 0, 1, 14, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011408-03', 1, 1, 1, 0, 1, 14, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011409-01', 1, 1, 1, 0, 1, 14, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011409-02', 1, 1, 1, 0, 1, 14, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011409-03', 1, 1, 1, 0, 1, 14, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011410-01', 1, 1, 1, 0, 1, 14, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011410-02', 1, 1, 1, 0, 1, 14, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011410-03', 1, 1, 1, 0, 1, 14, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011411-01', 1, 1, 1, 0, 1, 14, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011411-02', 1, 1, 1, 0, 1, 14, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011411-03', 1, 1, 1, 0, 1, 14, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011501-01', 1, 1, 1, 0, 1, 15, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011501-02', 1, 1, 1, 0, 1, 15, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011501-03', 1, 1, 1, 0, 1, 15, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011502-01', 1, 1, 1, 0, 1, 15, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011502-02', 1, 1, 1, 0, 1, 15, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011502-03', 1, 1, 1, 0, 1, 15, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011503-01', 1, 1, 1, 0, 1, 15, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011503-02', 1, 1, 1, 0, 1, 15, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011503-03', 1, 1, 1, 0, 1, 15, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011504-01', 1, 1, 1, 0, 1, 15, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011504-02', 1, 1, 1, 0, 1, 15, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011504-03', 1, 1, 1, 0, 1, 15, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011505-01', 1, 1, 1, 0, 1, 15, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011505-02', 1, 1, 1, 0, 1, 15, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011505-03', 1, 1, 1, 0, 1, 15, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011506-01', 1, 1, 1, 0, 1, 15, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011506-02', 1, 1, 1, 0, 1, 15, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011506-03', 1, 1, 1, 0, 1, 15, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011507-01', 1, 1, 1, 0, 1, 15, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011507-02', 1, 1, 1, 0, 1, 15, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011507-03', 1, 1, 1, 0, 1, 15, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011508-01', 1, 1, 1, 0, 1, 15, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011508-02', 1, 1, 1, 0, 1, 15, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011508-03', 1, 1, 1, 0, 1, 15, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011509-01', 1, 1, 1, 0, 1, 15, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011509-02', 1, 1, 1, 0, 1, 15, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011509-03', 1, 1, 1, 0, 1, 15, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011510-01', 1, 1, 1, 0, 1, 15, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011510-02', 1, 1, 1, 0, 1, 15, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011510-03', 1, 1, 1, 0, 1, 15, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011511-01', 1, 1, 1, 0, 1, 15, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011511-02', 1, 1, 1, 0, 1, 15, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011511-03', 1, 1, 1, 0, 1, 15, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011601-01', 1, 1, 1, 0, 1, 16, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011601-02', 1, 1, 1, 0, 1, 16, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011601-03', 1, 1, 1, 0, 1, 16, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011602-01', 1, 1, 1, 0, 1, 16, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011602-02', 1, 1, 1, 0, 1, 16, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011602-03', 1, 1, 1, 0, 1, 16, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011603-01', 1, 1, 1, 0, 1, 16, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011603-02', 1, 1, 1, 0, 1, 16, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011603-03', 1, 1, 1, 0, 1, 16, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011604-01', 1, 1, 1, 0, 1, 16, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011604-02', 1, 1, 1, 0, 1, 16, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011604-03', 1, 1, 1, 0, 1, 16, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011605-01', 1, 1, 1, 0, 1, 16, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011605-02', 1, 1, 1, 0, 1, 16, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011605-03', 1, 1, 1, 0, 1, 16, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011606-01', 1, 1, 1, 0, 1, 16, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011606-02', 1, 1, 1, 0, 1, 16, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011606-03', 1, 1, 1, 0, 1, 16, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011607-01', 1, 1, 1, 0, 1, 16, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011607-02', 1, 1, 1, 0, 1, 16, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011607-03', 1, 1, 1, 0, 1, 16, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011608-01', 1, 1, 1, 0, 1, 16, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011608-02', 1, 1, 1, 0, 1, 16, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011608-03', 1, 1, 1, 0, 1, 16, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011609-01', 1, 1, 1, 0, 1, 16, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011609-02', 1, 1, 1, 0, 1, 16, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011609-03', 1, 1, 1, 0, 1, 16, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011610-01', 1, 1, 1, 0, 1, 16, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011610-02', 1, 1, 1, 0, 1, 16, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011610-03', 1, 1, 1, 0, 1, 16, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011611-01', 1, 1, 1, 0, 1, 16, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011611-02', 1, 1, 1, 0, 1, 16, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011611-03', 1, 1, 1, 0, 1, 16, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011701-01', 1, 1, 1, 0, 1, 17, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011701-02', 1, 1, 1, 0, 1, 17, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011701-03', 1, 1, 1, 0, 1, 17, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011702-01', 1, 1, 1, 0, 1, 17, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011702-02', 1, 1, 1, 0, 1, 17, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011702-03', 1, 1, 1, 0, 1, 17, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011703-01', 1, 1, 1, 0, 1, 17, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011703-02', 1, 1, 1, 0, 1, 17, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011703-03', 1, 1, 1, 0, 1, 17, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011704-01', 1, 1, 1, 0, 1, 17, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011704-02', 1, 1, 1, 0, 1, 17, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011704-03', 1, 1, 1, 0, 1, 17, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011705-01', 1, 1, 1, 0, 1, 17, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011705-02', 1, 1, 1, 0, 1, 17, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011705-03', 1, 1, 1, 0, 1, 17, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011706-01', 1, 1, 1, 0, 1, 17, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011706-02', 1, 1, 1, 0, 1, 17, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011706-03', 1, 1, 1, 0, 1, 17, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011707-01', 1, 1, 1, 0, 1, 17, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011707-02', 1, 1, 1, 0, 1, 17, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011707-03', 1, 1, 1, 0, 1, 17, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011708-01', 1, 1, 1, 0, 1, 17, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011708-02', 1, 1, 1, 0, 1, 17, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011708-03', 1, 1, 1, 0, 1, 17, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011709-01', 1, 1, 1, 0, 1, 17, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011709-02', 1, 1, 1, 0, 1, 17, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011709-03', 1, 1, 1, 0, 1, 17, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011710-01', 1, 1, 1, 0, 1, 17, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011710-02', 1, 1, 1, 0, 1, 17, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011710-03', 1, 1, 1, 0, 1, 17, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011711-01', 1, 1, 1, 0, 1, 17, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011711-02', 1, 1, 1, 0, 1, 17, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011711-03', 1, 1, 1, 0, 1, 17, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011801-01', 1, 1, 1, 0, 1, 18, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011801-02', 1, 1, 1, 0, 1, 18, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011801-03', 1, 1, 1, 0, 1, 18, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011802-01', 1, 1, 1, 0, 1, 18, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011802-02', 1, 1, 1, 0, 1, 18, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011802-03', 1, 1, 1, 0, 1, 18, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011803-01', 1, 1, 1, 0, 1, 18, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011803-02', 1, 1, 1, 0, 1, 18, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011803-03', 1, 1, 1, 0, 1, 18, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011804-01', 1, 1, 1, 0, 1, 18, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011804-02', 1, 1, 1, 0, 1, 18, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011804-03', 1, 1, 1, 0, 1, 18, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011805-01', 1, 1, 1, 0, 1, 18, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011805-02', 1, 1, 1, 0, 1, 18, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011805-03', 1, 1, 1, 0, 1, 18, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011806-01', 1, 1, 1, 0, 1, 18, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011806-02', 1, 1, 1, 0, 1, 18, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011806-03', 1, 1, 1, 0, 1, 18, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011807-01', 1, 1, 1, 0, 1, 18, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011807-02', 1, 1, 1, 0, 1, 18, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011807-03', 1, 1, 1, 0, 1, 18, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011808-01', 1, 1, 1, 0, 1, 18, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011808-02', 1, 1, 1, 0, 1, 18, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011808-03', 1, 1, 1, 0, 1, 18, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011809-01', 1, 1, 1, 0, 1, 18, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011809-02', 1, 1, 1, 0, 1, 18, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011809-03', 1, 1, 1, 0, 1, 18, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011810-01', 1, 1, 1, 0, 1, 18, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011810-02', 1, 1, 1, 0, 1, 18, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011810-03', 1, 1, 1, 0, 1, 18, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('011811-01', 1, 1, 1, 0, 1, 18, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('011811-02', 1, 1, 1, 0, 1, 18, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('011811-03', 1, 1, 1, 0, 1, 18, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('020101-01', 1, 1, 1, 0, 2, 1, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020101-02', 1, 1, 1, 0, 2, 1, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020101-03', 1, 1, 1, 0, 2, 1, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020102-01', 1, 1, 1, 0, 2, 1, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020102-02', 1, 1, 1, 0, 2, 1, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020102-03', 1, 1, 1, 0, 2, 1, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020103-01', 1, 1, 1, 0, 2, 1, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020103-02', 1, 1, 1, 0, 2, 1, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020103-03', 1, 1, 1, 0, 2, 1, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020104-01', 1, 1, 1, 0, 2, 1, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020104-02', 1, 1, 1, 0, 2, 1, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020104-03', 1, 1, 1, 0, 2, 1, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020105-01', 1, 1, 1, 0, 2, 1, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020105-02', 1, 1, 1, 0, 2, 1, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020105-03', 1, 1, 1, 0, 2, 1, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020106-01', 1, 1, 1, 0, 2, 1, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020106-02', 1, 1, 1, 0, 2, 1, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020106-03', 1, 1, 1, 0, 2, 1, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020107-01', 1, 1, 1, 0, 2, 1, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020107-02', 1, 1, 1, 0, 2, 1, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020107-03', 1, 1, 1, 0, 2, 1, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020108-01', 1, 1, 1, 0, 2, 1, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020108-02', 1, 1, 1, 0, 2, 1, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020108-03', 1, 1, 1, 0, 2, 1, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020109-01', 1, 1, 1, 0, 2, 1, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020109-02', 1, 1, 1, 0, 2, 1, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020109-03', 1, 1, 1, 0, 2, 1, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020110-01', 1, 1, 1, 0, 2, 1, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020110-02', 1, 1, 1, 0, 2, 1, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020110-03', 1, 1, 1, 0, 2, 1, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020111-01', 1, 1, 1, 0, 2, 1, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020111-02', 1, 1, 1, 0, 2, 1, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020111-03', 1, 1, 1, 0, 2, 1, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020201-01', 1, 1, 1, 0, 2, 2, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020201-02', 1, 1, 1, 0, 2, 2, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020201-03', 1, 1, 1, 0, 2, 2, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020202-01', 1, 1, 1, 0, 2, 2, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020202-02', 1, 1, 1, 0, 2, 2, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020202-03', 1, 1, 1, 0, 2, 2, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020203-01', 1, 1, 1, 0, 2, 2, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020203-02', 1, 1, 1, 0, 2, 2, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020203-03', 1, 1, 1, 0, 2, 2, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020204-01', 1, 1, 1, 0, 2, 2, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020204-02', 1, 1, 1, 0, 2, 2, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020204-03', 1, 1, 1, 0, 2, 2, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020205-01', 1, 1, 1, 0, 2, 2, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020205-02', 1, 1, 1, 0, 2, 2, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020205-03', 1, 1, 1, 0, 2, 2, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020206-01', 1, 1, 1, 0, 2, 2, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020206-02', 1, 1, 1, 0, 2, 2, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020206-03', 1, 1, 1, 0, 2, 2, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020207-01', 1, 1, 1, 0, 2, 2, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020207-02', 1, 1, 1, 0, 2, 2, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020207-03', 1, 1, 1, 0, 2, 2, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020208-01', 1, 1, 1, 0, 2, 2, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020208-02', 1, 1, 1, 0, 2, 2, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020208-03', 1, 1, 1, 0, 2, 2, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020209-01', 1, 1, 1, 0, 2, 2, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020209-02', 1, 1, 1, 0, 2, 2, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020209-03', 1, 1, 1, 0, 2, 2, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020210-01', 1, 1, 1, 0, 2, 2, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020210-02', 1, 1, 1, 0, 2, 2, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020210-03', 1, 1, 1, 0, 2, 2, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020211-01', 1, 1, 1, 0, 2, 2, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020211-02', 1, 1, 1, 0, 2, 2, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020211-03', 1, 1, 1, 0, 2, 2, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020301-01', 1, 1, 1, 0, 2, 3, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020301-02', 1, 1, 1, 0, 2, 3, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020301-03', 1, 1, 1, 0, 2, 3, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020302-01', 1, 1, 1, 0, 2, 3, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020302-02', 1, 1, 1, 0, 2, 3, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020302-03', 1, 1, 1, 0, 2, 3, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020303-01', 1, 1, 1, 0, 2, 3, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020303-02', 1, 1, 1, 0, 2, 3, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020303-03', 1, 1, 1, 0, 2, 3, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020304-01', 1, 1, 1, 0, 2, 3, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020304-02', 1, 1, 1, 0, 2, 3, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020304-03', 1, 1, 1, 0, 2, 3, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020305-01', 1, 1, 1, 0, 2, 3, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020305-02', 1, 1, 1, 0, 2, 3, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020305-03', 1, 1, 1, 0, 2, 3, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020306-01', 1, 1, 1, 0, 2, 3, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020306-02', 1, 1, 1, 0, 2, 3, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020306-03', 1, 1, 1, 0, 2, 3, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020307-01', 1, 1, 1, 0, 2, 3, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020307-02', 1, 1, 1, 0, 2, 3, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020307-03', 1, 1, 1, 0, 2, 3, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020308-01', 1, 1, 1, 0, 2, 3, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020308-02', 1, 1, 1, 0, 2, 3, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020308-03', 1, 1, 1, 0, 2, 3, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020309-01', 1, 1, 1, 0, 2, 3, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020309-02', 1, 1, 1, 0, 2, 3, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020309-03', 1, 1, 1, 0, 2, 3, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020310-01', 1, 1, 1, 0, 2, 3, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020310-02', 1, 1, 1, 0, 2, 3, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020310-03', 1, 1, 1, 0, 2, 3, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020311-01', 1, 1, 1, 0, 2, 3, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020311-02', 1, 1, 1, 0, 2, 3, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020311-03', 1, 1, 1, 0, 2, 3, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020401-01', 1, 1, 1, 0, 2, 4, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020401-02', 1, 1, 1, 0, 2, 4, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020401-03', 1, 1, 1, 0, 2, 4, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020402-01', 1, 1, 1, 0, 2, 4, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020402-02', 1, 1, 1, 0, 2, 4, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020402-03', 1, 1, 1, 0, 2, 4, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020403-01', 1, 1, 1, 0, 2, 4, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020403-02', 1, 1, 1, 0, 2, 4, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020403-03', 1, 1, 1, 0, 2, 4, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020404-01', 1, 1, 1, 0, 2, 4, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020404-02', 1, 1, 1, 0, 2, 4, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020404-03', 1, 1, 1, 0, 2, 4, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020405-01', 1, 1, 1, 0, 2, 4, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020405-02', 1, 1, 1, 0, 2, 4, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020405-03', 1, 1, 1, 0, 2, 4, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020406-01', 1, 1, 1, 0, 2, 4, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020406-02', 1, 1, 1, 0, 2, 4, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020406-03', 1, 1, 1, 0, 2, 4, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020407-01', 1, 1, 1, 0, 2, 4, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020407-02', 1, 1, 1, 0, 2, 4, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020407-03', 1, 1, 1, 0, 2, 4, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020408-01', 1, 1, 1, 0, 2, 4, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020408-02', 1, 1, 1, 0, 2, 4, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020408-03', 1, 1, 1, 0, 2, 4, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020409-01', 1, 1, 1, 0, 2, 4, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020409-02', 1, 1, 1, 0, 2, 4, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020409-03', 1, 1, 1, 0, 2, 4, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020410-01', 1, 1, 1, 0, 2, 4, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020410-02', 1, 1, 1, 0, 2, 4, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020410-03', 1, 1, 1, 0, 2, 4, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020411-01', 1, 1, 1, 0, 2, 4, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020411-02', 1, 1, 1, 0, 2, 4, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020411-03', 1, 1, 1, 0, 2, 4, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020501-01', 1, 1, 1, 0, 2, 5, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020501-02', 1, 1, 1, 0, 2, 5, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020501-03', 1, 1, 1, 0, 2, 5, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020502-01', 1, 1, 1, 0, 2, 5, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020502-02', 1, 1, 1, 0, 2, 5, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020502-03', 1, 1, 1, 0, 2, 5, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020503-01', 1, 1, 1, 0, 2, 5, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020503-02', 1, 1, 1, 0, 2, 5, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020503-03', 1, 1, 1, 0, 2, 5, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020504-01', 1, 1, 1, 0, 2, 5, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020504-02', 1, 1, 1, 0, 2, 5, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020504-03', 1, 1, 1, 0, 2, 5, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020505-01', 1, 1, 1, 0, 2, 5, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020505-02', 1, 1, 1, 0, 2, 5, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020505-03', 1, 1, 1, 0, 2, 5, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020506-01', 1, 1, 1, 0, 2, 5, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020506-02', 1, 1, 1, 0, 2, 5, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020506-03', 1, 1, 1, 0, 2, 5, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020507-01', 1, 1, 1, 0, 2, 5, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020507-02', 1, 1, 1, 0, 2, 5, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020507-03', 1, 1, 1, 0, 2, 5, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020508-01', 1, 1, 1, 0, 2, 5, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020508-02', 1, 1, 1, 0, 2, 5, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020508-03', 1, 1, 1, 0, 2, 5, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020509-01', 1, 1, 1, 0, 2, 5, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020509-02', 1, 1, 1, 0, 2, 5, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020509-03', 1, 1, 1, 0, 2, 5, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020510-01', 1, 1, 1, 0, 2, 5, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020510-02', 1, 1, 1, 0, 2, 5, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020510-03', 1, 1, 1, 0, 2, 5, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020511-01', 1, 1, 1, 0, 2, 5, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020511-02', 1, 1, 1, 0, 2, 5, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020511-03', 1, 1, 1, 0, 2, 5, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020601-01', 1, 1, 1, 0, 2, 6, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020601-02', 1, 1, 1, 0, 2, 6, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020601-03', 1, 1, 1, 0, 2, 6, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020602-01', 1, 1, 1, 0, 2, 6, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020602-02', 1, 1, 1, 0, 2, 6, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020602-03', 1, 1, 1, 0, 2, 6, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020603-01', 1, 1, 1, 0, 2, 6, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020603-02', 1, 1, 1, 0, 2, 6, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020603-03', 1, 1, 1, 0, 2, 6, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020604-01', 1, 1, 1, 0, 2, 6, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020604-02', 1, 1, 1, 0, 2, 6, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020604-03', 1, 1, 1, 0, 2, 6, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020605-01', 1, 1, 1, 0, 2, 6, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020605-02', 1, 1, 1, 0, 2, 6, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020605-03', 1, 1, 1, 0, 2, 6, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020606-01', 1, 1, 1, 0, 2, 6, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020606-02', 1, 1, 1, 0, 2, 6, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020606-03', 1, 1, 1, 0, 2, 6, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020607-01', 1, 1, 1, 0, 2, 6, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020607-02', 1, 1, 1, 0, 2, 6, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020607-03', 1, 1, 1, 0, 2, 6, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020608-01', 1, 1, 1, 0, 2, 6, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020608-02', 1, 1, 1, 0, 2, 6, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020608-03', 1, 1, 1, 0, 2, 6, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020609-01', 1, 1, 1, 0, 2, 6, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020609-02', 1, 1, 1, 0, 2, 6, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020609-03', 1, 1, 1, 0, 2, 6, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020610-01', 1, 1, 1, 0, 2, 6, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020610-02', 1, 1, 1, 0, 2, 6, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020610-03', 1, 1, 1, 0, 2, 6, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020611-01', 1, 1, 1, 0, 2, 6, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020611-02', 1, 1, 1, 0, 2, 6, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020611-03', 1, 1, 1, 0, 2, 6, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020701-01', 1, 1, 1, 0, 2, 7, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020701-02', 1, 1, 1, 0, 2, 7, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020701-03', 1, 1, 1, 0, 2, 7, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020702-01', 1, 1, 1, 0, 2, 7, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020702-02', 1, 1, 1, 0, 2, 7, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020702-03', 1, 1, 1, 0, 2, 7, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020703-01', 1, 1, 1, 0, 2, 7, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020703-02', 1, 1, 1, 0, 2, 7, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020703-03', 1, 1, 1, 0, 2, 7, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020704-01', 1, 1, 1, 0, 2, 7, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020704-02', 1, 1, 1, 0, 2, 7, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020704-03', 1, 1, 1, 0, 2, 7, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020705-01', 1, 1, 1, 0, 2, 7, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020705-02', 1, 1, 1, 0, 2, 7, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020705-03', 1, 1, 1, 0, 2, 7, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020706-01', 1, 1, 1, 0, 2, 7, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020706-02', 1, 1, 1, 0, 2, 7, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020706-03', 1, 1, 1, 0, 2, 7, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020707-01', 1, 1, 1, 0, 2, 7, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020707-02', 1, 1, 1, 0, 2, 7, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020707-03', 1, 1, 1, 0, 2, 7, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020708-01', 1, 1, 1, 0, 2, 7, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020708-02', 1, 1, 1, 0, 2, 7, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020708-03', 1, 1, 1, 0, 2, 7, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020709-01', 1, 1, 1, 0, 2, 7, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020709-02', 1, 1, 1, 0, 2, 7, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020709-03', 1, 1, 1, 0, 2, 7, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020710-01', 1, 1, 1, 0, 2, 7, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020710-02', 1, 1, 1, 0, 2, 7, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020710-03', 1, 1, 1, 0, 2, 7, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020711-01', 1, 1, 1, 0, 2, 7, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020711-02', 1, 1, 1, 0, 2, 7, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020711-03', 1, 1, 1, 0, 2, 7, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020801-01', 1, 1, 1, 0, 2, 8, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020801-02', 1, 1, 1, 0, 2, 8, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020801-03', 1, 1, 1, 0, 2, 8, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020802-01', 1, 1, 1, 0, 2, 8, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020802-02', 1, 1, 1, 0, 2, 8, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020802-03', 1, 1, 1, 0, 2, 8, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020803-01', 1, 1, 1, 0, 2, 8, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020803-02', 1, 1, 1, 0, 2, 8, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020803-03', 1, 1, 1, 0, 2, 8, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020804-01', 1, 1, 1, 0, 2, 8, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020804-02', 1, 1, 1, 0, 2, 8, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020804-03', 1, 1, 1, 0, 2, 8, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020805-01', 1, 1, 1, 0, 2, 8, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020805-02', 1, 1, 1, 0, 2, 8, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020805-03', 1, 1, 1, 0, 2, 8, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020806-01', 1, 1, 1, 0, 2, 8, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020806-02', 1, 1, 1, 0, 2, 8, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020806-03', 1, 1, 1, 0, 2, 8, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020807-01', 1, 1, 1, 0, 2, 8, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020807-02', 1, 1, 1, 0, 2, 8, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020807-03', 1, 1, 1, 0, 2, 8, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020808-01', 1, 1, 1, 0, 2, 8, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020808-02', 1, 1, 1, 0, 2, 8, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020808-03', 1, 1, 1, 0, 2, 8, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020809-01', 1, 1, 1, 0, 2, 8, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020809-02', 1, 1, 1, 0, 2, 8, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020809-03', 1, 1, 1, 0, 2, 8, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020810-01', 1, 1, 1, 0, 2, 8, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020810-02', 1, 1, 1, 0, 2, 8, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020810-03', 1, 1, 1, 0, 2, 8, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020811-01', 1, 1, 1, 0, 2, 8, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020811-02', 1, 1, 1, 0, 2, 8, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020811-03', 1, 1, 1, 0, 2, 8, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020901-01', 1, 1, 1, 0, 2, 9, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020901-02', 1, 1, 1, 0, 2, 9, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020901-03', 1, 1, 1, 0, 2, 9, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020902-01', 1, 1, 1, 0, 2, 9, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020902-02', 1, 1, 1, 0, 2, 9, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020902-03', 1, 1, 1, 0, 2, 9, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020903-01', 1, 1, 1, 0, 2, 9, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020903-02', 1, 1, 1, 0, 2, 9, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020903-03', 1, 1, 1, 0, 2, 9, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020904-01', 1, 1, 1, 0, 2, 9, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020904-02', 1, 1, 1, 0, 2, 9, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020904-03', 1, 1, 1, 0, 2, 9, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020905-01', 1, 1, 1, 0, 2, 9, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020905-02', 1, 1, 1, 0, 2, 9, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020905-03', 1, 1, 1, 0, 2, 9, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020906-01', 1, 1, 1, 0, 2, 9, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020906-02', 1, 1, 1, 0, 2, 9, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020906-03', 1, 1, 1, 0, 2, 9, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020907-01', 1, 1, 1, 0, 2, 9, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020907-02', 1, 1, 1, 0, 2, 9, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020907-03', 1, 1, 1, 0, 2, 9, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020908-01', 1, 1, 1, 0, 2, 9, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020908-02', 1, 1, 1, 0, 2, 9, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020908-03', 1, 1, 1, 0, 2, 9, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020909-01', 1, 1, 1, 0, 2, 9, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020909-02', 1, 1, 1, 0, 2, 9, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020909-03', 1, 1, 1, 0, 2, 9, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020910-01', 1, 1, 1, 0, 2, 9, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020910-02', 1, 1, 1, 0, 2, 9, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020910-03', 1, 1, 1, 0, 2, 9, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('020911-01', 1, 1, 1, 0, 2, 9, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('020911-02', 1, 1, 1, 0, 2, 9, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('020911-03', 1, 1, 1, 0, 2, 9, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021001-01', 1, 1, 1, 0, 2, 10, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021001-02', 1, 1, 1, 0, 2, 10, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021001-03', 1, 1, 1, 0, 2, 10, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021002-01', 1, 1, 1, 0, 2, 10, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021002-02', 1, 1, 1, 0, 2, 10, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021002-03', 1, 1, 1, 0, 2, 10, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021003-01', 1, 1, 1, 0, 2, 10, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021003-02', 1, 1, 1, 0, 2, 10, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021003-03', 1, 1, 1, 0, 2, 10, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021004-01', 1, 1, 1, 0, 2, 10, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021004-02', 1, 1, 1, 0, 2, 10, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021004-03', 1, 1, 1, 0, 2, 10, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021005-01', 1, 1, 1, 0, 2, 10, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021005-02', 1, 1, 1, 0, 2, 10, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021005-03', 1, 1, 1, 0, 2, 10, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021006-01', 1, 1, 1, 0, 2, 10, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021006-02', 1, 1, 1, 0, 2, 10, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021006-03', 1, 1, 1, 0, 2, 10, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021007-01', 1, 1, 1, 0, 2, 10, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021007-02', 1, 1, 1, 0, 2, 10, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021007-03', 1, 1, 1, 0, 2, 10, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021008-01', 1, 1, 1, 0, 2, 10, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021008-02', 1, 1, 1, 0, 2, 10, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021008-03', 1, 1, 1, 0, 2, 10, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021009-01', 1, 1, 1, 0, 2, 10, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021009-02', 1, 1, 1, 0, 2, 10, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021009-03', 1, 1, 1, 0, 2, 10, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021010-01', 1, 1, 1, 0, 2, 10, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021010-02', 1, 1, 1, 0, 2, 10, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021010-03', 1, 1, 1, 0, 2, 10, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021011-01', 1, 1, 1, 0, 2, 10, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021011-02', 1, 1, 1, 0, 2, 10, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021011-03', 1, 1, 1, 0, 2, 10, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021101-01', 1, 1, 1, 0, 2, 11, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021101-02', 1, 1, 1, 0, 2, 11, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021101-03', 1, 1, 1, 0, 2, 11, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021102-01', 1, 1, 1, 0, 2, 11, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021102-02', 1, 1, 1, 0, 2, 11, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021102-03', 1, 1, 1, 0, 2, 11, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021103-01', 1, 1, 1, 0, 2, 11, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021103-02', 1, 1, 1, 0, 2, 11, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021103-03', 1, 1, 1, 0, 2, 11, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021104-01', 1, 1, 1, 0, 2, 11, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021104-02', 1, 1, 1, 0, 2, 11, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021104-03', 1, 1, 1, 0, 2, 11, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021105-01', 1, 1, 1, 0, 2, 11, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021105-02', 1, 1, 1, 0, 2, 11, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021105-03', 1, 1, 1, 0, 2, 11, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021106-01', 1, 1, 1, 0, 2, 11, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021106-02', 1, 1, 1, 0, 2, 11, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021106-03', 1, 1, 1, 0, 2, 11, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021107-01', 1, 1, 1, 0, 2, 11, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021107-02', 1, 1, 1, 0, 2, 11, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021107-03', 1, 1, 1, 0, 2, 11, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021108-01', 1, 1, 1, 0, 2, 11, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021108-02', 1, 1, 1, 0, 2, 11, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021108-03', 1, 1, 1, 0, 2, 11, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021109-01', 1, 1, 1, 0, 2, 11, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021109-02', 1, 1, 1, 0, 2, 11, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021109-03', 1, 1, 1, 0, 2, 11, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021110-01', 1, 1, 1, 0, 2, 11, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021110-02', 1, 1, 1, 0, 2, 11, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021110-03', 1, 1, 1, 0, 2, 11, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021111-01', 1, 1, 1, 0, 2, 11, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021111-02', 1, 1, 1, 0, 2, 11, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021111-03', 1, 1, 1, 0, 2, 11, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021201-01', 1, 1, 1, 0, 2, 12, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021201-02', 1, 1, 1, 0, 2, 12, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021201-03', 1, 1, 1, 0, 2, 12, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021202-01', 1, 1, 1, 0, 2, 12, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021202-02', 1, 1, 1, 0, 2, 12, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021202-03', 1, 1, 1, 0, 2, 12, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021203-01', 1, 1, 1, 0, 2, 12, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021203-02', 1, 1, 1, 0, 2, 12, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021203-03', 1, 1, 1, 0, 2, 12, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021204-01', 1, 1, 1, 0, 2, 12, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021204-02', 1, 1, 1, 0, 2, 12, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021204-03', 1, 1, 1, 0, 2, 12, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021205-01', 1, 1, 1, 0, 2, 12, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021205-02', 1, 1, 1, 0, 2, 12, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021205-03', 1, 1, 1, 0, 2, 12, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021206-01', 1, 1, 1, 0, 2, 12, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021206-02', 1, 1, 1, 0, 2, 12, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021206-03', 1, 1, 1, 0, 2, 12, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021207-01', 1, 1, 1, 0, 2, 12, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021207-02', 1, 1, 1, 0, 2, 12, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021207-03', 1, 1, 1, 0, 2, 12, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021208-01', 1, 1, 1, 0, 2, 12, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021208-02', 1, 1, 1, 0, 2, 12, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021208-03', 1, 1, 1, 0, 2, 12, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021209-01', 1, 1, 1, 0, 2, 12, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021209-02', 1, 1, 1, 0, 2, 12, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021209-03', 1, 1, 1, 0, 2, 12, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021210-01', 1, 1, 1, 0, 2, 12, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021210-02', 1, 1, 1, 0, 2, 12, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021210-03', 1, 1, 1, 0, 2, 12, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021211-01', 1, 1, 1, 0, 2, 12, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021211-02', 1, 1, 1, 0, 2, 12, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021211-03', 1, 1, 1, 0, 2, 12, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021301-01', 1, 1, 1, 0, 2, 13, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021301-02', 1, 1, 1, 0, 2, 13, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021301-03', 1, 1, 1, 0, 2, 13, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021302-01', 1, 1, 1, 0, 2, 13, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021302-02', 1, 1, 1, 0, 2, 13, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021302-03', 1, 1, 1, 0, 2, 13, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021303-01', 1, 1, 1, 0, 2, 13, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021303-02', 1, 1, 1, 0, 2, 13, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021303-03', 1, 1, 1, 0, 2, 13, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021304-01', 1, 1, 1, 0, 2, 13, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021304-02', 1, 1, 1, 0, 2, 13, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021304-03', 1, 1, 1, 0, 2, 13, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021305-01', 1, 1, 1, 0, 2, 13, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021305-02', 1, 1, 1, 0, 2, 13, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021305-03', 1, 1, 1, 0, 2, 13, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021306-01', 1, 1, 1, 0, 2, 13, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021306-02', 1, 1, 1, 0, 2, 13, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021306-03', 1, 1, 1, 0, 2, 13, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021307-01', 1, 1, 1, 0, 2, 13, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021307-02', 1, 1, 1, 0, 2, 13, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021307-03', 1, 1, 1, 0, 2, 13, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021308-01', 1, 1, 1, 0, 2, 13, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021308-02', 1, 1, 1, 0, 2, 13, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021308-03', 1, 1, 1, 0, 2, 13, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021309-01', 1, 1, 1, 0, 2, 13, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021309-02', 1, 1, 1, 0, 2, 13, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021309-03', 1, 1, 1, 0, 2, 13, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021310-01', 1, 1, 1, 0, 2, 13, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021310-02', 1, 1, 1, 0, 2, 13, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021310-03', 1, 1, 1, 0, 2, 13, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021311-01', 1, 1, 1, 0, 2, 13, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021311-02', 1, 1, 1, 0, 2, 13, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021311-03', 1, 1, 1, 0, 2, 13, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021401-01', 1, 1, 1, 0, 2, 14, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021401-02', 1, 1, 1, 0, 2, 14, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021401-03', 1, 1, 1, 0, 2, 14, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021402-01', 1, 1, 1, 0, 2, 14, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021402-02', 1, 1, 1, 0, 2, 14, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021402-03', 1, 1, 1, 0, 2, 14, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021403-01', 1, 1, 1, 0, 2, 14, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021403-02', 1, 1, 1, 0, 2, 14, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021403-03', 1, 1, 1, 0, 2, 14, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021404-01', 1, 1, 1, 0, 2, 14, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021404-02', 1, 1, 1, 0, 2, 14, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021404-03', 1, 1, 1, 0, 2, 14, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021405-01', 1, 1, 1, 0, 2, 14, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021405-02', 1, 1, 1, 0, 2, 14, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021405-03', 1, 1, 1, 0, 2, 14, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021406-01', 1, 1, 1, 0, 2, 14, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021406-02', 1, 1, 1, 0, 2, 14, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021406-03', 1, 1, 1, 0, 2, 14, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021407-01', 1, 1, 1, 0, 2, 14, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021407-02', 1, 1, 1, 0, 2, 14, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021407-03', 1, 1, 1, 0, 2, 14, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021408-01', 1, 1, 1, 0, 2, 14, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021408-02', 1, 1, 1, 0, 2, 14, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021408-03', 1, 1, 1, 0, 2, 14, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021409-01', 1, 1, 1, 0, 2, 14, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021409-02', 1, 1, 1, 0, 2, 14, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021409-03', 1, 1, 1, 0, 2, 14, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021410-01', 1, 1, 1, 0, 2, 14, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021410-02', 1, 1, 1, 0, 2, 14, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021410-03', 1, 1, 1, 0, 2, 14, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021411-01', 1, 1, 1, 0, 2, 14, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021411-02', 1, 1, 1, 0, 2, 14, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021411-03', 1, 1, 1, 0, 2, 14, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021501-01', 1, 1, 1, 0, 2, 15, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021501-02', 1, 1, 1, 0, 2, 15, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021501-03', 1, 1, 1, 0, 2, 15, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021502-01', 1, 1, 1, 0, 2, 15, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021502-02', 1, 1, 1, 0, 2, 15, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021502-03', 1, 1, 1, 0, 2, 15, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021503-01', 1, 1, 1, 0, 2, 15, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021503-02', 1, 1, 1, 0, 2, 15, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021503-03', 1, 1, 1, 0, 2, 15, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021504-01', 1, 1, 1, 0, 2, 15, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021504-02', 1, 1, 1, 0, 2, 15, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021504-03', 1, 1, 1, 0, 2, 15, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021505-01', 1, 1, 1, 0, 2, 15, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021505-02', 1, 1, 1, 0, 2, 15, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021505-03', 1, 1, 1, 0, 2, 15, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021506-01', 1, 1, 1, 0, 2, 15, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021506-02', 1, 1, 1, 0, 2, 15, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021506-03', 1, 1, 1, 0, 2, 15, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021507-01', 1, 1, 1, 0, 2, 15, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021507-02', 1, 1, 1, 0, 2, 15, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021507-03', 1, 1, 1, 0, 2, 15, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021508-01', 1, 1, 1, 0, 2, 15, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021508-02', 1, 1, 1, 0, 2, 15, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021508-03', 1, 1, 1, 0, 2, 15, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021509-01', 1, 1, 1, 0, 2, 15, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021509-02', 1, 1, 1, 0, 2, 15, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021509-03', 1, 1, 1, 0, 2, 15, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021510-01', 1, 1, 1, 0, 2, 15, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021510-02', 1, 1, 1, 0, 2, 15, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021510-03', 1, 1, 1, 0, 2, 15, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021511-01', 1, 1, 1, 0, 2, 15, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021511-02', 1, 1, 1, 0, 2, 15, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021511-03', 1, 1, 1, 0, 2, 15, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021601-01', 1, 1, 1, 0, 2, 16, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021601-02', 1, 1, 1, 0, 2, 16, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021601-03', 1, 1, 1, 0, 2, 16, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021602-01', 1, 1, 1, 0, 2, 16, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021602-02', 1, 1, 1, 0, 2, 16, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021602-03', 1, 1, 1, 0, 2, 16, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021603-01', 1, 1, 1, 0, 2, 16, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021603-02', 1, 1, 1, 0, 2, 16, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021603-03', 1, 1, 1, 0, 2, 16, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021604-01', 1, 1, 1, 0, 2, 16, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021604-02', 1, 1, 1, 0, 2, 16, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021604-03', 1, 1, 1, 0, 2, 16, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021605-01', 1, 1, 1, 0, 2, 16, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021605-02', 1, 1, 1, 0, 2, 16, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021605-03', 1, 1, 1, 0, 2, 16, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021606-01', 1, 1, 1, 0, 2, 16, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021606-02', 1, 1, 1, 0, 2, 16, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021606-03', 1, 1, 1, 0, 2, 16, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021607-01', 1, 1, 1, 0, 2, 16, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021607-02', 1, 1, 1, 0, 2, 16, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021607-03', 1, 1, 1, 0, 2, 16, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021608-01', 1, 1, 1, 0, 2, 16, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021608-02', 1, 1, 1, 0, 2, 16, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021608-03', 1, 1, 1, 0, 2, 16, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021609-01', 1, 1, 1, 0, 2, 16, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021609-02', 1, 1, 1, 0, 2, 16, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021609-03', 1, 1, 1, 0, 2, 16, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021610-01', 1, 1, 1, 0, 2, 16, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021610-02', 1, 1, 1, 0, 2, 16, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021610-03', 1, 1, 1, 0, 2, 16, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021611-01', 1, 1, 1, 0, 2, 16, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021611-02', 1, 1, 1, 0, 2, 16, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021611-03', 1, 1, 1, 0, 2, 16, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021701-01', 1, 1, 1, 0, 2, 17, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021701-02', 1, 1, 1, 0, 2, 17, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021701-03', 1, 1, 1, 0, 2, 17, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021702-01', 1, 1, 1, 0, 2, 17, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021702-02', 1, 1, 1, 0, 2, 17, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021702-03', 1, 1, 1, 0, 2, 17, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021703-01', 1, 1, 1, 0, 2, 17, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021703-02', 1, 1, 1, 0, 2, 17, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021703-03', 1, 1, 1, 0, 2, 17, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021704-01', 1, 1, 1, 0, 2, 17, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021704-02', 1, 1, 1, 0, 2, 17, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021704-03', 1, 1, 1, 0, 2, 17, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021705-01', 1, 1, 1, 0, 2, 17, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021705-02', 1, 1, 1, 0, 2, 17, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021705-03', 1, 1, 1, 0, 2, 17, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021706-01', 1, 1, 1, 0, 2, 17, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021706-02', 1, 1, 1, 0, 2, 17, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021706-03', 1, 1, 1, 0, 2, 17, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021707-01', 1, 1, 1, 0, 2, 17, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021707-02', 1, 1, 1, 0, 2, 17, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021707-03', 1, 1, 1, 0, 2, 17, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021708-01', 1, 1, 1, 0, 2, 17, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021708-02', 1, 1, 1, 0, 2, 17, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021708-03', 1, 1, 1, 0, 2, 17, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021709-01', 1, 1, 1, 0, 2, 17, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021709-02', 1, 1, 1, 0, 2, 17, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021709-03', 1, 1, 1, 0, 2, 17, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021710-01', 1, 1, 1, 0, 2, 17, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021710-02', 1, 1, 1, 0, 2, 17, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021710-03', 1, 1, 1, 0, 2, 17, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021711-01', 1, 1, 1, 0, 2, 17, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021711-02', 1, 1, 1, 0, 2, 17, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021711-03', 1, 1, 1, 0, 2, 17, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021801-01', 1, 1, 1, 0, 2, 18, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021801-02', 1, 1, 1, 0, 2, 18, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021801-03', 1, 1, 1, 0, 2, 18, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021802-01', 1, 1, 1, 0, 2, 18, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021802-02', 1, 1, 1, 0, 2, 18, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021802-03', 1, 1, 1, 0, 2, 18, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021803-01', 1, 1, 1, 0, 2, 18, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021803-02', 1, 1, 1, 0, 2, 18, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021803-03', 1, 1, 1, 0, 2, 18, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021804-01', 1, 1, 1, 0, 2, 18, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021804-02', 1, 1, 1, 0, 2, 18, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021804-03', 1, 1, 1, 0, 2, 18, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021805-01', 1, 1, 1, 0, 2, 18, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021805-02', 1, 1, 1, 0, 2, 18, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021805-03', 1, 1, 1, 0, 2, 18, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021806-01', 1, 1, 1, 0, 2, 18, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021806-02', 1, 1, 1, 0, 2, 18, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021806-03', 1, 1, 1, 0, 2, 18, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021807-01', 1, 1, 1, 0, 2, 18, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021807-02', 1, 1, 1, 0, 2, 18, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021807-03', 1, 1, 1, 0, 2, 18, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021808-01', 1, 1, 1, 0, 2, 18, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021808-02', 1, 1, 1, 0, 2, 18, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021808-03', 1, 1, 1, 0, 2, 18, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021809-01', 1, 1, 1, 0, 2, 18, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021809-02', 1, 1, 1, 0, 2, 18, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021809-03', 1, 1, 1, 0, 2, 18, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021810-01', 1, 1, 1, 0, 2, 18, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021810-02', 1, 1, 1, 0, 2, 18, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021810-03', 1, 1, 1, 0, 2, 18, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('021811-01', 1, 1, 1, 0, 2, 18, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('021811-02', 1, 1, 1, 0, 2, 18, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('021811-03', 1, 1, 1, 0, 2, 18, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030101-01', 1, 2, 2, 0, 3, 1, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030101-02', 1, 2, 2, 0, 3, 1, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030101-03', 1, 2, 2, 0, 3, 1, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030102-01', 1, 2, 2, 0, 3, 1, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030102-02', 1, 2, 2, 0, 3, 1, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030102-03', 1, 2, 2, 0, 3, 1, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030103-01', 1, 2, 2, 0, 3, 1, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030103-02', 1, 2, 2, 0, 3, 1, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030103-03', 1, 2, 2, 0, 3, 1, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030104-01', 1, 2, 2, 0, 3, 1, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030104-02', 1, 2, 2, 0, 3, 1, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030104-03', 1, 2, 2, 0, 3, 1, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030105-01', 1, 2, 2, 0, 3, 1, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030105-02', 1, 2, 2, 0, 3, 1, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030105-03', 1, 2, 2, 0, 3, 1, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030106-01', 1, 2, 2, 0, 3, 1, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030106-02', 1, 2, 2, 0, 3, 1, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030106-03', 1, 2, 2, 0, 3, 1, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030107-01', 1, 2, 2, 0, 3, 1, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030107-02', 1, 2, 2, 0, 3, 1, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030107-03', 1, 2, 2, 0, 3, 1, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030108-01', 1, 2, 2, 0, 3, 1, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030108-02', 1, 2, 2, 0, 3, 1, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030108-03', 1, 2, 2, 0, 3, 1, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030109-01', 1, 2, 2, 0, 3, 1, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030109-02', 1, 2, 2, 0, 3, 1, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030109-03', 1, 2, 2, 0, 3, 1, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030110-01', 1, 2, 2, 0, 3, 1, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030110-02', 1, 2, 2, 0, 3, 1, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030110-03', 1, 2, 2, 0, 3, 1, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030111-01', 1, 2, 2, 0, 3, 1, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030111-02', 1, 2, 2, 0, 3, 1, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030111-03', 1, 2, 2, 0, 3, 1, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030201-01', 1, 2, 2, 0, 3, 2, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030201-02', 1, 2, 2, 0, 3, 2, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030201-03', 1, 2, 2, 0, 3, 2, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030202-01', 1, 2, 2, 0, 3, 2, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030202-02', 1, 2, 2, 0, 3, 2, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030202-03', 1, 2, 2, 0, 3, 2, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030203-01', 1, 2, 2, 0, 3, 2, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030203-02', 1, 2, 2, 0, 3, 2, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030203-03', 1, 2, 2, 0, 3, 2, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030204-01', 1, 2, 2, 0, 3, 2, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030204-02', 1, 2, 2, 0, 3, 2, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030204-03', 1, 2, 2, 0, 3, 2, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030205-01', 1, 2, 2, 0, 3, 2, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030205-02', 1, 2, 2, 0, 3, 2, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030205-03', 1, 2, 2, 0, 3, 2, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030206-01', 1, 2, 2, 0, 3, 2, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030206-02', 1, 2, 2, 0, 3, 2, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030206-03', 1, 2, 2, 0, 3, 2, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030207-01', 1, 2, 2, 0, 3, 2, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030207-02', 1, 2, 2, 0, 3, 2, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030207-03', 1, 2, 2, 0, 3, 2, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030208-01', 1, 2, 2, 0, 3, 2, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030208-02', 1, 2, 2, 0, 3, 2, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030208-03', 1, 2, 2, 0, 3, 2, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030209-01', 1, 2, 2, 0, 3, 2, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030209-02', 1, 2, 2, 0, 3, 2, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030209-03', 1, 2, 2, 0, 3, 2, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030210-01', 1, 2, 2, 0, 3, 2, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030210-02', 1, 2, 2, 0, 3, 2, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030210-03', 1, 2, 2, 0, 3, 2, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030211-01', 1, 2, 2, 0, 3, 2, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030211-02', 1, 2, 2, 0, 3, 2, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030211-03', 1, 2, 2, 0, 3, 2, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030301-01', 1, 2, 2, 0, 3, 3, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030301-02', 1, 2, 2, 0, 3, 3, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030301-03', 1, 2, 2, 0, 3, 3, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030302-01', 1, 2, 2, 0, 3, 3, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030302-02', 1, 2, 2, 0, 3, 3, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030302-03', 1, 2, 2, 0, 3, 3, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030303-01', 1, 2, 2, 0, 3, 3, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030303-02', 1, 2, 2, 0, 3, 3, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030303-03', 1, 2, 2, 0, 3, 3, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030304-01', 1, 2, 2, 0, 3, 3, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030304-02', 1, 2, 2, 0, 3, 3, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030304-03', 1, 2, 2, 0, 3, 3, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030305-01', 1, 2, 2, 0, 3, 3, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030305-02', 1, 2, 2, 0, 3, 3, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030305-03', 1, 2, 2, 0, 3, 3, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030306-01', 1, 2, 2, 0, 3, 3, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030306-02', 1, 2, 2, 0, 3, 3, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030306-03', 1, 2, 2, 0, 3, 3, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030307-01', 1, 2, 2, 0, 3, 3, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030307-02', 1, 2, 2, 0, 3, 3, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030307-03', 1, 2, 2, 0, 3, 3, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030308-01', 1, 2, 2, 0, 3, 3, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030308-02', 1, 2, 2, 0, 3, 3, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030308-03', 1, 2, 2, 0, 3, 3, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030309-01', 1, 2, 2, 0, 3, 3, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030309-02', 1, 2, 2, 0, 3, 3, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030309-03', 1, 2, 2, 0, 3, 3, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030310-01', 1, 2, 2, 0, 3, 3, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030310-02', 1, 2, 2, 0, 3, 3, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030310-03', 1, 2, 2, 0, 3, 3, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030311-01', 1, 2, 2, 0, 3, 3, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030311-02', 1, 2, 2, 0, 3, 3, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030311-03', 1, 2, 2, 0, 3, 3, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030401-01', 1, 2, 2, 0, 3, 4, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030401-02', 1, 2, 2, 0, 3, 4, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030401-03', 1, 2, 2, 0, 3, 4, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030402-01', 1, 2, 2, 0, 3, 4, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030402-02', 1, 2, 2, 0, 3, 4, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030402-03', 1, 2, 2, 0, 3, 4, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030403-01', 1, 2, 2, 0, 3, 4, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030403-02', 1, 2, 2, 0, 3, 4, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030403-03', 1, 2, 2, 0, 3, 4, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030404-01', 1, 2, 2, 0, 3, 4, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030404-02', 1, 2, 2, 0, 3, 4, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030404-03', 1, 2, 2, 0, 3, 4, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030405-01', 1, 2, 2, 0, 3, 4, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030405-02', 1, 2, 2, 0, 3, 4, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030405-03', 1, 2, 2, 0, 3, 4, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030406-01', 1, 2, 2, 0, 3, 4, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030406-02', 1, 2, 2, 0, 3, 4, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030406-03', 1, 2, 2, 0, 3, 4, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030407-01', 1, 2, 2, 0, 3, 4, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030407-02', 1, 2, 2, 0, 3, 4, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030407-03', 1, 2, 2, 0, 3, 4, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030408-01', 1, 2, 2, 0, 3, 4, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030408-02', 1, 2, 2, 0, 3, 4, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030408-03', 1, 2, 2, 0, 3, 4, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030409-01', 1, 2, 2, 0, 3, 4, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030409-02', 1, 2, 2, 0, 3, 4, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030409-03', 1, 2, 2, 0, 3, 4, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030410-01', 1, 2, 2, 0, 3, 4, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030410-02', 1, 2, 2, 0, 3, 4, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030410-03', 1, 2, 2, 0, 3, 4, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030411-01', 1, 2, 2, 0, 3, 4, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030411-02', 1, 2, 2, 0, 3, 4, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030411-03', 1, 2, 2, 0, 3, 4, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030501-01', 1, 2, 2, 0, 3, 5, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030501-02', 1, 2, 2, 0, 3, 5, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030501-03', 1, 2, 2, 0, 3, 5, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030502-01', 1, 2, 2, 0, 3, 5, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030502-02', 1, 2, 2, 0, 3, 5, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030502-03', 1, 2, 2, 0, 3, 5, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030503-01', 1, 2, 2, 0, 3, 5, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030503-02', 1, 2, 2, 0, 3, 5, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030503-03', 1, 2, 2, 0, 3, 5, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030504-01', 1, 2, 2, 0, 3, 5, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030504-02', 1, 2, 2, 0, 3, 5, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030504-03', 1, 2, 2, 0, 3, 5, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030505-01', 1, 2, 2, 0, 3, 5, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030505-02', 1, 2, 2, 0, 3, 5, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030505-03', 1, 2, 2, 0, 3, 5, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030506-01', 1, 2, 2, 0, 3, 5, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030506-02', 1, 2, 2, 0, 3, 5, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030506-03', 1, 2, 2, 0, 3, 5, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030507-01', 1, 2, 2, 0, 3, 5, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030507-02', 1, 2, 2, 0, 3, 5, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030507-03', 1, 2, 2, 0, 3, 5, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030508-01', 1, 2, 2, 0, 3, 5, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030508-02', 1, 2, 2, 0, 3, 5, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030508-03', 1, 2, 2, 0, 3, 5, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030509-01', 1, 2, 2, 0, 3, 5, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030509-02', 1, 2, 2, 0, 3, 5, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030509-03', 1, 2, 2, 0, 3, 5, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030510-01', 1, 2, 2, 0, 3, 5, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030510-02', 1, 2, 2, 0, 3, 5, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030510-03', 1, 2, 2, 0, 3, 5, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030511-01', 1, 2, 2, 0, 3, 5, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030511-02', 1, 2, 2, 0, 3, 5, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030511-03', 1, 2, 2, 0, 3, 5, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030601-01', 1, 2, 2, 0, 3, 6, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030601-02', 1, 2, 2, 0, 3, 6, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030601-03', 1, 2, 2, 0, 3, 6, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030602-01', 1, 2, 2, 0, 3, 6, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030602-02', 1, 2, 2, 0, 3, 6, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030602-03', 1, 2, 2, 0, 3, 6, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030603-01', 1, 2, 2, 0, 3, 6, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030603-02', 1, 2, 2, 0, 3, 6, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030603-03', 1, 2, 2, 0, 3, 6, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030604-01', 1, 2, 2, 0, 3, 6, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030604-02', 1, 2, 2, 0, 3, 6, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030604-03', 1, 2, 2, 0, 3, 6, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030605-01', 1, 2, 2, 0, 3, 6, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030605-02', 1, 2, 2, 0, 3, 6, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030605-03', 1, 2, 2, 0, 3, 6, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030606-01', 1, 2, 2, 0, 3, 6, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030606-02', 1, 2, 2, 0, 3, 6, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030606-03', 1, 2, 2, 0, 3, 6, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030607-01', 1, 2, 2, 0, 3, 6, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030607-02', 1, 2, 2, 0, 3, 6, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030607-03', 1, 2, 2, 0, 3, 6, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030608-01', 1, 2, 2, 0, 3, 6, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030608-02', 1, 2, 2, 0, 3, 6, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030608-03', 1, 2, 2, 0, 3, 6, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030609-01', 1, 2, 2, 0, 3, 6, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030609-02', 1, 2, 2, 0, 3, 6, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030609-03', 1, 2, 2, 0, 3, 6, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030610-01', 1, 2, 2, 0, 3, 6, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030610-02', 1, 2, 2, 0, 3, 6, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030610-03', 1, 2, 2, 0, 3, 6, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030611-01', 1, 2, 2, 0, 3, 6, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030611-02', 1, 2, 2, 0, 3, 6, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030611-03', 1, 2, 2, 0, 3, 6, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030701-01', 1, 2, 2, 0, 3, 7, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030701-02', 1, 2, 2, 0, 3, 7, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030701-03', 1, 2, 2, 0, 3, 7, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030702-01', 1, 2, 2, 0, 3, 7, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030702-02', 1, 2, 2, 0, 3, 7, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030702-03', 1, 2, 2, 0, 3, 7, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030703-01', 1, 2, 2, 0, 3, 7, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030703-02', 1, 2, 2, 0, 3, 7, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030703-03', 1, 2, 2, 0, 3, 7, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030704-01', 1, 2, 2, 0, 3, 7, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030704-02', 1, 2, 2, 0, 3, 7, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030704-03', 1, 2, 2, 0, 3, 7, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030705-01', 1, 2, 2, 0, 3, 7, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030705-02', 1, 2, 2, 0, 3, 7, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030705-03', 1, 2, 2, 0, 3, 7, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030706-01', 1, 2, 2, 0, 3, 7, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030706-02', 1, 2, 2, 0, 3, 7, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030706-03', 1, 2, 2, 0, 3, 7, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030707-01', 1, 2, 2, 0, 3, 7, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030707-02', 1, 2, 2, 0, 3, 7, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030707-03', 1, 2, 2, 0, 3, 7, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030708-01', 1, 2, 2, 0, 3, 7, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030708-02', 1, 2, 2, 0, 3, 7, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030708-03', 1, 2, 2, 0, 3, 7, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030709-01', 1, 2, 2, 0, 3, 7, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030709-02', 1, 2, 2, 0, 3, 7, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030709-03', 1, 2, 2, 0, 3, 7, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030710-01', 1, 2, 2, 0, 3, 7, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030710-02', 1, 2, 2, 0, 3, 7, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030710-03', 1, 2, 2, 0, 3, 7, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030711-01', 1, 2, 2, 0, 3, 7, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030711-02', 1, 2, 2, 0, 3, 7, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030711-03', 1, 2, 2, 0, 3, 7, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030801-01', 1, 2, 2, 0, 3, 8, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030801-02', 1, 2, 2, 0, 3, 8, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030801-03', 1, 2, 2, 0, 3, 8, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030802-01', 1, 2, 2, 0, 3, 8, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030802-02', 1, 2, 2, 0, 3, 8, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030802-03', 1, 2, 2, 0, 3, 8, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030803-01', 1, 2, 2, 0, 3, 8, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030803-02', 1, 2, 2, 0, 3, 8, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030803-03', 1, 2, 2, 0, 3, 8, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030804-01', 1, 2, 2, 0, 3, 8, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030804-02', 1, 2, 2, 0, 3, 8, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030804-03', 1, 2, 2, 0, 3, 8, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030805-01', 1, 2, 2, 0, 3, 8, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030805-02', 1, 2, 2, 0, 3, 8, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030805-03', 1, 2, 2, 0, 3, 8, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030806-01', 1, 2, 2, 0, 3, 8, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030806-02', 1, 2, 2, 0, 3, 8, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030806-03', 1, 2, 2, 0, 3, 8, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030807-01', 1, 2, 2, 0, 3, 8, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030807-02', 1, 2, 2, 0, 3, 8, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030807-03', 1, 2, 2, 0, 3, 8, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030808-01', 1, 2, 2, 0, 3, 8, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030808-02', 1, 2, 2, 0, 3, 8, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030808-03', 1, 2, 2, 0, 3, 8, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030809-01', 1, 2, 2, 0, 3, 8, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030809-02', 1, 2, 2, 0, 3, 8, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030809-03', 1, 2, 2, 0, 3, 8, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030810-01', 1, 2, 2, 0, 3, 8, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030810-02', 1, 2, 2, 0, 3, 8, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030810-03', 1, 2, 2, 0, 3, 8, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030811-01', 1, 2, 2, 0, 3, 8, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030811-02', 1, 2, 2, 0, 3, 8, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030811-03', 1, 2, 2, 0, 3, 8, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030901-01', 1, 2, 2, 0, 3, 9, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030901-02', 1, 2, 2, 0, 3, 9, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030901-03', 1, 2, 2, 0, 3, 9, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030902-01', 1, 2, 2, 0, 3, 9, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030902-02', 1, 2, 2, 0, 3, 9, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030902-03', 1, 2, 2, 0, 3, 9, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030903-01', 1, 2, 2, 0, 3, 9, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030903-02', 1, 2, 2, 0, 3, 9, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030903-03', 1, 2, 2, 0, 3, 9, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030904-01', 1, 2, 2, 0, 3, 9, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030904-02', 1, 2, 2, 0, 3, 9, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030904-03', 1, 2, 2, 0, 3, 9, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030905-01', 1, 2, 2, 0, 3, 9, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030905-02', 1, 2, 2, 0, 3, 9, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030905-03', 1, 2, 2, 0, 3, 9, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030906-01', 1, 2, 2, 0, 3, 9, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030906-02', 1, 2, 2, 0, 3, 9, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030906-03', 1, 2, 2, 0, 3, 9, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030907-01', 1, 2, 2, 0, 3, 9, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030907-02', 1, 2, 2, 0, 3, 9, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030907-03', 1, 2, 2, 0, 3, 9, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030908-01', 1, 2, 2, 0, 3, 9, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030908-02', 1, 2, 2, 0, 3, 9, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030908-03', 1, 2, 2, 0, 3, 9, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030909-01', 1, 2, 2, 0, 3, 9, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030909-02', 1, 2, 2, 0, 3, 9, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030909-03', 1, 2, 2, 0, 3, 9, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030910-01', 1, 2, 2, 0, 3, 9, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030910-02', 1, 2, 2, 0, 3, 9, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030910-03', 1, 2, 2, 0, 3, 9, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('030911-01', 1, 2, 2, 0, 3, 9, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('030911-02', 1, 2, 2, 0, 3, 9, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('030911-03', 1, 2, 2, 0, 3, 9, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031001-01', 1, 2, 2, 0, 3, 10, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031001-02', 1, 2, 2, 0, 3, 10, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031001-03', 1, 2, 2, 0, 3, 10, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031002-01', 1, 2, 2, 0, 3, 10, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031002-02', 1, 2, 2, 0, 3, 10, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031002-03', 1, 2, 2, 0, 3, 10, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031003-01', 1, 2, 2, 0, 3, 10, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031003-02', 1, 2, 2, 0, 3, 10, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031003-03', 1, 2, 2, 0, 3, 10, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031004-01', 1, 2, 2, 0, 3, 10, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031004-02', 1, 2, 2, 0, 3, 10, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031004-03', 1, 2, 2, 0, 3, 10, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031005-01', 1, 2, 2, 0, 3, 10, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031005-02', 1, 2, 2, 0, 3, 10, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031005-03', 1, 2, 2, 0, 3, 10, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031006-01', 1, 2, 2, 0, 3, 10, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031006-02', 1, 2, 2, 0, 3, 10, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031006-03', 1, 2, 2, 0, 3, 10, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031007-01', 1, 2, 2, 0, 3, 10, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031007-02', 1, 2, 2, 0, 3, 10, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031007-03', 1, 2, 2, 0, 3, 10, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031008-01', 1, 2, 2, 0, 3, 10, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031008-02', 1, 2, 2, 0, 3, 10, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031008-03', 1, 2, 2, 0, 3, 10, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031009-01', 1, 2, 2, 0, 3, 10, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031009-02', 1, 2, 2, 0, 3, 10, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031009-03', 1, 2, 2, 0, 3, 10, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031010-01', 1, 2, 2, 0, 3, 10, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031010-02', 1, 2, 2, 0, 3, 10, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031010-03', 1, 2, 2, 0, 3, 10, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031011-01', 1, 2, 2, 0, 3, 10, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031011-02', 1, 2, 2, 0, 3, 10, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031011-03', 1, 2, 2, 0, 3, 10, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031101-01', 1, 2, 2, 0, 3, 11, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031101-02', 1, 2, 2, 0, 3, 11, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031101-03', 1, 2, 2, 0, 3, 11, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031102-01', 1, 2, 2, 0, 3, 11, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031102-02', 1, 2, 2, 0, 3, 11, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031102-03', 1, 2, 2, 0, 3, 11, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031103-01', 1, 2, 2, 0, 3, 11, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031103-02', 1, 2, 2, 0, 3, 11, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031103-03', 1, 2, 2, 0, 3, 11, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031104-01', 1, 2, 2, 0, 3, 11, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031104-02', 1, 2, 2, 0, 3, 11, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031104-03', 1, 2, 2, 0, 3, 11, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031105-01', 1, 2, 2, 0, 3, 11, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031105-02', 1, 2, 2, 0, 3, 11, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031105-03', 1, 2, 2, 0, 3, 11, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031106-01', 1, 2, 2, 0, 3, 11, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031106-02', 1, 2, 2, 0, 3, 11, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031106-03', 1, 2, 2, 0, 3, 11, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031107-01', 1, 2, 2, 0, 3, 11, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031107-02', 1, 2, 2, 0, 3, 11, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031107-03', 1, 2, 2, 0, 3, 11, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031108-01', 1, 2, 2, 0, 3, 11, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031108-02', 1, 2, 2, 0, 3, 11, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031108-03', 1, 2, 2, 0, 3, 11, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031109-01', 1, 2, 2, 0, 3, 11, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031109-02', 1, 2, 2, 0, 3, 11, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031109-03', 1, 2, 2, 0, 3, 11, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031110-01', 1, 2, 2, 0, 3, 11, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031110-02', 1, 2, 2, 0, 3, 11, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031110-03', 1, 2, 2, 0, 3, 11, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031111-01', 1, 2, 2, 0, 3, 11, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031111-02', 1, 2, 2, 0, 3, 11, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031111-03', 1, 2, 2, 0, 3, 11, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031201-01', 1, 2, 2, 0, 3, 12, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031201-02', 1, 2, 2, 0, 3, 12, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031201-03', 1, 2, 2, 0, 3, 12, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031202-01', 1, 2, 2, 0, 3, 12, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031202-02', 1, 2, 2, 0, 3, 12, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031202-03', 1, 2, 2, 0, 3, 12, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031203-01', 1, 2, 2, 0, 3, 12, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031203-02', 1, 2, 2, 0, 3, 12, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031203-03', 1, 2, 2, 0, 3, 12, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031204-01', 1, 2, 2, 0, 3, 12, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031204-02', 1, 2, 2, 0, 3, 12, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031204-03', 1, 2, 2, 0, 3, 12, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031205-01', 1, 2, 2, 0, 3, 12, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031205-02', 1, 2, 2, 0, 3, 12, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031205-03', 1, 2, 2, 0, 3, 12, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031206-01', 1, 2, 2, 0, 3, 12, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031206-02', 1, 2, 2, 0, 3, 12, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031206-03', 1, 2, 2, 0, 3, 12, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031207-01', 1, 2, 2, 0, 3, 12, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031207-02', 1, 2, 2, 0, 3, 12, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031207-03', 1, 2, 2, 0, 3, 12, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031208-01', 1, 2, 2, 0, 3, 12, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031208-02', 1, 2, 2, 0, 3, 12, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031208-03', 1, 2, 2, 0, 3, 12, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031209-01', 1, 2, 2, 0, 3, 12, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031209-02', 1, 2, 2, 0, 3, 12, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031209-03', 1, 2, 2, 0, 3, 12, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031210-01', 1, 2, 2, 0, 3, 12, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031210-02', 1, 2, 2, 0, 3, 12, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031210-03', 1, 2, 2, 0, 3, 12, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031211-01', 1, 2, 2, 0, 3, 12, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031211-02', 1, 2, 2, 0, 3, 12, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031211-03', 1, 2, 2, 0, 3, 12, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031301-01', 1, 2, 2, 0, 3, 13, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031301-02', 1, 2, 2, 0, 3, 13, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031301-03', 1, 2, 2, 0, 3, 13, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031302-01', 1, 2, 2, 0, 3, 13, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031302-02', 1, 2, 2, 0, 3, 13, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031302-03', 1, 2, 2, 0, 3, 13, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031303-01', 1, 2, 2, 0, 3, 13, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031303-02', 1, 2, 2, 0, 3, 13, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031303-03', 1, 2, 2, 0, 3, 13, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031304-01', 1, 2, 2, 0, 3, 13, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031304-02', 1, 2, 2, 0, 3, 13, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031304-03', 1, 2, 2, 0, 3, 13, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031305-01', 1, 2, 2, 0, 3, 13, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031305-02', 1, 2, 2, 0, 3, 13, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031305-03', 1, 2, 2, 0, 3, 13, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031306-01', 1, 2, 2, 0, 3, 13, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031306-02', 1, 2, 2, 0, 3, 13, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031306-03', 1, 2, 2, 0, 3, 13, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031307-01', 1, 2, 2, 0, 3, 13, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031307-02', 1, 2, 2, 0, 3, 13, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031307-03', 1, 2, 2, 0, 3, 13, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031308-01', 1, 2, 2, 0, 3, 13, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031308-02', 1, 2, 2, 0, 3, 13, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031308-03', 1, 2, 2, 0, 3, 13, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031309-01', 1, 2, 2, 0, 3, 13, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031309-02', 1, 2, 2, 0, 3, 13, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031309-03', 1, 2, 2, 0, 3, 13, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031310-01', 1, 2, 2, 0, 3, 13, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031310-02', 1, 2, 2, 0, 3, 13, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031310-03', 1, 2, 2, 0, 3, 13, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031311-01', 1, 2, 2, 0, 3, 13, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031311-02', 1, 2, 2, 0, 3, 13, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031311-03', 1, 2, 2, 0, 3, 13, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031401-01', 1, 2, 2, 0, 3, 14, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031401-02', 1, 2, 2, 0, 3, 14, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031401-03', 1, 2, 2, 0, 3, 14, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031402-01', 1, 2, 2, 0, 3, 14, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031402-02', 1, 2, 2, 0, 3, 14, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031402-03', 1, 2, 2, 0, 3, 14, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031403-01', 1, 2, 2, 0, 3, 14, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031403-02', 1, 2, 2, 0, 3, 14, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031403-03', 1, 2, 2, 0, 3, 14, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031404-01', 1, 2, 2, 0, 3, 14, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031404-02', 1, 2, 2, 0, 3, 14, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031404-03', 1, 2, 2, 0, 3, 14, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031405-01', 1, 2, 2, 0, 3, 14, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031405-02', 1, 2, 2, 0, 3, 14, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031405-03', 1, 2, 2, 0, 3, 14, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031406-01', 1, 2, 2, 0, 3, 14, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031406-02', 1, 2, 2, 0, 3, 14, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031406-03', 1, 2, 2, 0, 3, 14, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031407-01', 1, 2, 2, 0, 3, 14, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031407-02', 1, 2, 2, 0, 3, 14, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031407-03', 1, 2, 2, 0, 3, 14, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031408-01', 1, 2, 2, 0, 3, 14, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031408-02', 1, 2, 2, 0, 3, 14, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031408-03', 1, 2, 2, 0, 3, 14, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031409-01', 1, 2, 2, 0, 3, 14, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031409-02', 1, 2, 2, 0, 3, 14, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031409-03', 1, 2, 2, 0, 3, 14, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031410-01', 1, 2, 2, 0, 3, 14, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031410-02', 1, 2, 2, 0, 3, 14, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031410-03', 1, 2, 2, 0, 3, 14, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031411-01', 1, 2, 2, 0, 3, 14, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031411-02', 1, 2, 2, 0, 3, 14, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031411-03', 1, 2, 2, 0, 3, 14, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031501-01', 1, 2, 2, 0, 3, 15, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031501-02', 1, 2, 2, 0, 3, 15, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031501-03', 1, 2, 2, 0, 3, 15, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031502-01', 1, 2, 2, 0, 3, 15, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031502-02', 1, 2, 2, 0, 3, 15, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031502-03', 1, 2, 2, 0, 3, 15, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031503-01', 1, 2, 2, 0, 3, 15, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031503-02', 1, 2, 2, 0, 3, 15, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031503-03', 1, 2, 2, 0, 3, 15, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031504-01', 1, 2, 2, 0, 3, 15, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031504-02', 1, 2, 2, 0, 3, 15, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031504-03', 1, 2, 2, 0, 3, 15, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031505-01', 1, 2, 2, 0, 3, 15, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031505-02', 1, 2, 2, 0, 3, 15, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031505-03', 1, 2, 2, 0, 3, 15, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031506-01', 1, 2, 2, 0, 3, 15, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031506-02', 1, 2, 2, 0, 3, 15, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031506-03', 1, 2, 2, 0, 3, 15, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031507-01', 1, 2, 2, 0, 3, 15, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031507-02', 1, 2, 2, 0, 3, 15, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031507-03', 1, 2, 2, 0, 3, 15, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031508-01', 1, 2, 2, 0, 3, 15, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031508-02', 1, 2, 2, 0, 3, 15, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031508-03', 1, 2, 2, 0, 3, 15, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031509-01', 1, 2, 2, 0, 3, 15, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031509-02', 1, 2, 2, 0, 3, 15, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031509-03', 1, 2, 2, 0, 3, 15, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031510-01', 1, 2, 2, 0, 3, 15, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031510-02', 1, 2, 2, 0, 3, 15, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031510-03', 1, 2, 2, 0, 3, 15, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031511-01', 1, 2, 2, 0, 3, 15, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031511-02', 1, 2, 2, 0, 3, 15, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031511-03', 1, 2, 2, 0, 3, 15, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031601-01', 1, 2, 2, 0, 3, 16, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031601-02', 1, 2, 2, 0, 3, 16, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031601-03', 1, 2, 2, 0, 3, 16, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031602-01', 1, 2, 2, 0, 3, 16, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031602-02', 1, 2, 2, 0, 3, 16, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031602-03', 1, 2, 2, 0, 3, 16, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031603-01', 1, 2, 2, 0, 3, 16, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031603-02', 1, 2, 2, 0, 3, 16, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031603-03', 1, 2, 2, 0, 3, 16, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031604-01', 1, 2, 2, 0, 3, 16, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031604-02', 1, 2, 2, 0, 3, 16, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031604-03', 1, 2, 2, 0, 3, 16, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031605-01', 1, 2, 2, 0, 3, 16, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031605-02', 1, 2, 2, 0, 3, 16, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031605-03', 1, 2, 2, 0, 3, 16, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031606-01', 1, 2, 2, 0, 3, 16, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031606-02', 1, 2, 2, 0, 3, 16, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031606-03', 1, 2, 2, 0, 3, 16, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031607-01', 1, 2, 2, 0, 3, 16, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031607-02', 1, 2, 2, 0, 3, 16, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031607-03', 1, 2, 2, 0, 3, 16, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031608-01', 1, 2, 2, 0, 3, 16, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031608-02', 1, 2, 2, 0, 3, 16, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031608-03', 1, 2, 2, 0, 3, 16, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031609-01', 1, 2, 2, 0, 3, 16, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031609-02', 1, 2, 2, 0, 3, 16, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031609-03', 1, 2, 2, 0, 3, 16, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031610-01', 1, 2, 2, 0, 3, 16, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031610-02', 1, 2, 2, 0, 3, 16, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031610-03', 1, 2, 2, 0, 3, 16, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031611-01', 1, 2, 2, 0, 3, 16, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031611-02', 1, 2, 2, 0, 3, 16, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031611-03', 1, 2, 2, 0, 3, 16, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031701-01', 1, 2, 2, 0, 3, 17, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031701-02', 1, 2, 2, 0, 3, 17, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031701-03', 1, 2, 2, 0, 3, 17, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031702-01', 1, 2, 2, 0, 3, 17, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031702-02', 1, 2, 2, 0, 3, 17, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031702-03', 1, 2, 2, 0, 3, 17, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031703-01', 1, 2, 2, 0, 3, 17, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031703-02', 1, 2, 2, 0, 3, 17, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031703-03', 1, 2, 2, 0, 3, 17, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031704-01', 1, 2, 2, 0, 3, 17, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031704-02', 1, 2, 2, 0, 3, 17, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031704-03', 1, 2, 2, 0, 3, 17, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031705-01', 1, 2, 2, 0, 3, 17, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031705-02', 1, 2, 2, 0, 3, 17, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031705-03', 1, 2, 2, 0, 3, 17, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031706-01', 1, 2, 2, 0, 3, 17, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031706-02', 1, 2, 2, 0, 3, 17, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031706-03', 1, 2, 2, 0, 3, 17, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031707-01', 1, 2, 2, 0, 3, 17, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031707-02', 1, 2, 2, 0, 3, 17, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031707-03', 1, 2, 2, 0, 3, 17, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031708-01', 1, 2, 2, 0, 3, 17, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031708-02', 1, 2, 2, 0, 3, 17, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031708-03', 1, 2, 2, 0, 3, 17, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031709-01', 1, 2, 2, 0, 3, 17, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031709-02', 1, 2, 2, 0, 3, 17, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031709-03', 1, 2, 2, 0, 3, 17, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031710-01', 1, 2, 2, 0, 3, 17, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031710-02', 1, 2, 2, 0, 3, 17, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031710-03', 1, 2, 2, 0, 3, 17, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031711-01', 1, 2, 2, 0, 3, 17, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031711-02', 1, 2, 2, 0, 3, 17, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031711-03', 1, 2, 2, 0, 3, 17, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031801-01', 1, 2, 2, 0, 3, 18, 1, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031801-02', 1, 2, 2, 0, 3, 18, 1, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031801-03', 1, 2, 2, 0, 3, 18, 1, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031802-01', 1, 2, 2, 0, 3, 18, 2, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031802-02', 1, 2, 2, 0, 3, 18, 2, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031802-03', 1, 2, 2, 0, 3, 18, 2, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031803-01', 1, 2, 2, 0, 3, 18, 3, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031803-02', 1, 2, 2, 0, 3, 18, 3, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031803-03', 1, 2, 2, 0, 3, 18, 3, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031804-01', 1, 2, 2, 0, 3, 18, 4, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031804-02', 1, 2, 2, 0, 3, 18, 4, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031804-03', 1, 2, 2, 0, 3, 18, 4, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031805-01', 1, 2, 2, 0, 3, 18, 5, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031805-02', 1, 2, 2, 0, 3, 18, 5, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031805-03', 1, 2, 2, 0, 3, 18, 5, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031806-01', 1, 2, 2, 0, 3, 18, 6, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031806-02', 1, 2, 2, 0, 3, 18, 6, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031806-03', 1, 2, 2, 0, 3, 18, 6, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031807-01', 1, 2, 2, 0, 3, 18, 7, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031807-02', 1, 2, 2, 0, 3, 18, 7, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031807-03', 1, 2, 2, 0, 3, 18, 7, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031808-01', 1, 2, 2, 0, 3, 18, 8, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031808-02', 1, 2, 2, 0, 3, 18, 8, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031808-03', 1, 2, 2, 0, 3, 18, 8, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031809-01', 1, 2, 2, 0, 3, 18, 9, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031809-02', 1, 2, 2, 0, 3, 18, 9, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031809-03', 1, 2, 2, 0, 3, 18, 9, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031810-01', 1, 2, 2, 0, 3, 18, 10, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031810-02', 1, 2, 2, 0, 3, 18, 10, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031810-03', 1, 2, 2, 0, 3, 18, 10, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('031811-01', 1, 2, 2, 0, 3, 18, 11, 1, 0, 0, NULL, 4); +INSERT INTO `tbl_app_location` VALUES ('031811-02', 1, 2, 2, 0, 3, 18, 11, 2, 0, 0, NULL, 5); +INSERT INTO `tbl_app_location` VALUES ('031811-03', 1, 2, 2, 0, 3, 18, 11, 3, 0, 0, NULL, 6); +INSERT INTO `tbl_app_location` VALUES ('040101-01', 1, 2, 2, 0, 4, 1, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040101-02', 1, 2, 2, 0, 4, 1, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040101-03', 1, 2, 2, 0, 4, 1, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040102-01', 1, 2, 2, 0, 4, 1, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040102-02', 1, 2, 2, 0, 4, 1, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040102-03', 1, 2, 2, 0, 4, 1, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040103-01', 1, 2, 2, 0, 4, 1, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040103-02', 1, 2, 2, 0, 4, 1, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040103-03', 1, 2, 2, 0, 4, 1, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040104-01', 1, 2, 2, 0, 4, 1, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040104-02', 1, 2, 2, 0, 4, 1, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040104-03', 1, 2, 2, 0, 4, 1, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040105-01', 1, 2, 2, 0, 4, 1, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040105-02', 1, 2, 2, 0, 4, 1, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040105-03', 1, 2, 2, 0, 4, 1, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040106-01', 1, 2, 2, 0, 4, 1, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040106-02', 1, 2, 2, 0, 4, 1, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040106-03', 1, 2, 2, 0, 4, 1, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040107-01', 1, 2, 2, 0, 4, 1, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040107-02', 1, 2, 2, 0, 4, 1, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040107-03', 1, 2, 2, 0, 4, 1, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040108-01', 1, 2, 2, 0, 4, 1, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040108-02', 1, 2, 2, 0, 4, 1, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040108-03', 1, 2, 2, 0, 4, 1, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040109-01', 1, 2, 2, 0, 4, 1, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040109-02', 1, 2, 2, 0, 4, 1, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040109-03', 1, 2, 2, 0, 4, 1, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040110-01', 1, 2, 2, 0, 4, 1, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040110-02', 1, 2, 2, 0, 4, 1, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040110-03', 1, 2, 2, 0, 4, 1, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040111-01', 1, 2, 2, 0, 4, 1, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040111-02', 1, 2, 2, 0, 4, 1, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040111-03', 1, 2, 2, 0, 4, 1, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040201-01', 1, 2, 2, 0, 4, 2, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040201-02', 1, 2, 2, 0, 4, 2, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040201-03', 1, 2, 2, 0, 4, 2, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040202-01', 1, 2, 2, 0, 4, 2, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040202-02', 1, 2, 2, 0, 4, 2, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040202-03', 1, 2, 2, 0, 4, 2, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040203-01', 1, 2, 2, 0, 4, 2, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040203-02', 1, 2, 2, 0, 4, 2, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040203-03', 1, 2, 2, 0, 4, 2, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040204-01', 1, 2, 2, 0, 4, 2, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040204-02', 1, 2, 2, 0, 4, 2, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040204-03', 1, 2, 2, 0, 4, 2, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040205-01', 1, 2, 2, 0, 4, 2, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040205-02', 1, 2, 2, 0, 4, 2, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040205-03', 1, 2, 2, 0, 4, 2, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040206-01', 1, 2, 2, 0, 4, 2, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040206-02', 1, 2, 2, 0, 4, 2, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040206-03', 1, 2, 2, 0, 4, 2, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040207-01', 1, 2, 2, 0, 4, 2, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040207-02', 1, 2, 2, 0, 4, 2, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040207-03', 1, 2, 2, 0, 4, 2, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040208-01', 1, 2, 2, 0, 4, 2, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040208-02', 1, 2, 2, 0, 4, 2, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040208-03', 1, 2, 2, 0, 4, 2, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040209-01', 1, 2, 2, 0, 4, 2, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040209-02', 1, 2, 2, 0, 4, 2, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040209-03', 1, 2, 2, 0, 4, 2, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040210-01', 1, 2, 2, 0, 4, 2, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040210-02', 1, 2, 2, 0, 4, 2, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040210-03', 1, 2, 2, 0, 4, 2, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040211-01', 1, 2, 2, 0, 4, 2, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040211-02', 1, 2, 2, 0, 4, 2, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040211-03', 1, 2, 2, 0, 4, 2, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040301-01', 1, 2, 2, 0, 4, 3, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040301-02', 1, 2, 2, 0, 4, 3, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040301-03', 1, 2, 2, 0, 4, 3, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040302-01', 1, 2, 2, 0, 4, 3, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040302-02', 1, 2, 2, 0, 4, 3, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040302-03', 1, 2, 2, 0, 4, 3, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040303-01', 1, 2, 2, 0, 4, 3, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040303-02', 1, 2, 2, 0, 4, 3, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040303-03', 1, 2, 2, 0, 4, 3, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040304-01', 1, 2, 2, 0, 4, 3, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040304-02', 1, 2, 2, 0, 4, 3, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040304-03', 1, 2, 2, 0, 4, 3, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040305-01', 1, 2, 2, 0, 4, 3, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040305-02', 1, 2, 2, 0, 4, 3, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040305-03', 1, 2, 2, 0, 4, 3, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040306-01', 1, 2, 2, 0, 4, 3, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040306-02', 1, 2, 2, 0, 4, 3, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040306-03', 1, 2, 2, 0, 4, 3, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040307-01', 1, 2, 2, 0, 4, 3, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040307-02', 1, 2, 2, 0, 4, 3, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040307-03', 1, 2, 2, 0, 4, 3, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040308-01', 1, 2, 2, 0, 4, 3, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040308-02', 1, 2, 2, 0, 4, 3, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040308-03', 1, 2, 2, 0, 4, 3, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040309-01', 1, 2, 2, 0, 4, 3, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040309-02', 1, 2, 2, 0, 4, 3, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040309-03', 1, 2, 2, 0, 4, 3, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040310-01', 1, 2, 2, 0, 4, 3, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040310-02', 1, 2, 2, 0, 4, 3, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040310-03', 1, 2, 2, 0, 4, 3, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040311-01', 1, 2, 2, 0, 4, 3, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040311-02', 1, 2, 2, 0, 4, 3, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040311-03', 1, 2, 2, 0, 4, 3, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040401-01', 1, 2, 2, 0, 4, 4, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040401-02', 1, 2, 2, 0, 4, 4, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040401-03', 1, 2, 2, 0, 4, 4, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040402-01', 1, 2, 2, 0, 4, 4, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040402-02', 1, 2, 2, 0, 4, 4, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040402-03', 1, 2, 2, 0, 4, 4, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040403-01', 1, 2, 2, 0, 4, 4, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040403-02', 1, 2, 2, 0, 4, 4, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040403-03', 1, 2, 2, 0, 4, 4, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040404-01', 1, 2, 2, 0, 4, 4, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040404-02', 1, 2, 2, 0, 4, 4, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040404-03', 1, 2, 2, 0, 4, 4, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040405-01', 1, 2, 2, 0, 4, 4, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040405-02', 1, 2, 2, 0, 4, 4, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040405-03', 1, 2, 2, 0, 4, 4, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040406-01', 1, 2, 2, 0, 4, 4, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040406-02', 1, 2, 2, 0, 4, 4, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040406-03', 1, 2, 2, 0, 4, 4, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040407-01', 1, 2, 2, 0, 4, 4, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040407-02', 1, 2, 2, 0, 4, 4, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040407-03', 1, 2, 2, 0, 4, 4, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040408-01', 1, 2, 2, 0, 4, 4, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040408-02', 1, 2, 2, 0, 4, 4, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040408-03', 1, 2, 2, 0, 4, 4, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040409-01', 1, 2, 2, 0, 4, 4, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040409-02', 1, 2, 2, 0, 4, 4, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040409-03', 1, 2, 2, 0, 4, 4, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040410-01', 1, 2, 2, 0, 4, 4, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040410-02', 1, 2, 2, 0, 4, 4, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040410-03', 1, 2, 2, 0, 4, 4, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040411-01', 1, 2, 2, 0, 4, 4, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040411-02', 1, 2, 2, 0, 4, 4, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040411-03', 1, 2, 2, 0, 4, 4, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040501-01', 1, 2, 2, 0, 4, 5, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040501-02', 1, 2, 2, 0, 4, 5, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040501-03', 1, 2, 2, 0, 4, 5, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040502-01', 1, 2, 2, 0, 4, 5, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040502-02', 1, 2, 2, 0, 4, 5, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040502-03', 1, 2, 2, 0, 4, 5, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040503-01', 1, 2, 2, 0, 4, 5, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040503-02', 1, 2, 2, 0, 4, 5, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040503-03', 1, 2, 2, 0, 4, 5, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040504-01', 1, 2, 2, 0, 4, 5, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040504-02', 1, 2, 2, 0, 4, 5, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040504-03', 1, 2, 2, 0, 4, 5, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040505-01', 1, 2, 2, 0, 4, 5, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040505-02', 1, 2, 2, 0, 4, 5, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040505-03', 1, 2, 2, 0, 4, 5, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040506-01', 1, 2, 2, 0, 4, 5, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040506-02', 1, 2, 2, 0, 4, 5, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040506-03', 1, 2, 2, 0, 4, 5, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040507-01', 1, 2, 2, 0, 4, 5, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040507-02', 1, 2, 2, 0, 4, 5, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040507-03', 1, 2, 2, 0, 4, 5, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040508-01', 1, 2, 2, 0, 4, 5, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040508-02', 1, 2, 2, 0, 4, 5, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040508-03', 1, 2, 2, 0, 4, 5, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040509-01', 1, 2, 2, 0, 4, 5, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040509-02', 1, 2, 2, 0, 4, 5, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040509-03', 1, 2, 2, 0, 4, 5, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040510-01', 1, 2, 2, 0, 4, 5, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040510-02', 1, 2, 2, 0, 4, 5, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040510-03', 1, 2, 2, 0, 4, 5, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040511-01', 1, 2, 2, 0, 4, 5, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040511-02', 1, 2, 2, 0, 4, 5, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040511-03', 1, 2, 2, 0, 4, 5, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040601-01', 1, 2, 2, 0, 4, 6, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040601-02', 1, 2, 2, 0, 4, 6, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040601-03', 1, 2, 2, 0, 4, 6, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040602-01', 1, 2, 2, 0, 4, 6, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040602-02', 1, 2, 2, 0, 4, 6, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040602-03', 1, 2, 2, 0, 4, 6, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040603-01', 1, 2, 2, 0, 4, 6, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040603-02', 1, 2, 2, 0, 4, 6, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040603-03', 1, 2, 2, 0, 4, 6, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040604-01', 1, 2, 2, 0, 4, 6, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040604-02', 1, 2, 2, 0, 4, 6, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040604-03', 1, 2, 2, 0, 4, 6, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040605-01', 1, 2, 2, 0, 4, 6, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040605-02', 1, 2, 2, 0, 4, 6, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040605-03', 1, 2, 2, 0, 4, 6, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040606-01', 1, 2, 2, 0, 4, 6, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040606-02', 1, 2, 2, 0, 4, 6, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040606-03', 1, 2, 2, 0, 4, 6, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040607-01', 1, 2, 2, 0, 4, 6, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040607-02', 1, 2, 2, 0, 4, 6, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040607-03', 1, 2, 2, 0, 4, 6, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040608-01', 1, 2, 2, 0, 4, 6, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040608-02', 1, 2, 2, 0, 4, 6, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040608-03', 1, 2, 2, 0, 4, 6, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040609-01', 1, 2, 2, 0, 4, 6, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040609-02', 1, 2, 2, 0, 4, 6, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040609-03', 1, 2, 2, 0, 4, 6, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040610-01', 1, 2, 2, 0, 4, 6, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040610-02', 1, 2, 2, 0, 4, 6, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040610-03', 1, 2, 2, 0, 4, 6, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040611-01', 1, 2, 2, 0, 4, 6, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040611-02', 1, 2, 2, 0, 4, 6, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040611-03', 1, 2, 2, 0, 4, 6, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040701-01', 1, 2, 2, 0, 4, 7, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040701-02', 1, 2, 2, 0, 4, 7, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040701-03', 1, 2, 2, 0, 4, 7, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040702-01', 1, 2, 2, 0, 4, 7, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040702-02', 1, 2, 2, 0, 4, 7, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040702-03', 1, 2, 2, 0, 4, 7, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040703-01', 1, 2, 2, 0, 4, 7, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040703-02', 1, 2, 2, 0, 4, 7, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040703-03', 1, 2, 2, 0, 4, 7, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040704-01', 1, 2, 2, 0, 4, 7, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040704-02', 1, 2, 2, 0, 4, 7, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040704-03', 1, 2, 2, 0, 4, 7, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040705-01', 1, 2, 2, 0, 4, 7, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040705-02', 1, 2, 2, 0, 4, 7, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040705-03', 1, 2, 2, 0, 4, 7, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040706-01', 1, 2, 2, 0, 4, 7, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040706-02', 1, 2, 2, 0, 4, 7, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040706-03', 1, 2, 2, 0, 4, 7, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040707-01', 1, 2, 2, 0, 4, 7, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040707-02', 1, 2, 2, 0, 4, 7, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040707-03', 1, 2, 2, 0, 4, 7, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040708-01', 1, 2, 2, 0, 4, 7, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040708-02', 1, 2, 2, 0, 4, 7, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040708-03', 1, 2, 2, 0, 4, 7, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040709-01', 1, 2, 2, 0, 4, 7, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040709-02', 1, 2, 2, 0, 4, 7, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040709-03', 1, 2, 2, 0, 4, 7, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040710-01', 1, 2, 2, 0, 4, 7, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040710-02', 1, 2, 2, 0, 4, 7, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040710-03', 1, 2, 2, 0, 4, 7, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040711-01', 1, 2, 2, 0, 4, 7, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040711-02', 1, 2, 2, 0, 4, 7, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040711-03', 1, 2, 2, 0, 4, 7, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040801-01', 1, 2, 2, 0, 4, 8, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040801-02', 1, 2, 2, 0, 4, 8, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040801-03', 1, 2, 2, 0, 4, 8, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040802-01', 1, 2, 2, 0, 4, 8, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040802-02', 1, 2, 2, 0, 4, 8, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040802-03', 1, 2, 2, 0, 4, 8, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040803-01', 1, 2, 2, 0, 4, 8, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040803-02', 1, 2, 2, 0, 4, 8, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040803-03', 1, 2, 2, 0, 4, 8, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040804-01', 1, 2, 2, 0, 4, 8, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040804-02', 1, 2, 2, 0, 4, 8, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040804-03', 1, 2, 2, 0, 4, 8, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040805-01', 1, 2, 2, 0, 4, 8, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040805-02', 1, 2, 2, 0, 4, 8, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040805-03', 1, 2, 2, 0, 4, 8, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040806-01', 1, 2, 2, 0, 4, 8, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040806-02', 1, 2, 2, 0, 4, 8, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040806-03', 1, 2, 2, 0, 4, 8, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040807-01', 1, 2, 2, 0, 4, 8, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040807-02', 1, 2, 2, 0, 4, 8, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040807-03', 1, 2, 2, 0, 4, 8, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040808-01', 1, 2, 2, 0, 4, 8, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040808-02', 1, 2, 2, 0, 4, 8, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040808-03', 1, 2, 2, 0, 4, 8, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040809-01', 1, 2, 2, 0, 4, 8, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040809-02', 1, 2, 2, 0, 4, 8, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040809-03', 1, 2, 2, 0, 4, 8, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040810-01', 1, 2, 2, 0, 4, 8, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040810-02', 1, 2, 2, 0, 4, 8, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040810-03', 1, 2, 2, 0, 4, 8, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040811-01', 1, 2, 2, 0, 4, 8, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040811-02', 1, 2, 2, 0, 4, 8, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040811-03', 1, 2, 2, 0, 4, 8, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040901-01', 1, 2, 2, 0, 4, 9, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040901-02', 1, 2, 2, 0, 4, 9, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040901-03', 1, 2, 2, 0, 4, 9, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040902-01', 1, 2, 2, 0, 4, 9, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040902-02', 1, 2, 2, 0, 4, 9, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040902-03', 1, 2, 2, 0, 4, 9, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040903-01', 1, 2, 2, 0, 4, 9, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040903-02', 1, 2, 2, 0, 4, 9, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040903-03', 1, 2, 2, 0, 4, 9, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040904-01', 1, 2, 2, 0, 4, 9, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040904-02', 1, 2, 2, 0, 4, 9, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040904-03', 1, 2, 2, 0, 4, 9, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040905-01', 1, 2, 2, 0, 4, 9, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040905-02', 1, 2, 2, 0, 4, 9, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040905-03', 1, 2, 2, 0, 4, 9, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040906-01', 1, 2, 2, 0, 4, 9, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040906-02', 1, 2, 2, 0, 4, 9, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040906-03', 1, 2, 2, 0, 4, 9, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040907-01', 1, 2, 2, 0, 4, 9, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040907-02', 1, 2, 2, 0, 4, 9, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040907-03', 1, 2, 2, 0, 4, 9, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040908-01', 1, 2, 2, 0, 4, 9, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040908-02', 1, 2, 2, 0, 4, 9, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040908-03', 1, 2, 2, 0, 4, 9, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040909-01', 1, 2, 2, 0, 4, 9, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040909-02', 1, 2, 2, 0, 4, 9, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040909-03', 1, 2, 2, 0, 4, 9, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040910-01', 1, 2, 2, 0, 4, 9, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040910-02', 1, 2, 2, 0, 4, 9, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040910-03', 1, 2, 2, 0, 4, 9, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('040911-01', 1, 2, 2, 0, 4, 9, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('040911-02', 1, 2, 2, 0, 4, 9, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('040911-03', 1, 2, 2, 0, 4, 9, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041001-01', 1, 2, 2, 0, 4, 10, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041001-02', 1, 2, 2, 0, 4, 10, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041001-03', 1, 2, 2, 0, 4, 10, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041002-01', 1, 2, 2, 0, 4, 10, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041002-02', 1, 2, 2, 0, 4, 10, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041002-03', 1, 2, 2, 0, 4, 10, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041003-01', 1, 2, 2, 0, 4, 10, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041003-02', 1, 2, 2, 0, 4, 10, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041003-03', 1, 2, 2, 0, 4, 10, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041004-01', 1, 2, 2, 0, 4, 10, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041004-02', 1, 2, 2, 0, 4, 10, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041004-03', 1, 2, 2, 0, 4, 10, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041005-01', 1, 2, 2, 0, 4, 10, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041005-02', 1, 2, 2, 0, 4, 10, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041005-03', 1, 2, 2, 0, 4, 10, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041006-01', 1, 2, 2, 0, 4, 10, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041006-02', 1, 2, 2, 0, 4, 10, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041006-03', 1, 2, 2, 0, 4, 10, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041007-01', 1, 2, 2, 0, 4, 10, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041007-02', 1, 2, 2, 0, 4, 10, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041007-03', 1, 2, 2, 0, 4, 10, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041008-01', 1, 2, 2, 0, 4, 10, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041008-02', 1, 2, 2, 0, 4, 10, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041008-03', 1, 2, 2, 0, 4, 10, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041009-01', 1, 2, 2, 0, 4, 10, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041009-02', 1, 2, 2, 0, 4, 10, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041009-03', 1, 2, 2, 0, 4, 10, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041010-01', 1, 2, 2, 0, 4, 10, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041010-02', 1, 2, 2, 0, 4, 10, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041010-03', 1, 2, 2, 0, 4, 10, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041011-01', 1, 2, 2, 0, 4, 10, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041011-02', 1, 2, 2, 0, 4, 10, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041011-03', 1, 2, 2, 0, 4, 10, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041101-01', 1, 2, 2, 0, 4, 11, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041101-02', 1, 2, 2, 0, 4, 11, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041101-03', 1, 2, 2, 0, 4, 11, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041102-01', 1, 2, 2, 0, 4, 11, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041102-02', 1, 2, 2, 0, 4, 11, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041102-03', 1, 2, 2, 0, 4, 11, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041103-01', 1, 2, 2, 0, 4, 11, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041103-02', 1, 2, 2, 0, 4, 11, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041103-03', 1, 2, 2, 0, 4, 11, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041104-01', 1, 2, 2, 0, 4, 11, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041104-02', 1, 2, 2, 0, 4, 11, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041104-03', 1, 2, 2, 0, 4, 11, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041105-01', 1, 2, 2, 0, 4, 11, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041105-02', 1, 2, 2, 0, 4, 11, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041105-03', 1, 2, 2, 0, 4, 11, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041106-01', 1, 2, 2, 0, 4, 11, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041106-02', 1, 2, 2, 0, 4, 11, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041106-03', 1, 2, 2, 0, 4, 11, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041107-01', 1, 2, 2, 0, 4, 11, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041107-02', 1, 2, 2, 0, 4, 11, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041107-03', 1, 2, 2, 0, 4, 11, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041108-01', 1, 2, 2, 0, 4, 11, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041108-02', 1, 2, 2, 0, 4, 11, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041108-03', 1, 2, 2, 0, 4, 11, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041109-01', 1, 2, 2, 0, 4, 11, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041109-02', 1, 2, 2, 0, 4, 11, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041109-03', 1, 2, 2, 0, 4, 11, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041110-01', 1, 2, 2, 0, 4, 11, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041110-02', 1, 2, 2, 0, 4, 11, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041110-03', 1, 2, 2, 0, 4, 11, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041111-01', 1, 2, 2, 0, 4, 11, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041111-02', 1, 2, 2, 0, 4, 11, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041111-03', 1, 2, 2, 0, 4, 11, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041201-01', 1, 2, 2, 0, 4, 12, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041201-02', 1, 2, 2, 0, 4, 12, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041201-03', 1, 2, 2, 0, 4, 12, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041202-01', 1, 2, 2, 0, 4, 12, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041202-02', 1, 2, 2, 0, 4, 12, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041202-03', 1, 2, 2, 0, 4, 12, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041203-01', 1, 2, 2, 0, 4, 12, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041203-02', 1, 2, 2, 0, 4, 12, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041203-03', 1, 2, 2, 0, 4, 12, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041204-01', 1, 2, 2, 0, 4, 12, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041204-02', 1, 2, 2, 0, 4, 12, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041204-03', 1, 2, 2, 0, 4, 12, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041205-01', 1, 2, 2, 0, 4, 12, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041205-02', 1, 2, 2, 0, 4, 12, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041205-03', 1, 2, 2, 0, 4, 12, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041206-01', 1, 2, 2, 0, 4, 12, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041206-02', 1, 2, 2, 0, 4, 12, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041206-03', 1, 2, 2, 0, 4, 12, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041207-01', 1, 2, 2, 0, 4, 12, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041207-02', 1, 2, 2, 0, 4, 12, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041207-03', 1, 2, 2, 0, 4, 12, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041208-01', 1, 2, 2, 0, 4, 12, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041208-02', 1, 2, 2, 0, 4, 12, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041208-03', 1, 2, 2, 0, 4, 12, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041209-01', 1, 2, 2, 0, 4, 12, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041209-02', 1, 2, 2, 0, 4, 12, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041209-03', 1, 2, 2, 0, 4, 12, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041210-01', 1, 2, 2, 0, 4, 12, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041210-02', 1, 2, 2, 0, 4, 12, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041210-03', 1, 2, 2, 0, 4, 12, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041211-01', 1, 2, 2, 0, 4, 12, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041211-02', 1, 2, 2, 0, 4, 12, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041211-03', 1, 2, 2, 0, 4, 12, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041301-01', 1, 2, 2, 0, 4, 13, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041301-02', 1, 2, 2, 0, 4, 13, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041301-03', 1, 2, 2, 0, 4, 13, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041302-01', 1, 2, 2, 0, 4, 13, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041302-02', 1, 2, 2, 0, 4, 13, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041302-03', 1, 2, 2, 0, 4, 13, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041303-01', 1, 2, 2, 0, 4, 13, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041303-02', 1, 2, 2, 0, 4, 13, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041303-03', 1, 2, 2, 0, 4, 13, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041304-01', 1, 2, 2, 0, 4, 13, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041304-02', 1, 2, 2, 0, 4, 13, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041304-03', 1, 2, 2, 0, 4, 13, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041305-01', 1, 2, 2, 0, 4, 13, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041305-02', 1, 2, 2, 0, 4, 13, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041305-03', 1, 2, 2, 0, 4, 13, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041306-01', 1, 2, 2, 0, 4, 13, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041306-02', 1, 2, 2, 0, 4, 13, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041306-03', 1, 2, 2, 0, 4, 13, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041307-01', 1, 2, 2, 0, 4, 13, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041307-02', 1, 2, 2, 0, 4, 13, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041307-03', 1, 2, 2, 0, 4, 13, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041308-01', 1, 2, 2, 0, 4, 13, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041308-02', 1, 2, 2, 0, 4, 13, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041308-03', 1, 2, 2, 0, 4, 13, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041309-01', 1, 2, 2, 0, 4, 13, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041309-02', 1, 2, 2, 0, 4, 13, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041309-03', 1, 2, 2, 0, 4, 13, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041310-01', 1, 2, 2, 0, 4, 13, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041310-02', 1, 2, 2, 0, 4, 13, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041310-03', 1, 2, 2, 0, 4, 13, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041311-01', 1, 2, 2, 0, 4, 13, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041311-02', 1, 2, 2, 0, 4, 13, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041311-03', 1, 2, 2, 0, 4, 13, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041401-01', 1, 2, 2, 0, 4, 14, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041401-02', 1, 2, 2, 0, 4, 14, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041401-03', 1, 2, 2, 0, 4, 14, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041402-01', 1, 2, 2, 0, 4, 14, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041402-02', 1, 2, 2, 0, 4, 14, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041402-03', 1, 2, 2, 0, 4, 14, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041403-01', 1, 2, 2, 0, 4, 14, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041403-02', 1, 2, 2, 0, 4, 14, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041403-03', 1, 2, 2, 0, 4, 14, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041404-01', 1, 2, 2, 0, 4, 14, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041404-02', 1, 2, 2, 0, 4, 14, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041404-03', 1, 2, 2, 0, 4, 14, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041405-01', 1, 2, 2, 0, 4, 14, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041405-02', 1, 2, 2, 0, 4, 14, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041405-03', 1, 2, 2, 0, 4, 14, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041406-01', 1, 2, 2, 0, 4, 14, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041406-02', 1, 2, 2, 0, 4, 14, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041406-03', 1, 2, 2, 0, 4, 14, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041407-01', 1, 2, 2, 0, 4, 14, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041407-02', 1, 2, 2, 0, 4, 14, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041407-03', 1, 2, 2, 0, 4, 14, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041408-01', 1, 2, 2, 0, 4, 14, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041408-02', 1, 2, 2, 0, 4, 14, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041408-03', 1, 2, 2, 0, 4, 14, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041409-01', 1, 2, 2, 0, 4, 14, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041409-02', 1, 2, 2, 0, 4, 14, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041409-03', 1, 2, 2, 0, 4, 14, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041410-01', 1, 2, 2, 0, 4, 14, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041410-02', 1, 2, 2, 0, 4, 14, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041410-03', 1, 2, 2, 0, 4, 14, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041411-01', 1, 2, 2, 0, 4, 14, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041411-02', 1, 2, 2, 0, 4, 14, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041411-03', 1, 2, 2, 0, 4, 14, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041501-01', 1, 2, 2, 0, 4, 15, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041501-02', 1, 2, 2, 0, 4, 15, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041501-03', 1, 2, 2, 0, 4, 15, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041502-01', 1, 2, 2, 0, 4, 15, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041502-02', 1, 2, 2, 0, 4, 15, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041502-03', 1, 2, 2, 0, 4, 15, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041503-01', 1, 2, 2, 0, 4, 15, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041503-02', 1, 2, 2, 0, 4, 15, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041503-03', 1, 2, 2, 0, 4, 15, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041504-01', 1, 2, 2, 0, 4, 15, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041504-02', 1, 2, 2, 0, 4, 15, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041504-03', 1, 2, 2, 0, 4, 15, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041505-01', 1, 2, 2, 0, 4, 15, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041505-02', 1, 2, 2, 0, 4, 15, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041505-03', 1, 2, 2, 0, 4, 15, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041506-01', 1, 2, 2, 0, 4, 15, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041506-02', 1, 2, 2, 0, 4, 15, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041506-03', 1, 2, 2, 0, 4, 15, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041507-01', 1, 2, 2, 0, 4, 15, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041507-02', 1, 2, 2, 0, 4, 15, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041507-03', 1, 2, 2, 0, 4, 15, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041508-01', 1, 2, 2, 0, 4, 15, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041508-02', 1, 2, 2, 0, 4, 15, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041508-03', 1, 2, 2, 0, 4, 15, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041509-01', 1, 2, 2, 0, 4, 15, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041509-02', 1, 2, 2, 0, 4, 15, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041509-03', 1, 2, 2, 0, 4, 15, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041510-01', 1, 2, 2, 0, 4, 15, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041510-02', 1, 2, 2, 0, 4, 15, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041510-03', 1, 2, 2, 0, 4, 15, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041511-01', 1, 2, 2, 0, 4, 15, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041511-02', 1, 2, 2, 0, 4, 15, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041511-03', 1, 2, 2, 0, 4, 15, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041601-01', 1, 2, 2, 0, 4, 16, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041601-02', 1, 2, 2, 0, 4, 16, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041601-03', 1, 2, 2, 0, 4, 16, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041602-01', 1, 2, 2, 0, 4, 16, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041602-02', 1, 2, 2, 0, 4, 16, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041602-03', 1, 2, 2, 0, 4, 16, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041603-01', 1, 2, 2, 0, 4, 16, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041603-02', 1, 2, 2, 0, 4, 16, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041603-03', 1, 2, 2, 0, 4, 16, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041604-01', 1, 2, 2, 0, 4, 16, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041604-02', 1, 2, 2, 0, 4, 16, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041604-03', 1, 2, 2, 0, 4, 16, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041605-01', 1, 2, 2, 0, 4, 16, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041605-02', 1, 2, 2, 0, 4, 16, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041605-03', 1, 2, 2, 0, 4, 16, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041606-01', 1, 2, 2, 0, 4, 16, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041606-02', 1, 2, 2, 0, 4, 16, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041606-03', 1, 2, 2, 0, 4, 16, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041607-01', 1, 2, 2, 0, 4, 16, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041607-02', 1, 2, 2, 0, 4, 16, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041607-03', 1, 2, 2, 0, 4, 16, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041608-01', 1, 2, 2, 0, 4, 16, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041608-02', 1, 2, 2, 0, 4, 16, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041608-03', 1, 2, 2, 0, 4, 16, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041609-01', 1, 2, 2, 0, 4, 16, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041609-02', 1, 2, 2, 0, 4, 16, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041609-03', 1, 2, 2, 0, 4, 16, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041610-01', 1, 2, 2, 0, 4, 16, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041610-02', 1, 2, 2, 0, 4, 16, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041610-03', 1, 2, 2, 0, 4, 16, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041611-01', 1, 2, 2, 0, 4, 16, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041611-02', 1, 2, 2, 0, 4, 16, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041611-03', 1, 2, 2, 0, 4, 16, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041701-01', 1, 2, 2, 0, 4, 17, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041701-02', 1, 2, 2, 0, 4, 17, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041701-03', 1, 2, 2, 0, 4, 17, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041702-01', 1, 2, 2, 0, 4, 17, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041702-02', 1, 2, 2, 0, 4, 17, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041702-03', 1, 2, 2, 0, 4, 17, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041703-01', 1, 2, 2, 0, 4, 17, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041703-02', 1, 2, 2, 0, 4, 17, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041703-03', 1, 2, 2, 0, 4, 17, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041704-01', 1, 2, 2, 0, 4, 17, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041704-02', 1, 2, 2, 0, 4, 17, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041704-03', 1, 2, 2, 0, 4, 17, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041705-01', 1, 2, 2, 0, 4, 17, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041705-02', 1, 2, 2, 0, 4, 17, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041705-03', 1, 2, 2, 0, 4, 17, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041706-01', 1, 2, 2, 0, 4, 17, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041706-02', 1, 2, 2, 0, 4, 17, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041706-03', 1, 2, 2, 0, 4, 17, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041707-01', 1, 2, 2, 0, 4, 17, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041707-02', 1, 2, 2, 0, 4, 17, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041707-03', 1, 2, 2, 0, 4, 17, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041708-01', 1, 2, 2, 0, 4, 17, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041708-02', 1, 2, 2, 0, 4, 17, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041708-03', 1, 2, 2, 0, 4, 17, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041709-01', 1, 2, 2, 0, 4, 17, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041709-02', 1, 2, 2, 0, 4, 17, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041709-03', 1, 2, 2, 0, 4, 17, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041710-01', 1, 2, 2, 0, 4, 17, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041710-02', 1, 2, 2, 0, 4, 17, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041710-03', 1, 2, 2, 0, 4, 17, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041711-01', 1, 2, 2, 0, 4, 17, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041711-02', 1, 2, 2, 0, 4, 17, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041711-03', 1, 2, 2, 0, 4, 17, 11, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041801-01', 1, 2, 2, 0, 4, 18, 1, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041801-02', 1, 2, 2, 0, 4, 18, 1, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041801-03', 1, 2, 2, 0, 4, 18, 1, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041802-01', 1, 2, 2, 0, 4, 18, 2, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041802-02', 1, 2, 2, 0, 4, 18, 2, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041802-03', 1, 2, 2, 0, 4, 18, 2, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041803-01', 1, 2, 2, 0, 4, 18, 3, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041803-02', 1, 2, 2, 0, 4, 18, 3, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041803-03', 1, 2, 2, 0, 4, 18, 3, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041804-01', 1, 2, 2, 0, 4, 18, 4, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041804-02', 1, 2, 2, 0, 4, 18, 4, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041804-03', 1, 2, 2, 0, 4, 18, 4, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041805-01', 1, 2, 2, 0, 4, 18, 5, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041805-02', 1, 2, 2, 0, 4, 18, 5, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041805-03', 1, 2, 2, 0, 4, 18, 5, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041806-01', 1, 2, 2, 0, 4, 18, 6, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041806-02', 1, 2, 2, 0, 4, 18, 6, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041806-03', 1, 2, 2, 0, 4, 18, 6, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041807-01', 1, 2, 2, 0, 4, 18, 7, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041807-02', 1, 2, 2, 0, 4, 18, 7, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041807-03', 1, 2, 2, 0, 4, 18, 7, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041808-01', 1, 2, 2, 0, 4, 18, 8, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041808-02', 1, 2, 2, 0, 4, 18, 8, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041808-03', 1, 2, 2, 0, 4, 18, 8, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041809-01', 1, 2, 2, 0, 4, 18, 9, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041809-02', 1, 2, 2, 0, 4, 18, 9, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041809-03', 1, 2, 2, 0, 4, 18, 9, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041810-01', 1, 2, 2, 0, 4, 18, 10, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041810-02', 1, 2, 2, 0, 4, 18, 10, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041810-03', 1, 2, 2, 0, 4, 18, 10, 3, 0, 0, NULL, 1); +INSERT INTO `tbl_app_location` VALUES ('041811-01', 1, 2, 2, 0, 4, 18, 11, 1, 0, 0, NULL, 3); +INSERT INTO `tbl_app_location` VALUES ('041811-02', 1, 2, 2, 0, 4, 18, 11, 2, 0, 0, NULL, 2); +INSERT INTO `tbl_app_location` VALUES ('041811-03', 1, 2, 2, 0, 4, 18, 11, 3, 0, 0, NULL, 1); + +-- ---------------------------- +-- Table structure for tbl_app_scanner +-- ---------------------------- +DROP TABLE IF EXISTS `tbl_app_scanner`; +CREATE TABLE `tbl_app_scanner` ( + `scan_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '扫码id', + `request_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '传递条码号', + `scan_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '扫描条码号', + `position` int NOT NULL COMMENT '位置', + `solve_status` int NOT NULL COMMENT '处理状态:0---未处理;1---处理完毕', + `stand_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '站台号', + `confirm_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '确认条码号', + PRIMARY KEY (`scan_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tbl_app_scanner +-- ---------------------------- + +-- ---------------------------- +-- Table structure for tbl_app_stand +-- ---------------------------- +DROP TABLE IF EXISTS `tbl_app_stand`; +CREATE TABLE `tbl_app_stand` ( + `stand_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '站台', + `allow_in` int NULL DEFAULT NULL COMMENT '允许入库', + `allow_out` int NULL DEFAULT NULL COMMENT '允许出库', + `allow_inventory` int NULL DEFAULT NULL COMMENT '允许盘点', + `task_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '任务id', + `is_lock` int NULL DEFAULT NULL COMMENT '是否锁定/默认值0:未锁定', + `stand_status` int NULL DEFAULT NULL COMMENT '库存状态/默认值0:空闲', + `equipment_id` int NULL DEFAULT NULL, + `area_id` int NULL DEFAULT NULL, + `stand_type` int NULL DEFAULT NULL COMMENT '站台类型,1:基础入出库站台,2:拣选站台,3:堆垛机', + `stand_ip` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '拣选站台电脑的ip', + `outer_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '外部编号', + `last_use_time` datetime NULL DEFAULT NULL COMMENT '最后一次使用时间', + PRIMARY KEY (`stand_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tbl_app_stand +-- ---------------------------- +INSERT INTO `tbl_app_stand` VALUES ('C1', 0, 1, 0, NULL, 0, 0, 1, 1, 1, NULL, 'C1', NULL); +INSERT INTO `tbl_app_stand` VALUES ('C2', 0, 1, 0, NULL, 0, 0, 2, 1, 1, NULL, 'C2', NULL); +INSERT INTO `tbl_app_stand` VALUES ('R1', 1, 0, 0, NULL, 0, 0, 1, 1, 1, NULL, 'R1', NULL); +INSERT INTO `tbl_app_stand` VALUES ('R2', 1, 0, 0, NULL, 0, 0, 2, 1, 1, NULL, 'R2', NULL); + +-- ---------------------------- +-- Table structure for tbl_app_stock +-- ---------------------------- +DROP TABLE IF EXISTS `tbl_app_stock`; +CREATE TABLE `tbl_app_stock` ( + `stock_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '库存编号', + `location_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '库位编号', + `vehicle_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '载具编号/盘具', + `barcode` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '条码号', + `batch_no` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '批次号', + `goods_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '型号', + `specification` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '规格', + `weight` double NULL DEFAULT NULL COMMENT '重量', + `goods_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '物料id', + `goods_name` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '物料描述', + `origin_num` int NULL DEFAULT NULL COMMENT '入库数量', + `real_num` int NULL DEFAULT NULL COMMENT '实际数量', + `stock_status` int NULL DEFAULT NULL COMMENT '库存状态', + `goods_status` int NULL DEFAULT NULL COMMENT '物料状态', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `last_update_time` datetime NULL DEFAULT NULL COMMENT '最近更新时间', + `last_update_user` datetime NULL DEFAULT NULL COMMENT '最近更新用户', + `remark` text CHARACTER SET utf16 COLLATE utf16_general_ci NULL COMMENT '备注,预留字段', + `is_inventory` int NULL DEFAULT NULL COMMENT '是否盘点,默认为空。', + `inventory_task_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '盘点的任务单号', + `order_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '任务号、订单号', + `no_use_days` int NULL DEFAULT NULL COMMENT '呆滞天数,初始为0', + `production_date` datetime NULL DEFAULT NULL COMMENT '生产日期', + `expiration_date` datetime NULL DEFAULT NULL COMMENT '过期日期', + `tunnel_id` int NULL DEFAULT NULL COMMENT '巷道号', + `goods_unit` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '单位', + `weigh_date` datetime NULL DEFAULT NULL COMMENT '称重日期', + `goods_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '物料编号', + PRIMARY KEY (`stock_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tbl_app_stock +-- ---------------------------- + +-- ---------------------------- +-- Table structure for tbl_app_task +-- ---------------------------- +DROP TABLE IF EXISTS `tbl_app_task`; +CREATE TABLE `tbl_app_task` ( + `task_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '任务编号,主键,UUID', + `task_type` int NOT NULL COMMENT '任务类型(1:入库;2:出库;9:移库)', + `task_status` int NOT NULL COMMENT '任务状态', + `task_group` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '任务组', + `origin` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '起点', + `destination` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '终点', + `weight` double NULL DEFAULT NULL COMMENT '重量', + `vehicle_no` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '托盘号', + `vehicle_size` int NULL DEFAULT NULL COMMENT '尺寸', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `user_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '操作人员姓名', + `goods_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '物料id', + `goods_name` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '物料名称', + `operate_num` int NULL DEFAULT NULL COMMENT '本次操作数量', + `total_num` int NULL DEFAULT NULL COMMENT '库存总数量', + `task_priority` int NULL DEFAULT NULL COMMENT '任务优先级:1普通9紧急', + `remark1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备用字段', + `locator` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '立体库提升机入口位编码', + `barcode` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '条码号', + `batch_no` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '批次号', + `goods_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '型号', + `specification` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '规格', + `production_date` datetime NULL DEFAULT NULL COMMENT '生产日期', + `expiration_date` datetime NULL DEFAULT NULL COMMENT '过期日期', + `pre_task` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '前置任务---一般移库任务用', + `finish_time` datetime NULL DEFAULT NULL COMMENT '完成时间', + `goods_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '物料编号', + `goods_unit` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '单位', + `weigh_date` datetime NULL DEFAULT NULL COMMENT '称重日期', + PRIMARY KEY (`task_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tbl_app_task +-- ---------------------------- + +-- ---------------------------- +-- Table structure for tbl_app_task_bak +-- ---------------------------- +DROP TABLE IF EXISTS `tbl_app_task_bak`; +CREATE TABLE `tbl_app_task_bak` ( + `finish_time` datetime NULL DEFAULT NULL COMMENT '完成时间', + `task_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '任务编号,主键,UUID', + `task_type` int NOT NULL COMMENT '任务类型(1:入库;2:出库;9:移库)', + `task_status` int NOT NULL COMMENT '任务状态', + `task_group` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '任务组', + `origin` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '起点', + `destination` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '终点', + `weight` double NULL DEFAULT NULL COMMENT '重量', + `vehicle_no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '托盘号', + `vehicle_size` int NULL DEFAULT NULL COMMENT '尺寸', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间', + `user_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '操作人员姓名', + `goods_id` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '物料id', + `goods_name` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '物料名称', + `operate_num` int NULL DEFAULT NULL COMMENT '本次操作数量', + `total_num` int NULL DEFAULT NULL COMMENT '库存总数量', + `task_priority` int NULL DEFAULT NULL COMMENT '任务优先级:1普通9紧急', + `remark1` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备用字段', + `locator` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '立体库提升机入口位编码', + `barcode` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '条码号', + `batch_no` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '批次号', + `goods_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '型号', + `specification` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '规格', + `production_date` datetime NULL DEFAULT NULL COMMENT '生产日期', + `expiration_date` datetime NULL DEFAULT NULL COMMENT '过期日期', + `pre_task` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '前置任务---一般移库任务用', + `goods_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '物料编号', + `goods_unit` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '单位', + `weigh_date` datetime NULL DEFAULT NULL COMMENT '称重日期', + PRIMARY KEY (`task_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tbl_app_task_bak +-- ---------------------------- + +-- ---------------------------- +-- Table structure for tbl_app_vehicle +-- ---------------------------- +DROP TABLE IF EXISTS `tbl_app_vehicle`; +CREATE TABLE `tbl_app_vehicle` ( + `vehicle_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '载具编号', + `vehicle_status` int NULL DEFAULT NULL COMMENT '载具状态', + `current_location` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '当前位置', + `is_empty` int NULL DEFAULT NULL COMMENT '是否空箱', + PRIMARY KEY (`vehicle_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tbl_app_vehicle +-- ---------------------------- + +-- ---------------------------- +-- Table structure for tbl_sys_config +-- ---------------------------- +DROP TABLE IF EXISTS `tbl_sys_config`; +CREATE TABLE `tbl_sys_config` ( + `config_id` int NOT NULL COMMENT '配置ID', + `config_key` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '配置键', + `config_value` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '配置值', + `config_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '配置类型:1.输入框2.下拉多选3.下拉单选', + `config_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '配置显示名称', + PRIMARY KEY (`config_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tbl_sys_config +-- ---------------------------- +INSERT INTO `tbl_sys_config` VALUES (1, 'WCS_TASK', 'http://localhost:18990/api/Wms/WmsTask/SetStackerTask', '1', 'WCS接收任务URL'); +INSERT INTO `tbl_sys_config` VALUES (2, 'WCS_TASK_CHANGE', 'http://192.168.103.110:2000', '1', 'WCS接收任务状态变更URL'); +INSERT INTO `tbl_sys_config` VALUES (3, 'WCS_SCAN_CODE', '///', '1', 'WCS查询扫码结果的URL'); +INSERT INTO `tbl_sys_config` VALUES (4, 'URL_MES_GET_INFO', '///', '1', 'MES查询物料信息的URL'); +INSERT INTO `tbl_sys_config` VALUES (5, 'MES_IN_FEEDBACK_URL', '///', '1', 'MES接收入库反馈的URL'); +INSERT INTO `tbl_sys_config` VALUES (6, 'MES_OUT_FEEDBACK_URL', '///', '1', 'MES接收出口反馈的URL'); + +-- ---------------------------- +-- Table structure for tbl_sys_log +-- ---------------------------- +DROP TABLE IF EXISTS `tbl_sys_log`; +CREATE TABLE `tbl_sys_log` ( + `log_id` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '日志id', + `log_title` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '日志标题', + `log_method` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '请求方法名', + `log_request` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '请求参数', + `log_response` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '请求响应结果', + `log_ip` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '请求ip', + `log_time` datetime NULL DEFAULT NULL COMMENT '请求时间', + `log_user` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '请求用户', + PRIMARY KEY (`log_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tbl_sys_log +-- ---------------------------- + +-- ---------------------------- +-- Table structure for tbl_sys_menu +-- ---------------------------- +DROP TABLE IF EXISTS `tbl_sys_menu`; +CREATE TABLE `tbl_sys_menu` ( + `menu_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '菜单编号', + `label_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '菜单名称', + `icon_value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '图标名称', + `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '菜单地址', + `parent_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '父菜单编号', + PRIMARY KEY (`menu_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tbl_sys_menu +-- ---------------------------- +INSERT INTO `tbl_sys_menu` VALUES ('1', '操作', 'Operation', '', '0'); +INSERT INTO `tbl_sys_menu` VALUES ('11', '入库', NULL, '/goodsIn', '1'); +INSERT INTO `tbl_sys_menu` VALUES ('12', '出库', NULL, '/goodsOut', '1'); +INSERT INTO `tbl_sys_menu` VALUES ('13', '盘点', NULL, '/inventory', '1'); +INSERT INTO `tbl_sys_menu` VALUES ('2', '数据', 'Histogram', '', '0'); +INSERT INTO `tbl_sys_menu` VALUES ('21', '库存信息', NULL, '/stock', '2'); +INSERT INTO `tbl_sys_menu` VALUES ('22', '物料信息', NULL, '/goods', '2'); +INSERT INTO `tbl_sys_menu` VALUES ('23', '入库记录', NULL, '/inTaskRecord', '2'); +INSERT INTO `tbl_sys_menu` VALUES ('24', '出库记录', NULL, '/outTaskRecord', '2'); +INSERT INTO `tbl_sys_menu` VALUES ('241', '盘点记录', NULL, '/inventoryRecord', '2'); +INSERT INTO `tbl_sys_menu` VALUES ('25', '任务监控', NULL, '/taskMonitor', '2'); +INSERT INTO `tbl_sys_menu` VALUES ('26', '库位监控', NULL, '/location', '2'); +INSERT INTO `tbl_sys_menu` VALUES ('28', '接口日志', NULL, '/wmsLog', '2'); +INSERT INTO `tbl_sys_menu` VALUES ('3', '系统', 'Setting', NULL, '0'); +INSERT INTO `tbl_sys_menu` VALUES ('35', '系统配置', NULL, '/config', '3'); + +-- ---------------------------- +-- Table structure for tbl_sys_permission +-- ---------------------------- +DROP TABLE IF EXISTS `tbl_sys_permission`; +CREATE TABLE `tbl_sys_permission` ( + `permission_id` int NOT NULL AUTO_INCREMENT COMMENT '权限编号', + `menu_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '菜单编号', + `role_id` int NOT NULL COMMENT '角色编号', + PRIMARY KEY (`permission_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 53 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tbl_sys_permission +-- ---------------------------- +INSERT INTO `tbl_sys_permission` VALUES (1, '1', 1); +INSERT INTO `tbl_sys_permission` VALUES (2, '11', 1); +INSERT INTO `tbl_sys_permission` VALUES (3, '12', 1); +INSERT INTO `tbl_sys_permission` VALUES (4, '13', 1); +INSERT INTO `tbl_sys_permission` VALUES (5, '2', 1); +INSERT INTO `tbl_sys_permission` VALUES (6, '21', 1); +INSERT INTO `tbl_sys_permission` VALUES (7, '22', 1); +INSERT INTO `tbl_sys_permission` VALUES (8, '23', 1); +INSERT INTO `tbl_sys_permission` VALUES (9, '24', 1); +INSERT INTO `tbl_sys_permission` VALUES (10, '241', 1); +INSERT INTO `tbl_sys_permission` VALUES (11, '25', 1); +INSERT INTO `tbl_sys_permission` VALUES (12, '26', 1); +INSERT INTO `tbl_sys_permission` VALUES (14, '3', 1); +INSERT INTO `tbl_sys_permission` VALUES (19, '35', 1); +INSERT INTO `tbl_sys_permission` VALUES (20, '28', 1); + +-- ---------------------------- +-- Table structure for tbl_sys_role +-- ---------------------------- +DROP TABLE IF EXISTS `tbl_sys_role`; +CREATE TABLE `tbl_sys_role` ( + `role_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '角色编号', + `role_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '角色名称', + PRIMARY KEY (`role_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tbl_sys_role +-- ---------------------------- +INSERT INTO `tbl_sys_role` VALUES ('1', '管理员'); +INSERT INTO `tbl_sys_role` VALUES ('2', '普通用户'); + +-- ---------------------------- +-- Table structure for tbl_sys_settings +-- ---------------------------- +DROP TABLE IF EXISTS `tbl_sys_settings`; +CREATE TABLE `tbl_sys_settings` ( + `setting_id` int NOT NULL COMMENT '设置id', + `setting_key` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '配置键', + `setting_value` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '配置值', + `setting_type` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '配置类型:1.输入框2.下拉多选3.下拉单选', + `setting_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '配置显示名称', + PRIMARY KEY (`setting_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tbl_sys_settings +-- ---------------------------- + +-- ---------------------------- +-- Table structure for tbl_sys_user +-- ---------------------------- +DROP TABLE IF EXISTS `tbl_sys_user`; +CREATE TABLE `tbl_sys_user` ( + `user_id` int NOT NULL AUTO_INCREMENT COMMENT '用户ID', + `user_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户名', + `role_id` int NULL DEFAULT NULL COMMENT '角色', + `login_account` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '登录账号', + `login_password` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '登录密码', + `add_time` datetime NULL DEFAULT NULL, + `update_time` datetime NULL DEFAULT NULL, + `add_user` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '添加人', + PRIMARY KEY (`user_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of tbl_sys_user +-- ---------------------------- +INSERT INTO `tbl_sys_user` VALUES (1, '管理员', 1, 'admin', '812C0C84E2970FA98456DDC5B0B59594', '2023-03-23 11:17:06', '2023-03-23 11:17:10', '系统'); + +SET FOREIGN_KEY_CHECKS = 1;