From f65443d8abeaedc9d102324565e8368e7c9d90c8 Mon Sep 17 00:00:00 2001
From: 郑永安 <zyazyz250@sina.com>
Date: 星期一, 19 六月 2023 14:41:54 +0800
Subject: [PATCH] commit

---
 src/main/java/com/gk/firework/Domain/Vo/ZplUtil.java                                                |   81 
 src/main/java/com/gk/firework/Domain/Vo/ProductLocusVo.java                                         |   54 
 src/main/java/com/gk/firework/Mapper/mybatis/StaticStockMapper.xml                                  |   65 
 src/main/java/com/gk/firework/Domain/Vo/SortData.java                                               |   65 
 src/main/java/com/gk/firework/Mapper/mybatis/TransportCertificateApproachMapper.xml                 |  119 
 src/main/java/com/gk/firework/Mapper/ControlPrintParamMapper.java                                   |   15 
 src/main/java/com/gk/firework/Service/SaleOrderService.java                                         |   76 
 src/main/java/com/gk/firework/Domain/AuthorizationInfo.java                                         |  144 
 src/main/java/com/gk/firework/Mapper/EnterpriseAnnualMapper.java                                    |   10 
 src/main/java/com/gk/firework/Domain/Vo/DealingRangeVo.java                                         |   49 
 src/main/java/com/gk/firework/Mapper/mybatis/SecuritySupervisoryMapper.xml                          |   17 
 src/main/java/com/gk/firework/Controller/ContractController.java                                    | 1209 
 src/main/java/com/gk/firework/Mapper/mybatis/PermissionInfoMapper.xml                               |  165 
 src/main/resources/application-dev.yml                                                              |   86 
 src/main/java/com/gk/firework/Domain/Utils/DigestUtils.java                                         |   29 
 src/main/java/com/gk/firework/Mapper/EnterpriseStandardizationMapper.java                           |   19 
 src/main/java/com/gk/firework/Service/HelpDocService.java                                           |   13 
 src/main/java/com/gk/firework/Domain/AccessAssessApply.java                                         |  336 
 src/main/java/com/gk/firework/Service/RolePermissionsService.java                                   |   14 
 src/main/java/com/gk/firework/Domain/HiddenDangerCheckType.java                                     |  132 
 src/main/java/com/gk/firework/Mapper/mybatis/TransportCertificatePersonMapper.xml                   |   29 
 src/main/java/com/gk/firework/Domain/Enum/ApplyStatus.java                                          |   47 
 src/main/java/com/gk/firework/Mapper/SelfCheckReportMapper.java                                     |   27 
 src/main/java/com/gk/firework/Domain/PermissionInfo.java                                            |  273 
 src/main/java/com/gk/firework/Mapper/mybatis/RoleInfoMapper.xml                                     |  117 
 src/main/java/com/gk/firework/Mapper/StandardRewardRecordMapper.java                                |   16 
 src/main/java/com/gk/firework/Mapper/mybatis/TransportCertMapper.xml                                |  367 
 src/main/java/com/gk/firework/Service/TransportCertProductService.java                              |   14 
 src/main/java/com/gk/firework/Domain/TransportCertificateProduct.java                               |  170 
 src/main/java/com/gk/firework/Domain/ProductCategory.java                                           |  138 
 src/main/java/com/gk/firework/Domain/Utils/WordTemplate.java                                        |  682 
 src/main/java/com/gk/firework/Service/StockService.java                                             |   80 
 src/main/java/com/gk/firework/Service/ServiceImpl/SmsLogServiceImpl.java                            |   25 
 src/main/java/com/gk/firework/Api/ApiController.java                                                |  572 
 src/main/java/com/gk/firework/Domain/ProductLocusInfo.java                                          |  158 
 src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseDocumentMapper.xml                           |  188 
 src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseFeedMapper.xml                               |  208 
 src/main/java/com/gk/firework/Service/ServiceImpl/DictionaryTypeServiceImpl.java                    |   61 
 src/main/resources/application-xj8104prov.yml                                                       |   91 
 src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseStaffMapper.xml                              |  163 
 src/main/java/com/gk/firework/Controller/ProductController.java                                     |  879 
 src/main/java/com/gk/firework/Domain/LicenseInfo.java                                               |  642 
 src/main/java/com/gk/firework/Domain/Utils/Constants.java                                           |  139 
 src/main/java/com/gk/firework/Domain/ProductPriceInfo.java                                          |   95 
 src/main/java/com/gk/firework/Domain/EnterpriseResource.java                                        |  172 
 pom.xml                                                                                             |  418 
 src/main/java/com/gk/firework/Service/ServiceImpl/AppFileServiceImpl.java                           |   46 
 src/main/java/com/gk/firework/Mapper/StandardSupplyMarketObjectMapper.java                          |   15 
 generator/mybatis-generator-core-1.3.2.jar                                                          |    0 
 src/main/java/com/gk/firework/Controller/AuthorizationController.java                               |  145 
 src/main/java/com/gk/firework/Scheduls/ReportTask/HistoryStockRobot.java                            |   28 
 src/main/java/com/gk/firework/Domain/BO/SaleOrderDetailInfoBO.java                                  |   30 
 src/main/java/com/gk/firework/Domain/WarningInfo.java                                               |  133 
 src/main/java/com/gk/firework/Mapper/StandardGuardRollMapper.java                                   |   15 
 src/main/java/com/gk/firework/Service/ServiceImpl/EntryServiceImpl.java                             |  251 
 src/main/java/com/gk/firework/Domain/Enum/Element.java                                              |   69 
 src/main/java/com/gk/firework/Domain/ProductInfo.java                                               |  298 
 src/main/java/com/gk/firework/Domain/DistrictInfo.java                                              |   80 
 src/main/java/com/gk/firework/Service/ServiceImpl/HiddenDangerCheckServiceImpl.java                 |   44 
 src/main/java/com/gk/firework/Mapper/mybatis/SoldNoStockInfoMapper.xml                              |  264 
 src/main/java/com/gk/firework/Controller/PatrolController.java                                      |  593 
 src/main/java/com/gk/firework/Domain/EnterpriseStaff.java                                           |  174 
 src/main/java/com/gk/firework/Mapper/mybatis/WarnContentInfoMapper.xml                              |  265 
 src/main/java/com/gk/firework/Domain/TransportCertificate.java                                      |  631 
 src/main/java/com/gk/firework/Service/ServiceImpl/ContractDetailServiceImpl.java                    |   40 
 src/main/java/com/gk/firework/Service/ServiceImpl/DistrictServiceImpl.java                          |   66 
 src/main/java/com/gk/firework/Domain/ContractUnitDetail.java                                        |  294 
 src/main/java/com/gk/firework/Domain/Vo/PageInfoExtension.java                                      |   32 
 src/main/java/com/gk/firework/Service/DictionaryTypeService.java                                    |   18 
 src/main/java/com/gk/firework/Controller/LicenseController.java                                     |  611 
 src/main/java/com/gk/firework/Domain/Enum/CertificatePersonType.java                                |   41 
 src/main/java/com/gk/firework/Service/ServiceImpl/RoleServiceImpl.java                              |   44 
 src/main/resources/error.setting                                                                    |   34 
 src/main/java/com/gk/firework/Service/PatrolDetailService.java                                      |   12 
 src/main/resources/application.yml                                                                  |   60 
 src/main/java/com/gk/firework/Domain/Utils/IdCardUtil.java                                          |  171 
 src/main/java/com/gk/firework/Domain/EnterpriseStandardization.java                                 |  235 
 src/main/java/com/gk/firework/Mapper/EntryOrderInfoMapper.java                                      |   31 
 src/main/java/com/gk/firework/Service/UserDeadlineService.java                                      |    7 
 src/main/java/com/gk/firework/Mapper/mybatis/AssessApplyMapper.xml                                  |  126 
 src/main/java/com/gk/firework/Config/DataSource/MybatisPlusConfig.java                              |   48 
 src/main/java/com/gk/firework/Domain/ContractFile.java                                              |  160 
 src/main/java/com/gk/firework/Domain/Vo/DailySaleReport.java                                        |   80 
 src/main/java/com/gk/firework/Domain/DeliveryOrderInfo.java                                         |  151 
 src/main/java/com/gk/firework/Mapper/EnterpriseFeedMapper.java                                      |   20 
 src/main/java/com/gk/firework/Mapper/mybatis/ProductInfoMapper.xml                                  |  287 
 src/main/java/com/gk/firework/Domain/StandardProductLeger.java                                      |  197 
 src/main/java/com/gk/firework/Domain/EnterpriseLicense.java                                         |  229 
 src/main/java/com/gk/firework/Config/Log/JsonParamsLogAspect.java                                   |   59 
 src/main/java/com/gk/firework/Domain/Vo/CheckReportVo.java                                          |   52 
 src/main/java/com/gk/firework/Domain/Vo/DeliveryOrderInfoVo.java                                    |   18 
 src/main/java/com/gk/firework/Mapper/TransportCertificateApproachMapper.java                        |   12 
 src/main/java/com/gk/firework/Domain/Vo/AssessApplyAppealVo.java                                    |  169 
 src/main/java/com/gk/firework/Service/ServiceImpl/SoldNoStockServiceImpl.java                       |   96 
 src/main/java/com/gk/firework/Service/ServiceImpl/RegisterServiceImpl.java                          |   88 
 src/main/java/com/gk/firework/Mapper/TransportCertFileMapper.java                                   |   10 
 src/main/java/com/gk/firework/Mapper/mybatis/AppFileInfoMapper.xml                                  |   95 
 src/main/java/com/gk/firework/Domain/RegisterInfo.java                                              |  469 
 src/main/java/com/gk/firework/Mapper/RegisterInfoMapper.java                                        |   16 
 src/main/java/com/gk/firework/Service/ServiceImpl/SaleOrderServiceImpl.java                         |  801 
 src/main/java/com/gk/firework/Mapper/StandProductLegerMapper.java                                   |   16 
 src/main/java/com/gk/firework/Mapper/HiddenDangerReportMapper.java                                  |   35 
 src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertificateFileServiceImpl.java          |   46 
 src/main/java/com/gk/firework/Mapper/TransportCertificateProductMapper.java                         |   12 
 src/main/java/com/gk/firework/Mapper/mybatis/TransportCertificateMapper.xml                         |  481 
 src/main/java/com/gk/firework/Mapper/mybatis/RolePermissionsInfoMapper.xml                          |   55 
 src/main/java/com/gk/firework/Domain/Enum/AssessApplyStatus.java                                    |   28 
 src/main/java/com/gk/firework/Domain/Vo/EnterpriseVo.java                                           |  123 
 src/main/java/com/gk/firework/Service/ServiceImpl/ContractFileServiceImpl.java                      |   42 
 src/main/java/com/gk/firework/Domain/Vo/TransportArrivalVo.java                                     |   28 
 src/main/java/com/gk/firework/Service/RegisterService.java                                          |   17 
 src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseAnnualServiceImpl.java                  |   95 
 src/main/resources/cert/keystorePass-cn.txt                                                         |    1 
 src/main/java/com/gk/firework/Domain/Extension/StockTotal.java                                      |   23 
 src/main/java/com/gk/firework/Service/StandardHiddenDangerLegerService.java                         |   21 
 src/main/java/com/gk/firework/Mapper/StockInfoMapper.java                                           |   66 
 src/main/java/com/gk/firework/Mapper/mybatis/SmsLogInfoMapper.xml                                   |   69 
 src/main/java/com/gk/firework/Service/HiddenDangerMenuService.java                                  |   11 
 src/main/java/com/gk/firework/Domain/Utils/QRCode.java                                              |   43 
 src/main/java/com/gk/firework/Mapper/mybatis/SelfCheckReportMapper.xml                              |  147 
 src/main/java/com/gk/firework/Domain/SelfCheckInfo.java                                             |  171 
 src/main/java/com/gk/firework/Domain/StockInfo.java                                                 |  238 
 src/main/java/com/gk/firework/Service/ServiceImpl/RolePermissionsServiceImpl.java                   |   28 
 src/main/java/com/gk/firework/Mapper/PatrolOrderInfoMapper.java                                     |   26 
 src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseLicenseMapper.xml                            |  210 
 src/main/java/com/gk/firework/Domain/StandardConferenceRecord.java                                  |  211 
 src/main/java/com/gk/firework/Domain/Vo/PatrolOrderVo.java                                          |   75 
 src/main/java/com/gk/firework/Mapper/mybatis/TransportCertProductMapper.xml                         |  172 
 src/main/java/com/gk/firework/Domain/LicenseStorage.java                                            |  191 
 src/main/java/com/gk/firework/Mapper/mybatis/EnterprisePersonMapper.xml                             |  279 
 src/main/java/com/gk/firework/Domain/Vo/CityDataVo.java                                             |  106 
 src/main/java/com/gk/firework/Domain/Vo/Menu.java                                                   |   18 
 src/main/java/com/gk/firework/Mapper/mybatis/StandardSupplyMarketObjectMapper.xml                   |  280 
 src/main/java/com/gk/firework/Mapper/mybatis/UserDeadlineLog.xml                                    |    7 
 src/main/java/com/gk/firework/Mapper/UserInfoMapper.java                                            |   45 
 src/main/java/com/gk/firework/Mapper/mybatis/HiddenDangerCheckCriteriaMapper.xml                    |  149 
 src/main/java/com/gk/firework/Service/HistoryStockService.java                                      |   24 
 src/main/java/com/gk/firework/Controller/Base/BaseController.java                                   |  137 
 src/main/java/com/gk/firework/Domain/Utils/Result.java                                              |   66 
 src/main/java/com/gk/firework/Mapper/mybatis/BlackListMapper.xml                                    |   35 
 src/main/java/com/gk/firework/Domain/SoldNoStockInfo.java                                           |  208 
 src/main/java/com/gk/firework/Mapper/mybatis/CustomerInfoMapper.xml                                 |   57 
 src/main/java/com/gk/firework/Mapper/HiddenDangerCheckResultMapper.java                             |   17 
 src/main/java/com/gk/firework/Domain/Utils/Msg.java                                                 |   69 
 src/main/java/com/gk/firework/Domain/EnterprisePerson.java                                          |  251 
 src/main/java/com/gk/firework/Domain/Vo/EnterpriseStandardizationVo.java                            |  137 
 src/main/resources/cert/sinanoaq.com.jks                                                            |    0 
 src/main/java/com/gk/firework/Mapper/SaleOrderDetailInfoMapper.java                                 |   87 
 src/main/java/com/gk/firework/Service/HiddenDangerCheckService.java                                 |   14 
 src/main/java/com/gk/firework/Service/TransportCertService.java                                     |   28 
 src/main/java/com/gk/firework/Domain/TransportCertificateArrivalRecord.java                         |  133 
 src/main/java/com/gk/firework/Domain/SaleOrderDetailInfo.java                                       |  149 
 src/main/java/com/gk/firework/Mapper/StandardEquipmentLegerMapper.java                              |   17 
 src/main/java/com/gk/firework/Mapper/HiddenDangerCheckCriteriaMapper.java                           |   17 
 src/main/java/com/gk/firework/Domain/BO/DirectionProductBO.java                                     |   39 
 src/main/java/com/gk/firework/Mapper/EnterpriseLicenseMapper.java                                   |   20 
 src/main/java/com/gk/firework/Controller/StatisticsController.java                                  |  452 
 src/main/java/com/gk/firework/Domain/Vo/EnterpriseWarehouseVo.java                                  |  139 
 src/main/java/com/gk/firework/Mapper/LicenseInfoMapper.java                                         |   22 
 src/main/java/com/gk/firework/Domain/Enum/PersonnelCategory.java                                    |   47 
 src/main/java/com/gk/firework/Mapper/mybatis/SaleOrderDetailInfoMapper.xml                          | 1533 +
 src/main/java/com/gk/firework/Domain/Enum/HiddenDangerReportStatus.java                             |   45 
 src/main/java/com/gk/firework/Service/EnterpriseStaffService.java                                   |    7 
 src/main/java/com/gk/firework/Mapper/mybatis/HiddenDangerCheckResultMapper.xml                      |  150 
 src/main/java/com/gk/firework/Domain/Enum/PunishStatus.java                                         |   36 
 src/main/java/com/gk/firework/Domain/RolePermissionsInfo.java                                       |   54 
 src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseStaffServiceImpl.java                   |   11 
 src/main/java/com/gk/firework/Config/Swagger/WebMvcConfig.java                                      |   17 
 src/main/java/com/gk/firework/Domain/EnterpriseAnnual.java                                          |  172 
 src/main/java/com/gk/firework/Domain/Utils/DivideFlagUtil.java                                      |   23 
 src/main/java/com/gk/firework/Service/EnterpriseWarehouseService.java                               |   22 
 src/main/java/com/gk/firework/Mapper/mybatis/HistoryStockMapper.xml                                 |  202 
 src/main/java/com/gk/firework/Domain/ContractDetailInfo.java                                        |  102 
 src/main/java/com/gk/firework/Service/ProductCategoryService.java                                   |   24 
 src/main/java/com/gk/firework/Domain/Vo/SortTime.java                                               |   59 
 src/main/java/com/gk/firework/Service/ServiceImpl/LicenseServiceImpl.java                           |  407 
 generator/liy.xml                                                                                   |   37 
 src/main/java/com/gk/firework/Domain/StandardDeviceToolsLeger.java                                  |  223 
 src/main/java/com/gk/firework/Controller/HiddenDangerController.java                                |  145 
 src/main/java/com/gk/firework/Domain/Vo/AppFileVo.java                                              |   17 
 src/main/java/com/gk/firework/Domain/Vo/EnterpriseLicenseVo.java                                    |  125 
 src/main/java/com/gk/firework/Mapper/mybatis/StandardTemplate1Mapper.xml                            |  325 
 src/main/java/com/gk/firework/Mapper/ProductCodeInfoMapper.java                                     |   29 
 src/main/java/com/gk/firework/Service/ServiceImpl/ContractOrderServiceImpl.java                     |  774 
 src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseDocumentServiceImpl.java                |  194 
 src/main/java/com/gk/firework/Mapper/mybatis/ProductThresholdInfoMapper.xml                         |   20 
 src/main/java/com/gk/firework/Domain/Utils/SignUtils.java                                           |   69 
 src/main/java/com/gk/firework/Domain/Vo/ProductCodeVo.java                                          |   46 
 src/main/java/com/gk/firework/Domain/Utils/JsonUtils.java                                           |   48 
 src/main/java/com/gk/firework/Domain/Exception/Handler/CustomExceptionHandler.java                  |   24 
 src/main/java/com/gk/firework/Mapper/mybatis/DictionaryTypeInfoMapper.xml                           |  176 
 src/main/java/com/gk/firework/Domain/PatrolOrderInfo.java                                           |  119 
 src/main/java/com/gk/firework/Domain/Vo/WarnContentVo.java                                          |   86 
 src/main/java/com/gk/firework/Domain/TransportCertProduct.java                                      |  158 
 src/main/java/com/gk/firework/Mapper/StandHiddenDangerLegerMapper.java                              |   15 
 src/main/java/com/gk/firework/Controller/EntryController.java                                       |  237 
 src/main/java/com/gk/firework/Service/EntryDetailService.java                                       |   26 
 src/main/java/com/gk/firework/Service/ServiceImpl/WarningServiceImpl.java                           |   46 
 src/main/java/com/gk/firework/Mapper/mybatis/HiddenDangerMenuMapper.xml                             |  175 
 src/main/java/com/gk/firework/Config/Oauth2/OAuth2Config.java                                       |   70 
 src/main/java/com/gk/firework/Service/ServiceImpl/StandardLawListServiceImpl.java                   |  137 
 src/main/java/com/gk/firework/Mapper/ContractOrderInfoMapper.java                                   |   33 
 src/main/java/com/gk/firework/Mapper/mybatis/DictionaryItemInfoMapper.xml                           |  217 
 src/main/java/com/gk/firework/Service/SmsLogService.java                                            |   11 
 src/main/java/com/gk/firework/Service/ContractLogService.java                                       |   10 
 src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertificatePersonServiceImpl.java        |   43 
 src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertificateServiceImpl.java              |  838 
 src/main/resources/application-sznmsprov.yml                                                        |   96 
 src/main/resources/printTemplate/certificatelicense.docx                                            |    0 
 src/main/java/com/gk/firework/Domain/Vo/ContractOrderVo.java                                        |   44 
 src/main/java/com/gk/firework/Service/ServiceImpl/StandardTemplate1ServiceImpl.java                 |  160 
 src/main/java/com/gk/firework/Domain/EnterpriseApply.java                                           |  909 
 src/main/java/com/gk/firework/Domain/Enum/ProvinceCode.java                                         |   69 
 src/main/java/com/gk/firework/Scheduls/DL/DeviceIdRobot.java                                        |   68 
 src/main/java/com/gk/firework/Mapper/mybatis/ContractLogInfoMapper.xml                              |   56 
 src/main/java/com/gk/firework/Domain/SaleProductInfo.java                                           |  130 
 src/main/java/com/gk/firework/Mapper/mybatis/StandardRewardRecordMapper.xml                         |  268 
 src/main/java/com/gk/firework/Config/Oauth2/ResourceServerConfig.java                               |   50 
 src/main/java/com/gk/firework/Domain/Log/JsonParams.java                                            |   12 
 src/main/java/com/gk/firework/Domain/EnterpriseDocument.java                                        |  196 
 src/main/java/com/gk/firework/Service/PermissionService.java                                        |   14 
 src/main/java/com/gk/firework/Domain/Vo/ContractStatus.java                                         |   16 
 src/main/java/com/gk/firework/Mapper/DeliveryDetailInfoMapper.java                                  |   32 
 src/main/resources/application-xjzwprov.yml                                                         |   90 
 src/main/java/com/gk/firework/Mapper/mybatis/TransportCertificateFileMapper.xml                     |  189 
 src/main/java/com/gk/firework/Service/ContractOrderService.java                                     |   40 
 src/main/java/com/gk/firework/Mapper/mybatis/ProductPriceInfoMapper.xml                             |   80 
 src/main/java/com/gk/firework/Service/WarnContentService.java                                       |   30 
 src/main/java/com/gk/firework/Service/ServiceImpl/HiddenDangerReportServiceImpl.java                |  464 
 src/main/java/com/gk/firework/Mapper/mybatis/StandardLawListMapper.xml                              |  296 
 src/main/java/com/gk/firework/Service/ProductService.java                                           |   58 
 src/main/java/com/gk/firework/Service/StaticStockService.java                                       |   18 
 src/main/java/com/gk/firework/Service/StandardDeviceToolsLegerService.java                          |   20 
 src/main/java/com/gk/firework/Mapper/mybatis/AccessAssessApplyMapper.xml                            |  172 
 src/main/java/com/gk/firework/Service/SaleOrderDetailService.java                                   |  136 
 src/main/java/com/gk/firework/Domain/Vo/HiddenDangerTableRow.java                                   |  292 
 src/main/java/com/gk/firework/Service/EnterpriseAnnualService.java                                  |   21 
 src/main/java/com/gk/firework/Service/ProductLocusService.java                                      |   22 
 src/main/java/com/gk/firework/Service/StandardTemplate1Service.java                                 |   22 
 src/main/java/com/gk/firework/Domain/Utils/PageInfo.java                                            |  143 
 src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseWarehouseMapper.xml                          |   45 
 src/main/java/com/gk/firework/Scheduls/WarningTask/StockWarnTask.java                               |  148 
 src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertificateProductSeriveImpl.java        |   37 
 src/main/java/com/gk/firework/Mapper/mybatis/StandardEducationLegerMapper.xml                       |  319 
 src/main/java/com/gk/firework/Domain/Vo/EntryUtils.java                                             |   22 
 src/main/java/com/gk/firework/Domain/Enum/MsgContentType.java                                       |   31 
 src/main/java/com/gk/firework/Service/ServiceImpl/SelfCheckReportServiceImpl.java                   |  191 
 src/main/java/com/gk/firework/Domain/TransportCertificatePerson.java                                |  145 
 src/main/java/com/gk/firework/Domain/Vo/Product2JsonVo.java                                         |  171 
 src/main/java/com/gk/firework/Mapper/HelpDocInfoMapper.java                                         |   15 
 src/main/java/com/gk/firework/Domain/TransportCert.java                                             |  301 
 src/main/java/com/gk/firework/Service/DistrictService.java                                          |   21 
 src/main/java/com/gk/firework/Service/SaleProductService.java                                       |   12 
 src/main/java/com/gk/firework/Scheduls/Test.java                                                    |  239 
 src/main/java/com/gk/firework/Service/ProductPriceService.java                                      |   13 
 src/main/java/com/gk/firework/Controller/FlowController.java                                        |   56 
 src/main/java/com/gk/firework/Config/ServiceContext/ApplicationContextUtil.java                     |   32 
 src/main/java/com/gk/firework/Service/ServiceImpl/AccessAssessApplyServiceImpl.java                 |  239 
 src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseAnnualMapper.xml                             |  173 
 src/main/java/com/gk/firework/Domain/UserRolesInfo.java                                             |   55 
 src/main/java/com/gk/firework/Mapper/mybatis/HiddenDangerReportDetailMapper.xml                     |  261 
 src/main/java/com/gk/firework/Mapper/HiddenDangerReportDetailMapper.java                            |   16 
 src/main/resources/log4j.properties                                                                 |   14 
 src/main/java/com/gk/firework/Domain/Vo/StandardTemplate1Vo.java                                    |   86 
 src/main/java/com/gk/firework/Mapper/StandardConferenceRecordMapper.java                            |   15 
 src/main/java/com/gk/firework/Service/TransportCarrierService.java                                  |   24 
 src/main/java/com/gk/firework/Service/EnterprisePersonService.java                                  |   22 
 src/main/java/com/gk/firework/Mapper/mybatis/StandardConferenceRecordMapper.xml                     |  259 
 src/main/java/com/gk/firework/Config/WebSocket/WebSocketConfig.java                                 |   14 
 src/main/java/com/gk/firework/Service/ServiceImpl/ContractLogServiceImpl.java                       |   16 
 src/main/java/com/gk/firework/Service/ServiceImpl/ProductCodeServiceImpl.java                       |   47 
 src/main/java/com/gk/firework/Domain/Vo/TransportCertVo.java                                        |  162 
 src/main/java/com/gk/firework/Mapper/mybatis/StandHiddenDangerLegerMapper.xml                       |  279 
 src/main/java/com/gk/firework/Service/StandardConferenceRecordService.java                          |   21 
 src/main/java/com/gk/firework/Mapper/TransportPersonMapper.java                                     |   10 
 src/main/java/com/gk/firework/Domain/Utils/FileOptUtils.java                                        |   26 
 src/main/java/com/gk/firework/Config/Cors/CorsFilter.java                                           |   39 
 src/main/java/com/gk/firework/Mapper/ContractLogInfoMapper.java                                     |   16 
 src/main/java/com/gk/firework/Mapper/mybatis/ContractUnitDetailMapper.xml                           |  307 
 src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertProductServiceImpl.java              |   39 
 src/main/java/com/gk/firework/Mapper/mybatis/AuthorizationInfoMapper.xml                            |   31 
 src/main/java/com/gk/firework/Mapper/ProductInfoMapper.java                                         |   49 
 src/main/java/com/gk/firework/Mapper/StandDeviceToolsLegerMapper.java                               |   16 
 src/main/java/com/gk/firework/Service/ServiceImpl/StandardGuardRollServiceImpl.java                 |   90 
 src/main/java/com/gk/firework/Service/HiddenDangerReportDetailService.java                          |   13 
 src/main/java/com/gk/firework/Mapper/ProductThresholdInfoMapper.java                                |   10 
 src/main/java/com/gk/firework/Service/ServiceImpl/StandardRewardRecordServiceImpl.java              |   88 
 src/main/java/com/gk/firework/Service/PatrolOrderService.java                                       |   15 
 src/main/java/com/gk/firework/Service/ServiceImpl/ProductThresholdServiceImpl.java                  |   15 
 src/main/java/com/gk/firework/Scheduls/ReportTask/AsyncGetStockTask.java                            |   31 
 src/main/java/com/gk/firework/Domain/Utils/Base64Encrypt.java                                       |   33 
 src/main/java/com/gk/firework/Service/ServiceImpl/ProductLocusServiceImpl.java                      |  130 
 src/main/java/com/gk/firework/Domain/Enum/EnterpriseSize.java                                       |   45 
 src/main/java/com/gk/firework/Service/TransportPersonService.java                                   |   21 
 src/main/resources/application-testOnline.yml                                                       |   91 
 src/main/java/com/gk/firework/Domain/CustomerInfo.java                                              |  216 
 src/main/java/com/gk/firework/Scheduls/WarningTask/PurchaseWarnTask.java                            |  152 
 src/main/java/com/gk/firework/Mapper/mybatis/DeliveryOrderInfoMapper.xml                            |  179 
 src/main/java/com/gk/firework/Mapper/EntryDetailInfoMapper.java                                     |   35 
 src/main/java/com/gk/firework/Mapper/mybatis/ContractFileMapper.xml                                 |  103 
 src/main/java/com/gk/firework/Domain/SaleOrderInfo.java                                             |  249 
 src/main/java/com/gk/firework/Domain/RoleInfo.java                                                  |  143 
 src/main/java/com/gk/firework/Domain/UserInfo.java                                                  |  356 
 src/main/java/com/gk/firework/Domain/StaticStock.java                                               |  278 
 src/main/java/com/gk/firework/Mapper/SaleOrderInfoMapper.java                                       |   73 
 src/main/java/com/gk/firework/Mapper/EnterprisePersonMapper.java                                    |   17 
 src/main/java/com/gk/firework/Controller/StandardController.java                                    |  540 
 src/main/java/com/gk/firework/Mapper/mybatis/PatrolDetailInfoMapper.xml                             |  118 
 src/main/java/com/gk/firework/Domain/Enum/MsgType.java                                              |   37 
 src/main/java/com/gk/firework/Domain/ContractLogInfo.java                                           |   80 
 src/main/java/com/gk/firework/Domain/EntryOrderInfo.java                                            |  171 
 src/main/java/com/gk/firework/Mapper/UserRolesInfoMapper.java                                       |   18 
 src/main/java/com/gk/firework/Domain/Utils/BooleanReason.java                                       |   48 
 src/main/java/com/gk/firework/Mapper/RoleInfoMapper.java                                            |   26 
 src/main/java/com/gk/firework/Mapper/mybatis/EntryOrderInfoMapper.xml                               |  200 
 src/main/java/com/gk/firework/Scheduls/Task/CheckEnterpriseTask.java                                |  145 
 src/main/java/com/gk/firework/Service/AuthorizationService.java                                     |   22 
 src/main/java/com/gk/firework/Domain/Utils/HexUtil.java                                             |   88 
 src/main/java/com/gk/firework/Service/ServiceImpl/SaleProductServiceImpl.java                       |   22 
 src/main/java/com/gk/firework/Domain/Utils/DateUtils.java                                           |   31 
 src/main/java/com/gk/firework/Service/EnterpriseStandardizationService.java                         |   25 
 src/main/java/com/gk/firework/Service/ServiceImpl/PatrolOrderServiceImpl.java                       |   48 
 src/main/resources/cert/sinanoaq.cn.jks                                                             |    0 
 src/main/java/com/gk/firework/Service/EnterpriseService.java                                        |  210 
 src/main/java/com/gk/firework/Service/ServiceImpl/ControlPrintParamServiceImpl.java                 |  155 
 src/main/java/com/gk/firework/Domain/Vo/HelpDocVo.java                                              |   20 
 src/main/java/com/gk/firework/Domain/Utils/CommonUtil.java                                          |  139 
 src/main/java/com/gk/firework/Mapper/AppFileInfoMapper.java                                         |   25 
 src/main/java/com/gk/firework/Mapper/ProductLocusInfoMapper.java                                    |   21 
 src/main/java/com/gk/firework/Service/EnterpriseApplyService.java                                   |   18 
 src/main/java/com/gk/firework/Domain/EnterpriseFeed.java                                            |  145 
 src/main/java/com/gk/firework/Domain/TransportCertificateFile.java                                  |  185 
 src/main/java/com/gk/firework/Domain/Enterprise.java                                                |  870 
 src/main/java/com/gk/firework/Mapper/EnterpriseDocumentMapper.java                                  |   17 
 src/main/java/com/gk/firework/Mapper/mybatis/WarningInfoMapper.xml                                  |   47 
 src/main/java/com/gk/firework/Scheduls/GenerateCode/GenerateCodeTask.java                           |  129 
 src/main/java/com/gk/firework/Service/ServiceImpl/LicenseStorageServiceImpl.java                    |   29 
 src/main/java/com/gk/firework/Service/ServiceImpl/UserRolesServiceImpl.java                         |   20 
 src/main/java/com/gk/firework/Domain/Vo/SaleDetailVo.java                                           |   40 
 src/main/java/com/gk/firework/Service/ServiceImpl/HistoryStockServiceImpl.java                      |  111 
 src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseStandardizationMapper.xml                    |  111 
 src/main/java/com/gk/firework/Controller/UserController.java                                        |  802 
 src/main/java/com/gk/firework/Config/Swagger/SwaggerConfig.java                                     |   42 
 src/main/java/com/gk/firework/Scheduls/WarningTask/TransportWarnTask.java                           |   95 
 src/main/java/com/gk/firework/Domain/DO/ProductDO.java                                              |   20 
 src/main/java/com/gk/firework/Mapper/DictionaryTypeInfoMapper.java                                  |   29 
 src/main/java/com/gk/firework/Mapper/mybatis/LicenseInfoMapper.xml                                  |  233 
 src/main/java/com/gk/firework/Domain/StandardEquipmentLeger.java                                    |  213 
 src/main/java/com/gk/firework/Config/Oauth2/IRedisService.java                                      |  180 
 src/main/java/com/gk/firework/Service/ControlPrintParamService.java                                 |   25 
 src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseApplyServiceImpl.java                   |   95 
 src/main/java/com/gk/firework/Service/ServiceImpl/SaleOrderDetailServiceImpl.java                   |  615 
 src/main/java/com/gk/firework/Service/ServiceImpl/HelpDocServiceImpl.java                           |   44 
 src/main/java/com/gk/firework/Domain/StandardTemplate1.java                                         |  233 
 src/main/java/com/gk/firework/Mapper/mybatis/TransportCarrierMapper.xml                             |  195 
 src/main/java/com/gk/firework/Domain/Vo/ApprovalVo.java                                             |   28 
 src/main/java/com/gk/firework/Domain/Vo/SelfCheckReportVo.java                                      |  125 
 src/main/java/com/gk/firework/Service/StandardGuardRollService.java                                 |   20 
 src/main/java/com/gk/firework/Domain/ContractOrderInfo.java                                         |  696 
 src/main/java/com/gk/firework/Domain/Vo/ProductThresholdVo.java                                     |   28 
 src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertificateArrivalRecordServiceImpl.java |   54 
 src/main/java/com/gk/firework/Domain/Vo/EnterpriseFeedVo.java                                       |   18 
 src/main/resources/application-aliyun-prod.yml                                                      |   91 
 src/main/java/com/gk/firework/Config/Oauth2/LoginAuthenticationFilter.java                          |   77 
 src/main/java/com/gk/firework/Service/ServiceImpl/CustomerServiceImpl.java                          |  161 
 src/main/java/com/gk/firework/Domain/Exception/BusinessException.java                               |   33 
 src/main/java/com/gk/firework/Domain/Utils/MatrixToImageWriter.java                                 |   82 
 src/main/java/com/gk/firework/Service/ServiceImpl/BlackListServiceImpl.java                         |  139 
 src/main/java/com/gk/firework/Domain/HiddenDangerCheckContent.java                                  |  148 
 src/main/java/com/gk/firework/Mapper/mybatis/HiddenDangerReportMapper.xml                           |  525 
 src/main/java/com/gk/firework/Mapper/mybatis/TransportPersonMapper.xml                              |  190 
 src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseFeedServiceImpl.java                    |  183 
 src/main/java/com/gk/firework/Mapper/EnterpriseWarehouseMapper.java                                 |   17 
 src/main/java/com/gk/firework/Mapper/StandardTemplate1Mapper.java                                   |   17 
 src/main/java/com/gk/firework/Domain/Utils/StringUtils.java                                         |  219 
 src/main/java/com/gk/firework/Mapper/HiddenDangerCheckTypeMapper.java                               |   17 
 src/main/java/com/gk/firework/Domain/Vo/TransportArrivalSum.java                                    |   47 
 src/main/java/com/gk/firework/Mapper/EnterpriseResourceMapper.java                                  |   17 
 src/main/java/com/gk/firework/Domain/Enum/EnterpriseStatus.java                                     |   42 
 src/main/java/com/gk/firework/Service/ServiceImpl/HiddenDangerReportDetailServiceImpl.java          |   38 
 src/main/java/com/gk/firework/Config/ThreadExecutor/ExecutorConfig.java                             |   80 
 src/main/java/com/gk/firework/Mapper/mybatis/ProductCodeInfoMapper.xml                              |  206 
 src/main/java/com/gk/firework/Service/ProductThresholdService.java                                  |   11 
 src/main/java/com/gk/firework/Domain/WarnContentInfo.java                                           |  179 
 src/main/java/com/gk/firework/Domain/DictionaryTypeInfo.java                                        |  132 
 src/main/java/com/gk/firework/Mapper/TransportCarrierMapper.java                                    |   10 
 src/main/java/com/gk/firework/Service/ServiceImpl/SecuritySupervisoryServiceImpl.java               |   34 
 src/main/java/com/gk/firework/Mapper/ProductPriceInfoMapper.java                                    |   24 
 src/main/java/com/gk/firework/Mapper/mybatis/HiddenDangerCheckContentMapper.xml                     |  256 
 src/main/java/com/gk/firework/Service/SelfCheckReportService.java                                   |   24 
 src/main/java/com/gk/firework/Domain/Utils/UploadUtil.java                                          |   49 
 src/main/java/com/gk/firework/Domain/Vo/EnterpriseExportVo.java                                     |  275 
 src/main/java/com/gk/firework/Service/ProductCodeService.java                                       |   19 
 src/main/java/com/gk/firework/Service/ServiceImpl/TransportCarrierServiceImpl.java                  |  112 
 src/main/java/com/gk/firework/Domain/EnterpriseWarehouse.java                                       |  239 
 src/main/java/com/gk/firework/Service/ServiceImpl/ProductServiceImpl.java                           |  330 
 src/main/java/com/gk/firework/Domain/Enum/CertificateStatus.java                                    |   45 
 src/main/java/com/gk/firework/Domain/HiddenDangerCheckResult.java                                   |  133 
 src/main/java/com/gk/firework/Service/ServiceImpl/StandardEducationLegerServiceImpl.java            |  121 
 src/main/java/com/gk/firework/Mapper/mybatis/StockInfoMapper.xml                                    | 1829 +
 src/main/java/com/gk/firework/Controller/StockController.java                                       |  904 
 src/main/java/com/gk/firework/Service/CustomerService.java                                          |   25 
 src/main/java/com/gk/firework/Config/Oauth2/OauthUser.java                                          |  107 
 src/main/java/com/gk/firework/Service/AccessAssessApplyService.java                                 |   35 
 src/main/java/com/gk/firework/Service/ServiceImpl/TransportPersonServiceImpl.java                   |  118 
 src/main/java/com/gk/firework/Domain/BO/ProductLocusInfoBO.java                                     |   16 
 src/main/java/com/gk/firework/Mapper/mybatis/SaleOrderInfoMapper.xml                                | 1112 
 src/main/java/com/gk/firework/Mapper/mybatis/LicenseStorageMapper.xml                               |   26 
 src/main/java/com/gk/firework/Domain/Enum/AssessAppealStatus.java                                   |   40 
 src/main/java/com/gk/firework/Controller/LoginController.java                                       |  442 
 generator/yufei.xml                                                                                 |   45 
 src/main/java/com/gk/firework/Domain/Enum/ErrorCode.java                                            |   61 
 src/main/java/com/gk/firework/Config/Oauth2/RedisKeyEnum.java                                       |   56 
 src/main/java/com/gk/firework/Service/ServiceImpl/StockServiceImpl.java                             |  899 
 generator/生成语句.txt                                                                                  |    1 
 src/main/java/com/gk/firework/Service/LicenseStorageService.java                                    |   14 
 src/main/java/com/gk/firework/Service/StandardRewardRecordService.java                              |   19 
 src/main/java/com/gk/firework/Service/EntryService.java                                             |   47 
 src/main/java/com/gk/firework/Service/StandardProductLegerService.java                              |   21 
 src/main/java/com/gk/firework/Domain/PatrolDetailInfo.java                                          |  181 
 src/main/java/com/gk/firework/Service/DeliveryDetailService.java                                    |   36 
 src/main/java/com/gk/firework/Service/SoldNoStockService.java                                       |   27 
 src/main/java/com/gk/firework/Controller/DeliveryController.java                                    |  469 
 src/main/java/com/gk/firework/Domain/Utils/JacksonObjectMapper.java                                 |   27 
 src/main/java/com/gk/firework/Mapper/EnterpriseMapper.java                                          |   71 
 src/main/java/com/gk/firework/Domain/Utils/WebSocketClientManager.java                              |   53 
 src/main/java/com/gk/firework/Domain/Vo/NoEntryVo.java                                              |   37 
 src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertServiceImpl.java                     |  373 
 src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseResourceMapper.xml                           |  187 
 src/main/java/com/gk/firework/Domain/Vo/LicenseVo.java                                              |   49 
 src/main/java/com/gk/firework/Mapper/SmsLogInfoMapper.java                                          |   20 
 src/main/java/com/gk/firework/Config/Cors/CorsConfig.java                                           |   17 
 src/main/java/com/gk/firework/Service/WarningService.java                                           |   14 
 src/main/java/com/gk/firework/Mapper/TransportCertProductMapper.java                                |   10 
 src/main/java/com/gk/firework/Mapper/HistoryStockMapper.java                                        |   28 
 src/main/java/com/gk/firework/Domain/Utils/SpringBeanUtil.java                                      |   64 
 src/main/java/com/gk/firework/Domain/StandardLawList.java                                           |  281 
 src/main/java/com/gk/firework/Service/ServiceImpl/ContractUnitDetailServiceImpl.java                |  166 
 src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseServiceImpl.java                        | 1566 +
 src/main/java/com/gk/firework/Mapper/mybatis/HiddenDangerCheckTypeMapper.xml                        |  136 
 src/main/java/com/gk/firework/Domain/Utils/ConfigUtil.java                                          |   39 
 src/main/java/com/gk/firework/Config/Oauth2/WebSecurityConfig.java                                  |   85 
 src/main/java/com/gk/firework/Mapper/SelfCheckInfoMapper.java                                       |   27 
 src/main/java/com/gk/firework/Service/ServiceImpl/StandardDeviceToolsLegerServiceImpl.java          |   91 
 src/main/java/com/gk/firework/Service/ServiceImpl/EnterprisePersonServiceImpl.java                  |  219 
 src/main/java/com/gk/firework/Mapper/DistrictInfoMapper.java                                        |   23 
 src/main/java/com/gk/firework/Service/ServiceImpl/StandardProductLegerServiceImpl.java              |   90 
 src/main/java/com/gk/firework/Mapper/WarnContentInfoMapper.java                                     |   34 
 src/main/java/com/gk/firework/Mapper/TransportCertificateMapper.java                                |   23 
 src/main/java/com/gk/firework/Domain/Enum/AssessPunishment.java                                     |   19 
 src/main/java/com/gk/firework/Mapper/mybatis/TransportCertFileMapper.xml                            |  114 
 src/main/java/com/gk/firework/Controller/WarningController.java                                     |  577 
 src/main/java/com/gk/firework/Service/ContractDetailService.java                                    |   19 
 src/main/java/com/gk/firework/Domain/TransportCertFile.java                                         |   94 
 src/main/java/com/gk/firework/Mapper/mybatis/PatrolOrderInfoMapper.xml                              |  160 
 src/main/java/com/gk/firework/Domain/Vo/SaleOrderVo.java                                            |   13 
 src/main/java/com/gk/firework/Domain/Vo/EnterpriseDocumentVo.java                                   |   97 
 src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseWarehouseServiceImpl.java               |  212 
 src/main/java/com/gk/firework/Mapper/ProductCategoryMapper.java                                     |   12 
 src/main/java/com/gk/firework/Scheduls/AssessTask/EnforcePunishmentTask.java                        |  101 
 src/main/java/com/gk/firework/Domain/TransportCarrier.java                                          |  197 
 src/main/resources/application-xj8105prov.yml                                                       |   90 
 src/main/java/com/gk/firework/Domain/Vo/EnterprisePersonVo.java                                     |  155 
 src/main/java/com/gk/firework/Controller/DictionaryController.java                                  |  333 
 src/main/java/com/gk/firework/Mapper/mybatis/UserRolesInfoMapper.xml                                |   50 
 src/main/java/com/gk/firework/Service/ServiceImpl/ProductPriceServiceImpl.java                      |   32 
 src/main/java/com/gk/firework/Mapper/WarningInfoMapper.java                                         |   20 
 src/main/java/com/gk/firework/Scheduls/AssessTask/RecoverFromPunishmentTask.java                    |  159 
 src/main/java/com/gk/firework/Domain/Utils/JaxbUtils.java                                           |   92 
 src/main/java/com/gk/firework/Domain/DeliveryDetailInfo.java                                        |  115 
 src/main/java/com/gk/firework/Config/Oauth2/AccessTokenFilter.java                                  |  214 
 src/main/java/com/gk/firework/Service/ServiceImpl/EntryDetailServiceImpl.java                       |  108 
 src/main/java/com/gk/firework/Domain/StandardHiddenDangerLeger.java                                 |  236 
 src/main/java/com/gk/firework/Mapper/DeliveryOrderInfoMapper.java                                   |   29 
 src/main/java/com/gk/firework/Mapper/SoldNoStockInfoMapper.java                                     |   31 
 src/main/java/com/gk/firework/Domain/Vo/ProductCodePrint.java                                       |   56 
 src/main/java/com/gk/firework/Config/Cors/MyMvcConfigurer.java                                      |   65 
 src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseLicenseServiceImpl.java                 |  222 
 src/main/resources/application-aliyun-test.yml                                                      |   91 
 src/main/java/com/gk/firework/Service/AssessApplyService.java                                       |   38 
 src/main/java/com/gk/firework/Service/ServiceImpl/StandardHiddenDangerLegerServiceImpl.java         |   88 
 src/main/java/com/gk/firework/Service/ServiceImpl/HiddenDangerMenuServiceImpl.java                  |   22 
 src/main/java/com/gk/firework/Mapper/DictionaryItemInfoMapper.java                                  |   33 
 src/main/java/com/gk/firework/Config/DataSource/DataSourceConfig.java                               |   19 
 src/main/java/com/gk/firework/Controller/AssessApplyController.java                                 |  185 
 src/main/java/com/gk/firework/Service/DictionaryItemService.java                                    |   21 
 src/main/java/com/gk/firework/Domain/Vo/RegisterVo.java                                             |  155 
 src/main/java/com/gk/firework/Mapper/mybatis/UserInfoMapper.xml                                     |  417 
 src/main/resources/application-prod.yml                                                             |   91 
 src/main/java/com/gk/firework/Service/UserRolesService.java                                         |    9 
 src/main/java/com/gk/firework/Mapper/mybatis/SaleProductInfoMapper.xml                              |   27 
 src/main/java/com/gk/firework/Mapper/StaticStockMapper.java                                         |   14 
 src/main/java/com/gk/firework/Domain/Utils/WebUtils.java                                            |  197 
 src/main/java/com/gk/firework/Mapper/mybatis/StandProductLegerMapper.xml                            |  245 
 src/main/java/com/gk/firework/Service/ServiceImpl/DictionaryItemServiceImpl.java                    |   64 
 src/main/java/com/gk/firework/Scheduls/WarningTask/MessageSendTask.java                             |  317 
 src/main/java/com/gk/firework/Service/ServiceImpl/DeliveryDetailServiceImpl.java                    |  173 
 src/main/java/com/gk/firework/Service/UserService.java                                              |   47 
 src/main/java/com/gk/firework/Service/ServiceImpl/UserDeadlineServiceImpl.java                      |   11 
 src/main/java/com/gk/firework/Domain/AppFileInfo.java                                               |  119 
 src/main/java/com/gk/firework/Mapper/SaleProductInfoMapper.java                                     |   16 
 src/main/java/com/gk/firework/Mapper/mybatis/HelpDocInfoMapper.xml                                  |   36 
 src/main/java/com/gk/firework/Mapper/mybatis/StandDeviceToolsLegerMapper.xml                        |  268 
 src/main/java/com/gk/firework/Mapper/CustomerInfoMapper.java                                        |   16 
 src/main/resources/application-xjprov.yml                                                           |   90 
 src/main/java/com/gk/firework/Service/ExcelExportService.java                                       |   41 
 src/main/java/com/gk/firework/Domain/AssessApply.java                                               |  287 
 src/main/java/com/gk/firework/Service/EnterpriseResourceService.java                                |   12 
 src/main/java/com/gk/firework/Controller/RoleController.java                                        |  183 
 src/main/resources/application-test.yml                                                             |   91 
 src/main/java/com/gk/firework/Mapper/mybatis/DeliveryDetailInfoMapper.xml                           |  342 
 src/main/java/com/gk/firework/Service/ServiceImpl/WarnContentServiceImpl.java                       |  119 
 src/main/java/com/gk/firework/Domain/EntryDetailInfo.java                                           |  165 
 src/main/java/com/gk/firework/Domain/TransportCertificateApproach.java                              |   95 
 src/main/java/com/gk/firework/Domain/UserDeadlineOperationLog.java                                  |   85 
 src/main/java/com/gk/firework/Domain/Utils/Properties.java                                          |  206 
 src/main/java/com/gk/firework/Mapper/mybatis/ProductLocusInfoMapper.xml                             |  145 
 src/main/java/com/gk/firework/Service/ServiceImpl/ExcelExportServiceImpl.java                       | 1767 +
 src/main/java/com/gk/firework/Domain/Utils/BeanProperty.java                                        |   22 
 src/main/resources/application-xjbackprov.yml                                                       |   90 
 src/main/java/com/gk/firework/Domain/ProductCodeInfo.java                                           |  177 
 src/main/java/com/gk/firework/Mapper/SecuritySupervisoryMapper.java                                 |   10 
 src/main/java/com/gk/firework/Service/ServiceImpl/PermissionServiceImpl.java                        |  142 
 src/main/java/com/gk/firework/Mapper/AccessAssessApplyMapper.java                                   |   27 
 src/main/java/com/gk/firework/Config/DataSource/MyBatisConfigOne.java                               |   80 
 src/main/java/com/gk/firework/Service/DeliveryOrderService.java                                     |   38 
 src/main/java/com/gk/firework/Mapper/mybatis/TransportCertificateProductMapper.xml                  |   23 
 src/main/java/com/gk/firework/Domain/HiddenDangerCheckCriteria.java                                 |  147 
 src/main/java/com/gk/firework/Mapper/RolePermissionsInfoMapper.java                                 |   23 
 src/main/java/com/gk/firework/Mapper/TransportCertificateArrivalRecordMapper.java                   |   17 
 src/main/java/com/gk/firework/Mapper/mybatis/ContractDetailInfoMapper.xml                           |   99 
 src/main/java/com/gk/firework/Service/ServiceImpl/SelfCheckServiceImpl.java                         |   51 
 src/main/java/com/gk/firework/Service/ServiceImpl/StandardConferenceRecordServiceImpl.java          |   91 
 src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertificateApproachServiceImpl.java      |   23 
 src/main/java/com/gk/firework/Service/LicenseService.java                                           |   41 
 src/main/java/com/gk/firework/Mapper/BlackListMapper.java                                           |   15 
 src/main/java/com/gk/firework/Domain/Utils/ExcelProperty.java                                       |  100 
 src/main/java/com/gk/firework/Mapper/ContractDetailInfoMapper.java                                  |   29 
 src/main/java/com/gk/firework/Controller/BlackListController.java                                   |   44 
 src/main/java/com/gk/firework/Domain/Vo/EnterpriseDataVo.java                                       |   55 
 src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertFileServiceImpl.java                 |   32 
 src/main/java/com/gk/firework/Service/BlackListService.java                                         |   21 
 src/main/java/com/gk/firework/Domain/Vo/UserVo.java                                                 |   89 
 src/main/resources/printTemplate/certificatelicenseapply.docx                                       |    0 
 src/main/java/com/gk/firework/Mapper/mybatis/DistrictInfoMapper.xml                                 |   80 
 src/main/java/com/gk/firework/Service/HiddenDangerReportService.java                                |   41 
 src/main/java/com/gk/firework/Mapper/PatrolDetailInfoMapper.java                                    |   25 
 src/main/java/com/gk/firework/Domain/StandardGuardRoll.java                                         |  213 
 src/main/java/com/gk/firework/Mapper/ContractUnitDetailMapper.java                                  |   15 
 src/main/java/com/gk/firework/Mapper/StandardEducationLegerMapper.java                              |   15 
 src/main/java/com/gk/firework/Domain/Utils/FilterObject.java                                        |   42 
 src/main/java/com/gk/firework/Service/TransportCertificateFileService.java                          |   14 
 src/main/java/com/gk/firework/Domain/Vo/GenerateCode.java                                           |   45 
 src/main/java/com/gk/firework/Service/TransportCertificateApproachService.java                      |    9 
 src/main/java/com/gk/firework/Domain/DTO/JiangWaiDeadlineReqDTO.java                                |   30 
 src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseStandardizationServiceImpl.java         |  209 
 src/main/java/com/gk/firework/Service/ServiceImpl/AssessApplyServiceImpl.java                       |  286 
 src/main/java/com/gk/firework/Controller/SaleOrderController.java                                   | 1016 
 src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseApplyMapper.xml                              |   74 
 src/main/java/com/gk/firework/Service/ServiceImpl/AuthorizationServiceImpl.java                     |   49 
 src/main/java/com/gk/firework/Service/TransportCertificateProductService.java                       |   15 
 src/main/java/com/gk/firework/Config/Oauth2/UserServiceDetail.java                                  |   56 
 src/main/java/com/gk/firework/Service/StandardEducationLegerService.java                            |   22 
 src/main/resources/application-xj8103prov.yml                                                       |   91 
 src/main/java/com/gk/firework/Config/Oauth2/OauthRole.java                                          |   71 
 src/main/java/com/gk/firework/Service/ServiceImpl/StaticStockServiceImpl.java                       |   34 
 src/main/java/com/gk/firework/Domain/Utils/BeanUtils.java                                           |  223 
 src/main/java/com/gk/firework/Controller/AppFileController.java                                     |  211 
 src/main/java/com/gk/firework/Config/Oauth2/JwtConfig.java                                          |   32 
 src/main/java/com/gk/firework/Scheduls/WarningTask/NoEntryWarnTask.java                             |   71 
 src/main/java/com/gk/firework/Service/ContractFileService.java                                      |   13 
 src/main/java/com/gk/firework/Mapper/StandardLawListMapper.java                                     |   15 
 src/main/java/com/gk/firework/Service/StandardSupplyMarketObjectService.java                        |   20 
 src/main/java/com/gk/firework/Config/Upload/UploadConfig.java                                       |   21 
 src/main/java/com/gk/firework/Service/EnterpriseLicenseService.java                                 |   24 
 src/main/java/com/gk/firework/Controller/SelfCheckReportController.java                             |  166 
 src/main/java/com/gk/firework/Domain/BlackList.java                                                 |  130 
 src/main/java/com/gk/firework/Domain/Utils/Message.java                                             |   57 
 src/main/java/com/gk/firework/Domain/HiddenDangerReportDetail.java                                  |  207 
 generator/mysql-connector-java-5.1.26-bin.jar                                                       |    0 
 src/main/java/com/gk/firework/Mapper/LicenseStorageMapper.java                                      |    9 
 src/main/java/com/gk/firework/Config/Oauth2/JwtAccessToken.java                                     |   26 
 src/main/java/com/gk/firework/Mapper/mybatis/SelfCheckInfoMapper.xml                                |  123 
 src/main/java/com/gk/firework/Domain/Vo/StockVo.java                                                |  264 
 src/main/java/com/gk/firework/Mapper/mybatis/StandardEquipmentLegerMapper.xml                       |  231 
 src/main/java/com/gk/firework/Domain/Enum/AssessType.java                                           |   23 
 src/main/java/com/gk/firework/Domain/Enum/LicenseStatus.java                                        |   37 
 src/main/java/com/gk/firework/Mapper/AssessApplyMapper.java                                         |   20 
 src/main/java/com/gk/firework/Mapper/AuthorizationInfoMapper.java                                   |   13 
 src/main/java/com/gk/firework/Service/AppFileService.java                                           |   12 
 src/main/java/com/gk/firework/Service/SecuritySupervisoryService.java                               |   13 
 src/main/resources/cert/keystorePass.txt                                                            |    1 
 src/main/java/com/gk/firework/Service/ServiceImpl/StandardSupplyMarketObjectServiceImpl.java        |   90 
 src/main/java/com/gk/firework/Controller/PermissionController.java                                  |  147 
 src/main/java/com/gk/firework/Mapper/EnterpriseStaffMapper.java                                     |   10 
 src/main/java/com/gk/firework/Mapper/HiddenDangerCheckContentMapper.java                            |   18 
 src/main/java/com/gk/firework/Service/TransportCertificateService.java                              |   48 
 src/main/java/com/gk/firework/Mapper/HiddenDangerMenuMapper.java                                    |   14 
 src/main/java/com/gk/firework/Domain/Utils/HttpUtils.java                                           |  199 
 src/main/java/com/gk/firework/Domain/Vo/ProductVo.java                                              |  116 
 src/main/java/com/gk/firework/Domain/SecuritySupervisory.java                                       |  133 
 src/main/java/com/gk/firework/Domain/HistoryStock.java                                              |  238 
 src/main/java/com/gk/firework/Mapper/TransportCertificateFileMapper.java                            |   12 
 src/main/java/com/gk/firework/Mapper/mybatis/RegisterInfoMapper.xml                                 |   70 
 src/main/java/com/gk/firework/FireworkApplication.java                                              |   40 
 src/main/java/com/gk/firework/Mapper/mybatis/ProductCategoryMapper.xml                              |   30 
 src/main/java/com/gk/firework/Service/TransportCertificateArrivalRecordService.java                 |   17 
 src/main/java/com/gk/firework/Service/StandardLawListService.java                                   |   21 
 src/main/java/com/gk/firework/Mapper/mybatis/EntryDetailInfoMapper.xml                              |  354 
 src/main/java/com/gk/firework/Service/SelfCheckService.java                                         |   16 
 src/main/java/com/gk/firework/Mapper/UserDeadlineLogMapper.java                                     |    9 
 src/main/java/com/gk/firework/Domain/Utils/Tree.java                                                |  104 
 src/main/java/com/gk/firework/Domain/Vo/EntryOrderInfoVo.java                                       |   20 
 src/main/java/com/gk/firework/Domain/StandardEducationLeger.java                                    |  279 
 src/main/java/com/gk/firework/Domain/StandardSupplyMarketObject.java                                |  235 
 src/main/java/com/gk/firework/Config/Oauth2/SpringContextUtil.java                                  |   69 
 src/main/java/com/gk/firework/Service/TransportCertificatePersonService.java                        |   14 
 src/main/resources/application-gkhyprov.yml                                                         |   94 
 src/main/java/com/gk/firework/Mapper/PermissionInfoMapper.java                                      |   22 
 src/main/java/com/gk/firework/Mapper/TransportCertMapper.java                                       |   20 
 src/main/java/com/gk/firework/Mapper/mybatis/ControlPrintParamMapper.xml                            |   66 
 src/main/java/com/gk/firework/Domain/DictionaryItemInfo.java                                        |  158 
 src/main/java/com/gk/firework/Domain/Vo/FireworkDeal.java                                           |  288 
 src/main/java/com/gk/firework/Mapper/EnterpriseApplyMapper.java                                     |   10 
 src/main/java/com/gk/firework/Domain/ControlPrintParam.java                                         |  424 
 src/main/java/com/gk/firework/Service/ServiceImpl/PatrolDetailServiceImpl.java                      |   48 
 src/main/java/com/gk/firework/Domain/SelfCheckReport.java                                           |  140 
 src/main/java/com/gk/firework/Config/DataSource/MybatisAspectj.java                                 |   27 
 src/main/java/com/gk/firework/Controller/TransportController.java                                   |  559 
 src/main/java/com/gk/firework/Scheduls/DealSoldNoStock/DealSoldNoStock.java                         |   55 
 src/main/java/com/gk/firework/Service/ServiceImpl/DeliveryOrderServiceImpl.java                     |  177 
 src/main/java/com/gk/firework/Config/WebSocket/WebSocketServer.java                                 |  123 
 src/main/java/com/gk/firework/Domain/Enum/EnterpriseSafetySupervision.java                          |   48 
 src/main/java/com/gk/firework/Domain/Vo/SelfCheckReportSearchVo.java                                |  159 
 src/main/java/com/gk/firework/Domain/ProductThresholdInfo.java                                      |  119 
 src/main/java/com/gk/firework/Mapper/mybatis/ContractOrderInfoMapper.xml                            |  275 
 src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseMapper.xml                                   |  768 
 src/main/java/com/gk/firework/Domain/HiddenDangerMenu.java                                          |  146 
 src/main/java/com/gk/firework/Mapper/mybatis/TransportCertificateArrivalRecordMapper.xml            |  143 
 src/main/java/com/gk/firework/Service/ContractUnitDetailService.java                                |   23 
 src/main/java/com/gk/firework/Service/RoleService.java                                              |   18 
 src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseResourceServiceImpl.java                |   48 
 src/main/java/com/gk/firework/Controller/RegisterController.java                                    |  258 
 src/main/java/com/gk/firework/Mapper/TransportCertificatePersonMapper.java                          |   11 
 generator/jingjy.xml                                                                                |   39 
 src/main/java/com/gk/firework/Scheduls/DL/ReportOrderTask.java                                      |  382 
 src/main/java/com/gk/firework/Domain/Enum/CommitStatus.java                                         |   44 
 src/main/java/com/gk/firework/Domain/Enum/DocumentType.java                                         |   46 
 src/main/java/com/gk/firework/Mapper/mybatis/StandardGuardRollMapper.xml                            |  282 
 src/main/java/com/gk/firework/Service/TransportCertFileService.java                                 |   17 
 src/main/java/com/gk/firework/Domain/SmsLogInfo.java                                                |   79 
 src/main/java/com/gk/firework/Domain/Vo/SaleNumVo.java                                              |   50 
 src/main/java/com/gk/firework/Domain/HelpDocInfo.java                                               |  158 
 src/main/java/com/gk/firework/Controller/EnterpriseController.java                                  | 1128 
 src/main/java/com/gk/firework/Service/EnterpriseFeedService.java                                    |   25 
 src/main/java/com/gk/firework/Service/ServiceImpl/ProductCategoryServiceImpl.java                   |   69 
 src/main/java/com/gk/firework/Domain/TransportPerson.java                                           |  222 
 src/main/java/com/gk/firework/Domain/Vo/DirectionDetail.java                                        |   70 
 src/main/java/com/gk/firework/Domain/HiddenDangerReport.java                                        |  256 
 src/main/java/com/gk/firework/Mapper/ContractFileMapper.java                                        |   10 
 src/main/java/com/gk/firework/Domain/StandardRewardRecord.java                                      |  222 
 src/main/java/com/gk/firework/Service/EnterpriseDocumentService.java                                |   22 
 src/main/java/com/gk/firework/Service/ServiceImpl/UserServiceImpl.java                              |  232 
 663 files changed, 88,161 insertions(+), 0 deletions(-)

diff --git a/generator/jingjy.xml b/generator/jingjy.xml
new file mode 100644
index 0000000..a5403e3
--- /dev/null
+++ b/generator/jingjy.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
+<generatorConfiguration>
+    <!-- 数据库驱动包位置 -->
+    <classPathEntry location="D:\workspace\firework\generator\mysql-connector-java-5.1.26-bin.jar" />
+    <!--<classPathEntry location="C:\oracle\product\10.2.0\db_1\jdbc\lib\ojdbc14.jar" />-->
+    <context id="DB2Tables" targetRuntime="MyBatis3">
+        <property name="javaFileEncoding" value="UTF-8"/>
+        <commentGenerator>
+            <property name="suppressAllComments" value="false" />
+        </commentGenerator>
+        <!-- 数据库链接URL、用户名、密码 -->
+        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://sinanoaq.com:23306/firework" userId="root" password="NMS@uss20201!">
+            <!--<jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver" connectionURL="jdbc:oracle:thin:@localhost:1521:orcl" userId="msa" password="msa">-->
+        </jdbcConnection>
+        <javaTypeResolver>
+            <property name="forceBigDecimals" value="false" />
+        </javaTypeResolver>
+        <!-- 生成模型的包名和位置 -->
+        <javaModelGenerator targetPackage="com.gk.firework.Domain" targetProject="D:\workspace\firework\src\main\java\">
+            <property name="enableSubPackages" value="true" />
+            <property name="trimStrings" value="true" />
+        </javaModelGenerator>
+        <!-- 生成的xml映射文件包名和位置 -->
+        <sqlMapGenerator targetPackage="com.gk.firework.Mapper.mybatis" targetProject="D:\workspace\firework\src\main\java\">
+            <property name="enableSubPackages" value="true" />
+        </sqlMapGenerator>
+        <!-- 生成DAO的包名和位置 -->
+        <javaClientGenerator type="XMLMAPPER" targetPackage="com.gk.firework.Mapper" targetProject="D:\workspace\firework\src\main\java\">
+            <property name="enableSubPackages" value="true" />
+        </javaClientGenerator>
+        <!-- 要生成那些表(更改tableName和domainObjectName就可以) -->
+<!--        <table tableName="entryorder" domainObjectName="EntryOrderInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />-->
+<!--        <table tableName="stock" domainObjectName="StockInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />-->
+<!--        <table tableName="entrydetail" domainObjectName="EntryDetailInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />-->
+        <table tableName="controlprintparam" domainObjectName="ControlPrintParam" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />
+<!--        <table tableName="licensestorage" domainObjectName="LicenseStorage" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />-->
+    </context>
+</generatorConfiguration>
diff --git a/generator/liy.xml b/generator/liy.xml
new file mode 100644
index 0000000..e4d543b
--- /dev/null
+++ b/generator/liy.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
+<generatorConfiguration>
+    <!-- 数据库驱动包位置 -->
+    <classPathEntry location="E:\GK_CODE\firework_main\firework\generator\mysql-connector-java-5.1.26-bin.jar" />
+    <!--<classPathEntry location="C:\oracle\product\10.2.0\db_1\jdbc\lib\ojdbc14.jar" />-->
+    <context id="DB2Tables" targetRuntime="MyBatis3">
+        <property name="javaFileEncoding" value="UTF-8"/>
+        <commentGenerator>
+            <property name="suppressAllComments" value="false" />
+        </commentGenerator>
+        <!-- 数据库链接URL、用户名、密码 -->
+        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://sinanoaq.com:23306/firework" userId="root" password="NMS@uss20201!">
+            <!--<jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver" connectionURL="jdbc:oracle:thin:@localhost:1521:orcl" userId="msa" password="msa">-->
+        </jdbcConnection>
+        <javaTypeResolver>
+            <property name="forceBigDecimals" value="false" />
+        </javaTypeResolver>
+        <!-- 生成模型的包名和位置 -->
+        <javaModelGenerator targetPackage="com.gk.firework.Domain" targetProject="E:\GK_CODE\firework_main\firework\src\main\java\">
+            <property name="enableSubPackages" value="true" />
+            <property name="trimStrings" value="true" />
+        </javaModelGenerator>
+        <!-- 生成的xml映射文件包名和位置 -->
+        <sqlMapGenerator targetPackage="com.gk.firework.Mapper.mybatis" targetProject="E:\GK_CODE\firework_main\firework\src\main\java\">
+            <property name="enableSubPackages" value="true" />
+        </sqlMapGenerator>
+        <!-- 生成DAO的包名和位置 -->
+        <javaClientGenerator type="XMLMAPPER" targetPackage="com.gk.firework.Mapper" targetProject="E:\GK_CODE\firework_main\firework\src\main\java\">
+            <property name="enableSubPackages" value="true" />
+        </javaClientGenerator>
+        <!-- 要生成那些表(更改tableName和domainObjectName就可以) -->
+        <table tableName="selfcheck" domainObjectName="SelfCheckInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />
+        <table tableName="patrolorder" domainObjectName="PatrolOrderInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />
+        <table tableName="patroldetail" domainObjectName="PatrolDetailInfo" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />
+    </context>
+</generatorConfiguration>
diff --git a/generator/mybatis-generator-core-1.3.2.jar b/generator/mybatis-generator-core-1.3.2.jar
new file mode 100644
index 0000000..3dd82fc
--- /dev/null
+++ b/generator/mybatis-generator-core-1.3.2.jar
Binary files differ
diff --git a/generator/mysql-connector-java-5.1.26-bin.jar b/generator/mysql-connector-java-5.1.26-bin.jar
new file mode 100644
index 0000000..bf1e933
--- /dev/null
+++ b/generator/mysql-connector-java-5.1.26-bin.jar
Binary files differ
diff --git a/generator/yufei.xml b/generator/yufei.xml
new file mode 100644
index 0000000..9339f02
--- /dev/null
+++ b/generator/yufei.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
+<generatorConfiguration>
+    <!-- 数据库驱动包位置 -->
+    <classPathEntry location="D:\workspace\firework\generator\mysql-connector-java-5.1.26-bin.jar" />
+    <!--<classPathEntry location="C:\oracle\product\10.2.0\db_1\jdbc\lib\ojdbc14.jar" />-->
+    <context id="DB2Tables" targetRuntime="MyBatis3">
+        <property name="javaFileEncoding" value="UTF-8"/>
+        <commentGenerator>
+            <property name="suppressAllComments" value="false" />
+        </commentGenerator>
+        <!-- 数据库链接URL、用户名、密码 -->
+        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://sinanoaq.com:23306/firework" userId="root" password="NMS@uss20201!">
+            <!--<jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver" connectionURL="jdbc:oracle:thin:@localhost:1521:orcl" userId="msa" password="msa">-->
+        </jdbcConnection>
+        <javaTypeResolver>
+            <property name="forceBigDecimals" value="false" />
+        </javaTypeResolver>
+        <!-- 生成模型的包名和位置 -->
+        <javaModelGenerator targetPackage="com.gk.firework.Domain" targetProject="D:\workspace\firework\src\main\java\">
+            <property name="enableSubPackages" value="true" />
+            <property name="trimStrings" value="true" />
+        </javaModelGenerator>
+        <!-- 生成的xml映射文件包名和位置 -->
+        <sqlMapGenerator targetPackage="com.gk.firework.Mapper.mybatis" targetProject="D:\workspace\firework\src\main\java\">
+            <property name="enableSubPackages" value="true" />
+        </sqlMapGenerator>
+        <!-- 生成DAO的包名和位置 -->
+        <javaClientGenerator type="XMLMAPPER" targetPackage="com.gk.firework.Mapper" targetProject="D:\workspace\firework\src\main\java\">
+            <property name="enableSubPackages" value="true" />
+        </javaClientGenerator>
+        <!-- 要生成那些表(更改tableName和domainObjectName就可以) -->
+<!--        <table tableName="enterpsrise" domainObjectName="Enterprise" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />-->
+<!--        <table tableName="securitysupervisory" domainObjectName="SecuritySupervisory" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />-->
+<!--        <table tableName="enterpriseresource" domainObjectName="EnterpriseResource" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />-->
+<!--        <table tableName="enterpriseperson" domainObjectName="EnterprisePerson" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />-->
+<!--        <table tableName="enterpriseannual" domainObjectName="EnterpriseAnnual" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />-->
+<!--        <table tableName="enterprisedocument" domainObjectName="EnterpriseDocument" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />-->
+<!--        <table tableName="transportperson" domainObjectName="TransportPerson" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />-->
+<!--        <table tableName="enterprisestaff" domainObjectName="EnterpriseStaff" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />-->
+<!--        <table tableName="transportcertificate" domainObjectName="TransportCertificate" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />-->
+<!--        <table tableName="transportcertificateperson" domainObjectName="TransportCertificatePerson" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />-->
+        <table tableName="transportcertificateproduct" domainObjectName="TransportCertificateProduct" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />
+    </context>
+</generatorConfiguration>
diff --git "a/generator/\347\224\237\346\210\220\350\257\255\345\217\245.txt" "b/generator/\347\224\237\346\210\220\350\257\255\345\217\245.txt"
new file mode 100644
index 0000000..a61281e
--- /dev/null
+++ "b/generator/\347\224\237\346\210\220\350\257\255\345\217\245.txt"
@@ -0,0 +1 @@
+java -jar mybatis-generator-core-1.3.2.jar -configfile liy.xml -overwrite
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..6790106
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,418 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.3.3.RELEASE</version>
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+    <groupId>com.gk.firework</groupId>
+    <artifactId>firework</artifactId>
+    <version>1.0.0</version>
+    <name>firework</name>
+
+<!--    <properties>-->
+<!--        <java.version>1.8</java.version>-->
+<!--        <project.name>firework</project.name>-->
+<!--        &lt;!&ndash; docker配置远程地址和本地证书&ndash;&gt;-->
+<!--        <docker.host>https://121.239.169.27:12375</docker.host>-->
+<!--        <docker.cert>D:\docker</docker.cert>-->
+<!--    </properties>-->
+
+    <dependencies>
+        <dependency>
+            <groupId>javax.activation</groupId>
+            <artifactId>activation</artifactId>
+            <version>1.1</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.mail</groupId>
+            <artifactId>mail</artifactId>
+            <version>1.4</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/org.apache.axis/axis -->
+        <dependency>
+            <groupId>org.apache.axis</groupId>
+            <artifactId>axis</artifactId>
+            <version>1.4</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/joda-time/joda-time -->
+        <dependency>
+            <groupId>joda-time</groupId>
+            <artifactId>joda-time</artifactId>
+            <version>2.10.13</version>
+        </dependency>
+
+        <!-- https://mvnrepository.com/artifact/javax.xml.rpc/javax.xml.rpc-api -->
+        <dependency>
+            <groupId>javax.xml.rpc</groupId>
+            <artifactId>javax.xml.rpc-api</artifactId>
+            <version>1.1.2</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-discovery</groupId>
+            <artifactId>commons-discovery</artifactId>
+            <version>0.5</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>commons-logging</groupId>
+                    <artifactId>commons-logging</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
+            <version>1.2</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/wsdl4j/wsdl4j -->
+        <dependency>
+            <groupId>wsdl4j</groupId>
+            <artifactId>wsdl4j</artifactId>
+            <version>1.5.2</version>
+        </dependency>
+
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-jdbc</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-starter-logging</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>com.google.zxing</groupId>
+            <artifactId>core</artifactId>
+            <version>3.4.1</version>
+        </dependency>
+        <!-- 日志打印 -->
+        <!--<dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-logging</artifactId>
+        </dependency>-->
+
+        <dependency>
+            <groupId>org.mybatis.spring.boot</groupId>
+            <artifactId>mybatis-spring-boot-starter</artifactId>
+            <version>2.1.3</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-log4j -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-log4j</artifactId>
+            <version>1.3.8.RELEASE</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.3.2</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid-spring-boot-starter</artifactId>
+            <version>1.1.22</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-devtools</artifactId>
+            <scope>runtime</scope>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-configuration-processor</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.junit.vintage</groupId>
+                    <artifactId>junit-vintage-engine</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
+        <dependency>
+            <groupId>commons-codec</groupId>
+            <artifactId>commons-codec</artifactId>
+            <version>1.14</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <version>3.11</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+            <version>4.1.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>4.1.2</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-beans</artifactId>
+            <version>5.2.8.RELEASE</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/org.java-websocket/Java-WebSocket -->
+        <dependency>
+            <groupId>org.java-websocket</groupId>
+            <artifactId>Java-WebSocket</artifactId>
+            <version>1.5.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-websocket</artifactId>
+            <version>2.1.0.RELEASE</version>
+        </dependency>
+
+<!--        整合swagger2-->
+        <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger2</artifactId>
+            <version>2.8.0</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger-ui</artifactId>
+            <version>2.8.0</version>
+        </dependency>
+
+<!--        整合redis auth2-->
+        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-security -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-security</artifactId>
+            <version>2.3.3.RELEASE</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-redis</artifactId>
+            <version>2.3.3.RELEASE</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>io.lettuce</groupId>
+                    <artifactId>lettuce-core</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
+        <dependency>
+            <groupId>redis.clients</groupId>
+            <artifactId>jedis</artifactId>
+            <version>3.3.0</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/org.springframework.security.oauth/spring-security-oauth2 -->
+        <dependency>
+            <groupId>org.springframework.security.oauth</groupId>
+            <artifactId>spring-security-oauth2</artifactId>
+            <version>2.3.3.RELEASE</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-core -->
+        <dependency>
+            <groupId>org.springframework.security</groupId>
+            <artifactId>spring-security-core</artifactId>
+            <version>5.3.4.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.0.6</version>
+        </dependency>
+        <!--json tools-->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>2.0.17</version>
+        </dependency>
+        <!--jwt-->
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt</artifactId>
+            <version>0.9.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.security</groupId>
+            <artifactId>spring-security-jwt</artifactId>
+            <version>1.0.9.RELEASE</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/com.liferay/org.apache.commons.fileupload -->
+        <dependency>
+            <groupId>com.liferay</groupId>
+            <artifactId>org.apache.commons.fileupload</artifactId>
+            <version>1.2.2.LIFERAY-PATCHED-1</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/org.jetbrains/annotations -->
+        <dependency>
+            <groupId>org.jetbrains</groupId>
+            <artifactId>annotations</artifactId>
+            <version>20.1.0</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>1.18.12</version>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+            <version>4.5</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-extension</artifactId>
+            <version>3.4.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.aspectj</groupId >
+            <artifactId>aspectjweaver</artifactId >
+            <version>1.8.13</version >
+        </dependency>
+
+
+        <dependency>
+            <groupId>e-iceblue</groupId>
+            <artifactId>spire.office.free</artifactId>
+            <version>3.1.1</version>
+        </dependency>
+
+    </dependencies>
+    <repositories>
+        <repository>
+            <id>com.e-iceblue</id>
+            <url>http://repo.e-iceblue.cn/repository/maven-public/</url>
+        </repository>
+    </repositories>
+    <build>
+        <resources>
+            <resource>
+                <directory>src/main/java</directory>
+                <includes>
+                    <include>**/*.xml</include>
+                </includes>
+            </resource>
+            <!--设置自己目录下的配置文件-->
+            <resource>
+                <!--下方resources的文件夹名字要和自己项目的文件夹名确认一致才行 很多人就是忽略了名字不一致 -->
+                <directory>src/main/resources</directory>
+                <includes>
+                    <include>**/*</include>
+                </includes>
+            </resource>
+        </resources>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <configuration>
+                    <mainClass>com.gk.firework.FireworkApplication</mainClass>
+                    <fork>true</fork>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+<!--            docker插件-->
+<!--            <plugin>-->
+<!--                <groupId>com.spotify</groupId>-->
+<!--                <artifactId>docker-maven-plugin</artifactId>-->
+<!--                <version>1.0.0</version>-->
+<!--                &lt;!&ndash;将插件绑定在某个phase执行&ndash;&gt;-->
+<!--                <executions>-->
+<!--                    <execution>-->
+<!--                        <id>remove-image</id>-->
+<!--                        <phase>package</phase>-->
+<!--                        <goals>-->
+<!--                            <goal>removeImage</goal>-->
+<!--                        </goals>-->
+<!--                        <configuration>-->
+<!--                            <imageName>-->
+<!--                                ${project.artifactId}-${project.version}-->
+<!--                            </imageName>-->
+<!--                            <imageTags>-->
+<!--                                <imageTag>latest</imageTag>-->
+<!--                            </imageTags>-->
+<!--                        </configuration>-->
+<!--                    </execution>-->
+<!--                    <execution>-->
+<!--                        <id>build-image</id>-->
+<!--                        &lt;!&ndash;将插件绑定在package这个phase上。也就是说,用户只需执行mvn package ,就会自动执行mvn docker:build&ndash;&gt;-->
+<!--                        <phase>package</phase>-->
+<!--                        <goals>-->
+<!--                            <goal>build</goal>-->
+<!--                        </goals>-->
+<!--                    </execution>-->
+<!--                </executions>-->
+<!--                <configuration>-->
+<!--                    &lt;!&ndash;指定生成的镜像名&ndash;&gt;-->
+<!--                    <imageName>-->
+<!--                        ${project.artifactId}-${project.version}-->
+<!--                    </imageName>-->
+<!--                    &lt;!&ndash;指定标签&ndash;&gt;-->
+<!--                    <imageTags>-->
+<!--                        <imageTag>latest</imageTag>-->
+<!--                    </imageTags>-->
+<!--                    &lt;!&ndash; 指定 Dockerfile 路径 ${project.basedir}:项目根路径下&ndash;&gt;-->
+<!--                    <dockerDirectory>${project.basedir}</dockerDirectory>-->
+<!--                    &lt;!&ndash;指定远程 docker api地址&ndash;&gt;-->
+<!--                    <dockerHost>${docker.host}</dockerHost>-->
+<!--                    <dockerCertPath>${docker.cert}</dockerCertPath>-->
+<!--                    &lt;!&ndash; 这里是复制 jar 包到 docker 容器指定目录配置 &ndash;&gt;-->
+<!--                    <resources>-->
+<!--                        <resource>-->
+<!--                            <targetPath>/</targetPath>-->
+<!--                            &lt;!&ndash;jar 包所在的路径 此处配置的 即对应 target 目录&ndash;&gt;-->
+<!--                            <directory>${project.build.directory}</directory>-->
+<!--                            &lt;!&ndash; 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 &ndash;&gt;-->
+<!--                            <include>${project.build.finalName}.jar</include>-->
+<!--                        </resource>-->
+<!--                    </resources>-->
+<!--                    &lt;!&ndash; 以下两行是为了docker push到DockerHub使用的。 &ndash;&gt;-->
+<!--                    <serverId>docker-hub</serverId>-->
+<!--                    <registryUrl>https://index.docker.io/v1</registryUrl>-->
+<!--                </configuration>-->
+<!--            </plugin>-->
+        </plugins>
+    </build>
+
+</project>
diff --git a/src/main/java/com/gk/firework/Api/ApiController.java b/src/main/java/com/gk/firework/Api/ApiController.java
new file mode 100644
index 0000000..6496906
--- /dev/null
+++ b/src/main/java/com/gk/firework/Api/ApiController.java
@@ -0,0 +1,572 @@
+package com.gk.firework.Api;
+
+
+import com.gk.firework.Scheduls.WarningTask.MessageSendTask;
+import io.swagger.annotations.Api;
+import org.apache.log4j.LogManager;
+import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+
+@Api(tags = "Api接口数据接口")
+@RestController
+@RequestMapping("/api")
+public class ApiController {
+    @Value("${filePath}")
+    private String filePath; //配置文件配置的物理保存地址
+    @Value("${fileurl}")
+    private String fileurl;
+    private Logger logger = LogManager.getLogger(MessageSendTask.class);
+
+//    @Autowired
+//    private SmsLogService smsLogService;
+
+
+//    //在android上传图片后返回url
+//    @ApiOperation(value = "公众号上保存插座监测数据",notes = "传入实验室以及电源极性数据")
+//    @ApiImplicitParams({
+//            @ApiImplicitParam(paramType="query",name = "operator",value = "操作人"),
+//            @ApiImplicitParam(paramType="query",name = "number",value = "场所条码",required = true),
+//            @ApiImplicitParam(paramType="query",name = "name",value = "场所名称"),
+//            @ApiImplicitParam(paramType="query",name = "location",value = "具体地点"),
+//            @ApiImplicitParam(paramType="query",name = "houseType",value = "实验室类型"),
+//            @ApiImplicitParam(paramType="query",name = "manager",value = "实验室负责人" ),
+//            @ApiImplicitParam(paramType="query",name = "safer",value = "实验室安全员"),
+//            @ApiImplicitParam(paramType="query",name = "polarity",value = "电源极性数组"),
+//            @ApiImplicitParam(paramType="query",name = "list",value = "插座个数"),
+//            @ApiImplicitParam(paramType="query",name = "picpath",value = "首张图片"),
+//            @ApiImplicitParam(paramType="query",name = "signature",value = "签名",required = true),
+//    })
+//    @PostMapping("/mobile/putpolarityUrl")
+//    @ResponseBody
+//    public Msg PutPolarityUrl(
+//            String operator, String number, String name, String location,
+//            String  houseType, String manager, String safer, String polarity,
+//            String list,String signature,String picpath,String picList){
+//        Msg msg = new Msg();
+//        msg.setCode("404");
+//        if (StringUtils.isNotBlank(signature) && signature.equals("7DAD4D03150E978F88F9F66F6F01EB68")){
+//            PolarityInfo polarityInfo = new PolarityInfo();
+//            if (StringUtils.isBlank(number)){
+//                msg.setMessage("场所条码不能为空");
+//                return msg;
+//            }else {
+//                polarityInfo.setNumber(number);
+//            }
+//            polarityInfo.setName(name);
+//            polarityInfo.setLocation(location);
+//            polarityInfo.setHousetype(houseType);
+//            polarityInfo.setManager(manager);
+//            polarityInfo.setSafer(safer);
+//            polarityInfo.setOperator(operator);
+//            polarityInfo.setUpdatetime(new Date());
+//
+//            int n = 1;
+//            List<String> polarityList = new ArrayList<>();
+//            if (StringUtils.isNotBlank(polarity)){
+//                polarityList = StringUtils.toList(polarity);
+//            }
+//            if (StringUtils.isNotBlank(list)) {
+//                String[] str = list.split(",");
+//                n += str.length;
+//            }
+//
+//            List<PolarityDetailInfo> polarityDetailInfoList = new ArrayList<>();
+//            String advice = "";
+//            //判断火地零的灯分别显示了哪个,根据不同的灯给出不同的建议
+//            //n为插座个数,polarityList存入1-1,2-3,表示那盏灯亮,前缀表示第几排,后缀表示第几个灯亮
+//            for (int i = 1; i <= n; i++){
+//                PolarityDetailInfo polarityDetailInfo = new PolarityDetailInfo();
+//                polarityDetailInfo.setLinea((byte)0);
+//                polarityDetailInfo.setLineb((byte)0);
+//                polarityDetailInfo.setLinec((byte)0);
+//
+//                if (i == 1){
+//                    polarityDetailInfo.setPicname(picpath);
+//                }else {
+//                    String pic = "pic-"+i;
+//                    String[] picListstr = picList.split(",");
+//                    for (String picstr : picListstr){
+//                        String[] picArray = picstr.split(";");
+//                        if (picArray[0].equals(pic)){
+//                            polarityDetailInfo.setPicname(picArray[1]);
+//                        }
+//                    }
+//                }
+//
+//                List<String> tempList = new ArrayList<> ();
+//                for (String str : polarityList){
+//                    if (str.startsWith(i+"-")){
+//                        tempList.add(str.substring(str.length() - 1));
+//                    }
+//                }
+//
+//                //极性只有0灯、1灯、2灯,截取最后一位数 表示第几盏灯亮
+//                if (tempList.size() > 0){
+//                    if (tempList.size() == 1){
+//                        if (tempList.get(0).equals("1")){
+//                            advice += PolarityStatus.a;
+//                            polarityDetailInfo.setLinea((byte)1);
+//                        }else if (tempList.get(0).equals("3")){
+//                            advice += PolarityStatus.c;
+//                            polarityDetailInfo.setLinec((byte)1);
+//                        }
+//                    }else if (tempList.size() == 2) {
+//                        if ((tempList.get(0).equals("1") && tempList.get(1).equals("2"))
+//                                || (tempList.get(0).equals("2") && tempList.get(1).equals("1"))){
+//                            advice += PolarityStatus.ab;
+//                            polarityDetailInfo.setLinea((byte)1);
+//                            polarityDetailInfo.setLineb((byte)1);
+//                        }
+//                        if ((tempList.get(0).equals("1") && tempList.get(1).equals("3"))
+//                                || (tempList.get(0).equals("3") && tempList.get(1).equals("1"))){
+//                            advice += PolarityStatus.ac;
+//                            polarityDetailInfo.setLinea((byte)1);
+//                            polarityDetailInfo.setLinec((byte)1);
+//                        }
+//                        if ((tempList.get(0).equals("2") && tempList.get(1).equals("3"))
+//                                || (tempList.get(0).equals("3") && tempList.get(1).equals("2"))){
+//                            advice += PolarityStatus.bc;
+//                            polarityDetailInfo.setLineb((byte)1);
+//                            polarityDetailInfo.setLinec((byte)1);
+//                        }
+//                    }
+//                }else {
+//                    advice += PolarityStatus.none;
+//                }
+//
+//                polarityDetailInfoList.add(polarityDetailInfo);
+//            }
+//            if (advice.length()> 255){
+//                advice = advice.substring(0, 255);
+//            }
+//            polarityInfo.setAdvice(advice);
+//            //查找是否存在该场所的信息,如果存在则更新,否则删除
+//            PolarityInfo polarityInfoExist = polarityService.selectByNumber(number);
+//            if (null != polarityInfoExist){
+//                polarityInfo.setId(polarityInfoExist.getId());
+//                polarityService.updateById(polarityInfo);
+//            }else {
+//                polarityService.save(polarityInfo);
+//            }
+//            //删除该场所历史的电源极性明细,重新插入数据
+//            polarityDetailService.deleteByPid(polarityInfo.getId());
+//            for (PolarityDetailInfo detailInfo : polarityDetailInfoList){
+//                detailInfo.setPid(polarityInfo.getId());
+//                detailInfo.setOperator(operator);
+//                detailInfo.setUpdatetime(new Date());
+//                polarityDetailService.save(detailInfo);
+//            }
+//        }
+//        else {
+//            msg.setMessage("签名错误");
+//            return msg;
+//        }
+//        msg.setCode("200");
+//        msg.setMessage("success");
+//        return msg;
+//    }
+//
+////   在vant上传图片
+//    @ApiOperation(value = "公众号上保存插座监测数据",notes = "传入实验室以及电源极性数据")
+//    @ApiImplicitParams({
+//            @ApiImplicitParam(paramType="query",name = "operator",value = "操作人"),
+//            @ApiImplicitParam(paramType="query",name = "number",value = "场所条码",required = true),
+//            @ApiImplicitParam(paramType="query",name = "name",value = "场所名称"),
+//            @ApiImplicitParam(paramType="query",name = "location",value = "具体地点"),
+//            @ApiImplicitParam(paramType="query",name = "houseType",value = "实验室类型"),
+//            @ApiImplicitParam(paramType="query",name = "manager",value = "实验室负责人" ),
+//            @ApiImplicitParam(paramType="query",name = "safer",value = "实验室安全员"),
+//            @ApiImplicitParam(paramType="query",name = "polarity",value = "电源极性数组"),
+//            @ApiImplicitParam(paramType="query",name = "list",value = "插座个数"),
+//            @ApiImplicitParam(paramType="query",name = "picpath",value = "首张图片"),
+//            @ApiImplicitParam(paramType="query",name = "signature",value = "签名",required = true),
+//    })
+//    @PostMapping("/mobile/putpolarity")
+//    @ResponseBody
+//    public Msg PutPolarity(
+//            String operator, String number, String name, String location,
+//            String  houseType, String manager, String safer, String polarity,
+//            String list,String signature,MultipartFile picpath,StandardMultipartHttpServletRequest req)throws Exception{
+//        Msg msg = new Msg();
+//        msg.setCode("404");
+//        if (StringUtils.isNotBlank(signature) && signature.equals("7DAD4D03150E978F88F9F66F6F01EB68")){
+//            PolarityInfo polarityInfo = new PolarityInfo();
+//            if (StringUtils.isBlank(number)){
+//                msg.setMessage("场所条码不能为空");
+//                return msg;
+//            }else {
+//                polarityInfo.setNumber(number);
+//            }
+//            polarityInfo.setName(name);
+//            polarityInfo.setLocation(location);
+//            polarityInfo.setHousetype(houseType);
+//            polarityInfo.setManager(manager);
+//            polarityInfo.setSafer(safer);
+//            polarityInfo.setOperator(operator);
+//            polarityInfo.setUpdatetime(new Date());
+//
+//            int n = 1;
+//            List<String> polarityList = new ArrayList<>();
+//            if (StringUtils.isNotBlank(polarity)){
+//                polarityList = StringUtils.toList(polarity);
+//            }
+//            if (StringUtils.isNotBlank(list)) {
+//                String[] str = list.split(",");
+//                n += str.length;
+//            }
+//
+//            List<PolarityDetailInfo> polarityDetailInfoList = new ArrayList<>();
+//            String advice = "";
+//            //判断火地零的灯分别显示了哪个,根据不同的灯给出不同的建议
+//            //n为插座个数,polarityList存入1-1,2-3,表示那盏灯亮,前缀表示第几排,后缀表示第几个灯亮
+//            for (int i = 1; i <= n; i++){
+//                PolarityDetailInfo polarityDetailInfo = new PolarityDetailInfo();
+//                polarityDetailInfo.setLinea((byte)0);
+//                polarityDetailInfo.setLineb((byte)0);
+//                polarityDetailInfo.setLinec((byte)0);
+//
+//                if (i == 1){
+//                    String picmame = UploadUtil.uploadFile(picpath,filePath);
+//                    polarityDetailInfo.setPicname(fileurl+picmame);
+//                }else {
+//                    String pic = "pic-"+i;
+//                    MultiValueMap<String, MultipartFile> multipartFiles = req.getMultiFileMap();
+//                    MultipartFile  picFile = multipartFiles.get(pic).get(0);
+//                    String picmame = UploadUtil.uploadFile(picFile,filePath);
+//                    polarityDetailInfo.setPicname(fileurl+picmame);
+//                }
+//
+//                List<String> tempList = new ArrayList<> ();
+//                for (String str : polarityList){
+//                    if (str.startsWith(i+"-")){
+//                        tempList.add(str.substring(str.length() - 1));
+//                    }
+//                }
+//
+//                //极性只有0灯、1灯、2灯,截取最后一位数 表示第几盏灯亮
+//                if (tempList.size() > 0){
+//                    if (tempList.size() == 1){
+//                        if (tempList.get(0).equals("1")){
+//                            advice += PolarityStatus.a;
+//                            polarityDetailInfo.setLinea((byte)1);
+//                        }else if (tempList.get(0).equals("3")){
+//                            advice += PolarityStatus.c;
+//                            polarityDetailInfo.setLinec((byte)1);
+//                        }
+//                    }else if (tempList.size() == 2) {
+//                        if ((tempList.get(0).equals("1") && tempList.get(1).equals("2"))
+//                                || (tempList.get(0).equals("2") && tempList.get(1).equals("1"))){
+//                            advice += PolarityStatus.ab;
+//                            polarityDetailInfo.setLinea((byte)1);
+//                            polarityDetailInfo.setLineb((byte)1);
+//                        }
+//                        if ((tempList.get(0).equals("1") && tempList.get(1).equals("3"))
+//                                || (tempList.get(0).equals("3") && tempList.get(1).equals("1"))){
+//                            advice += PolarityStatus.ac;
+//                            polarityDetailInfo.setLinea((byte)1);
+//                            polarityDetailInfo.setLinec((byte)1);
+//                        }
+//                        if ((tempList.get(0).equals("2") && tempList.get(1).equals("3"))
+//                                || (tempList.get(0).equals("3") && tempList.get(1).equals("2"))){
+//                            advice += PolarityStatus.bc;
+//                            polarityDetailInfo.setLineb((byte)1);
+//                            polarityDetailInfo.setLinec((byte)1);
+//                        }
+//                    }
+//                }else {
+//                    advice += PolarityStatus.none;
+//                }
+//
+//                polarityDetailInfoList.add(polarityDetailInfo);
+//            }
+//            if (advice.length()> 255){
+//                advice = advice.substring(0, 255);
+//            }
+//            polarityInfo.setAdvice(advice);
+//            //查找是否存在该场所的信息,如果存在则更新,否则删除
+//            PolarityInfo polarityInfoExist = polarityService.selectByNumber(number);
+//            if (null != polarityInfoExist){
+//                polarityInfo.setId(polarityInfoExist.getId());
+//                polarityService.updateById(polarityInfo);
+//            }else {
+//                polarityService.save(polarityInfo);
+//            }
+//            //删除该场所历史的电源极性明细,重新插入数据
+//            polarityDetailService.deleteByPid(polarityInfo.getId());
+//            for (PolarityDetailInfo detailInfo : polarityDetailInfoList){
+//                detailInfo.setPid(polarityInfo.getId());
+//                detailInfo.setOperator(operator);
+//                detailInfo.setUpdatetime(new Date());
+//                polarityDetailService.save(detailInfo);
+//            }
+//        }
+//        else {
+//            msg.setMessage("签名错误");
+//            return msg;
+//        }
+//        msg.setCode("200");
+//        msg.setMessage("success");
+//        return msg;
+//    }
+//
+//
+//    @ApiOperation(value = "上传图片",notes = "上传图片")
+//    @ApiImplicitParams({
+//            @ApiImplicitParam(paramType="query",name = "picpath",value = "文件"),
+//    })
+//    @PostMapping("/mobile/uploadPic")
+//    @ResponseBody
+//    public Msg uploadPic(StandardMultipartHttpServletRequest req){
+//        Msg msg = new Msg();
+//        msg.setCode("200");
+//        msg.setMessage("success");
+//
+//        MultiValueMap<String, MultipartFile> multipartFiles = req.getMultiFileMap();
+//        MultipartFile  picFile = multipartFiles.get("files").get(0);
+//        if (null == picFile){
+//            msg.setCode("404");
+//            msg.setMessage("上传文件为空");
+//        }else {
+//            try {
+//                String picmame = UploadUtil.uploadFile(picFile,filePath);
+//                msg.setResult(fileurl+picmame);
+//            }catch (Exception e){
+//                e.printStackTrace();
+//                msg.setCode("500");
+//                msg.setMessage("上传失败");
+//            }
+//        }
+//        return msg;
+//    }
+//
+//
+//    @ApiOperation(value = "发送报警短信",notes = "每天每个手机号只能发20个")
+//    @ApiImplicitParams({
+//            @ApiImplicitParam(paramType="query",name = "head",value = "系统名称",required = true),
+//            @ApiImplicitParam(paramType="query",name = "telnumber",value = "手机号码以英文,分隔",required = true),
+//            @ApiImplicitParam(paramType="query",name = "content",value = "报警内容",required = true),
+//            @ApiImplicitParam(paramType="query",name = "signature",value = "签名",required = true),
+//    })
+//    @PostMapping("/sendmessage")
+//    @ResponseBody
+//    public Msg SendMessage(
+//            String head,String telnumber,String content,String signature)throws Exception{
+//        Msg msg = new Msg();
+//        if (StringUtils.isNotBlank(signature) && signature.equals("4E85FE3F203915AC358A92205814D043")){
+//            boolean issend = sendMessage(head,telnumber,content);
+//            if (!issend){
+//                msg.setCode("400");
+//                msg.setMessage("发送短信失败,超出日发送条数");
+//                return msg;
+//            }
+//        }
+//        else {
+//            msg.setCode("500");
+//            msg.setMessage("签名错误");
+//            return msg;
+//        }
+//        msg.setCode("200");
+//        msg.setMessage("success");
+//        return msg;
+//    }
+//
+//    public Boolean sendMessage(String head,String telnumber,String content) throws UnsupportedEncodingException {
+//        String url ="http://v.juhe.cn/sms/send";//请求接口地址
+//        String tpl_id = "222840";
+//        String dtype = "json";
+//        String key = "f89279278b739f972ed922fa708eafa0";
+//        String tpl_value = URLEncoder.encode("#name#=" + head + "&#code#=" + content,"utf-8");
+//        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+//        SimpleDateFormat sdfstart = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
+//        SimpleDateFormat sdfend = new SimpleDateFormat("yyyy-MM-dd 23:59:59");
+//        Date now = new Date();
+//        String starttime  = sdfstart.format(now);
+//        String endtime = sdfend.format(now);
+//
+//        Calendar calendar = Calendar.getInstance();
+//        calendar.setTime(now);
+//        calendar.add(Calendar.HOUR_OF_DAY, -1);
+//        Date onehour = calendar.getTime();
+//        String onehourstart = sdf.format(onehour);
+//        String onehourend = sdf.format(now);
+//
+//        boolean issend = false;
+//        List<String> mobiles = StringUtils.toList(telnumber);
+//        for (String mobile : mobiles) {
+//            /**运营商限制同1个号码同1个签名的内容1分钟内只能接收1条,10分钟3条,1小时内4条,一天20条,否则可能会被运营商屏蔽**/
+//            SmsLogInfo smsLogInfo = smsLogService.selectByTel(mobile,starttime,endtime,(byte)2);
+//            if (null != smsLogInfo && smsLogInfo.getTimes()>=20){
+//                logger.error("手机号:" + mobile + ",在时间为" + sdf.format(now) + ",当天已发出20条,无法继续发送");
+//                continue;
+//            }
+//            SmsLogInfo smsLogInfoHour = smsLogService.selectByTel(mobile,onehourstart,onehourend,(byte)1);
+//            if (null != smsLogInfoHour && smsLogInfoHour.getTimes()>=4){
+//                logger.error("手机号:" + mobile + ",在时间为" + sdf.format(now) + ",本小时已发出4条,无法继续发送");
+//                continue;
+//            }
+//            String respnse = null;
+//            Map params = new HashMap();//请求参数
+//            params.put("mobile", mobile);//接收短信的手机号码
+//            params.put("tpl_id", tpl_id);//短信模板ID,请参考个人中心短信模板设置
+//            params.put("tpl_value", tpl_value);
+//            params.put("key", key);//应用APPKEY(应用详细页查询)
+//            params.put("dtype", dtype);//返回数据的格式,xml或json,默认json
+//            try {
+//                respnse = HttpUtils.net(url, params, "GET");
+//                JSONObject jsonResult = JSONObject.parseObject(respnse);
+//                String errorcode = jsonResult.getString("error_code");
+//                String reason = jsonResult.getString("reason");
+//                if (errorcode.equals("0")) {
+//                    //增加发送次数
+//                    JSONObject result = jsonResult.getJSONObject("result");
+//                    Integer count = result.getInteger("count");
+//                    if (null !=  smsLogInfo){
+//                        smsLogInfo.setTimes(smsLogInfo.getTimes()+count);
+//                        smsLogService.updateById(smsLogInfo);
+//                    }else {
+//                        SmsLogInfo smsLogInfo1 = new SmsLogInfo();
+//                        smsLogInfo1.setMobile(mobile);
+//                        smsLogInfo1.setSendtime(now);
+//                        smsLogInfo1.setTimes(count);
+//                        smsLogInfo1.setType((byte)2);
+//                        smsLogService.save(smsLogInfo1);
+//                    }
+//                    issend = true;
+//                    if (null !=  smsLogInfoHour){
+//                        smsLogInfoHour.setTimes(smsLogInfoHour.getTimes()+count);
+//                        smsLogService.updateById(smsLogInfoHour);
+//                    }else {
+//                        SmsLogInfo smsLogInfo1 = new SmsLogInfo();
+//                        smsLogInfo1.setMobile(mobile);
+//                        smsLogInfo1.setSendtime(now);
+//                        smsLogInfo1.setTimes(count);
+//                        smsLogInfo1.setType((byte)1);
+//                        smsLogService.save(smsLogInfo1);
+//                    }
+//                } else {
+//                    logger.error("手机号:" + mobile + ",在时间为" + sdf.format(now) + "发送短信失败,原因为:" + reason);
+//                }
+//            } catch (Exception e) {
+//                e.printStackTrace();
+//            }
+//        }
+//        return issend;
+//    }
+
+
+//    //根据研究所id显示设备报警和故障个数 get请求
+//    @ApiOperation(value = "根据研究所id显示设备报警和故障个数")
+//    @ApiImplicitParams({
+//            @ApiImplicitParam(paramType="query",name = "instituteid",value = "研究所id",required = true),
+//            @ApiImplicitParam(paramType="query",name = "appkey",value = "appkey",required = true),
+//            @ApiImplicitParam(paramType="query",name = "timestamp",value = "时间戳",required = true),
+//            @ApiImplicitParam(paramType="query",name = "signature",value = "签名",required = true),
+//    })
+//    @GetMapping("/getElectricalWarn")
+//    @ResponseBody
+//    public Msg getElectricalWarn(@RequestParam String instituteid,@RequestParam String appkey,
+//                                 @RequestParam String timestamp,@RequestParam String signature){
+//        Msg msg = new Msg();
+//        msg.setCode("200");
+//        msg.setMessage("success");
+//
+//        String errorMsg =  validSign(appkey,signature,timestamp);
+//        if (StringUtils.isNotBlank(errorMsg)){
+//            msg.setCode("500");
+//            msg.setMessage(errorMsg);
+//            return msg;
+//        }
+//
+//       int yujing = 0;
+//       int guzhang = 0;
+//
+//       SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+//       Date now = new Date();
+//       Calendar calendar = Calendar.getInstance();
+//       calendar.setTime(now);
+//       calendar.add(Calendar.MINUTE, -2);
+//       Date starttime = calendar.getTime();
+//       String starttimeStr = sdf.format(starttime);
+//       String endttimeStr = sdf.format(now);
+//
+//       InstituteInfo instituteInfo = instituteService.getById(instituteid);
+//
+//       List<String> numberList = electricalHistoryService.getElectricalWarn(starttimeStr,endttimeStr);
+//       if (numberList.size() > 0){
+//           List<ResearchHouseVo> researchHouseVoList = researchHouseService.selectByNumbers(numberList);
+//           for (ResearchHouseVo researchHouseVo : researchHouseVoList){
+//               if (researchHouseVo.getInstituteName().equals(instituteInfo.getName())){
+//                   yujing ++;
+//               }
+//           }
+//       }
+//
+//       List<DeviceInfo> deviceInfoList = deviceService.selectByStatusAndInstitute((byte)1);
+//       if (deviceInfoList.size() > 0){
+//           for (DeviceInfo deviceInfo : deviceInfoList) {
+//               if (deviceInfo.getInstitute().equals(instituteInfo.getName())){
+//                   guzhang ++;
+//               }
+//           }
+//       }
+//
+//       Map<String,Object> map = new HashMap<> ();
+//       map.put("yujing",yujing);
+//       map.put("guzhang",guzhang);
+//
+//       msg.setResult(map);
+//       return msg;
+//    }
+//
+//
+//    private String validSign(String appkey,String signature,String timestamp) {
+//        String appsecret = "5E84FE3F20N915AC357A92206817D023";
+//        if (StringUtils.isBlank(signature)||StringUtils.isBlank(appkey)
+//                || StringUtils.isBlank(timestamp)){
+//            return "签名不能为空";
+//        }
+//        if (!appkey.equals("sznms")){
+//            return "appkey有误";
+//        }
+//
+//        Long nowtimestamp = System.currentTimeMillis()/1000;
+//
+//        Integer signtimestamp = Integer.parseInt(timestamp);
+//
+//        if(Math.abs(nowtimestamp - signtimestamp) > 120)
+//        {
+//            return "超出时间范围";
+//        }
+//
+//        String sign = MD5Encoder(appkey+appsecret+timestamp,"UTF-8");
+//        if (!sign.equals(signature)){
+//            return "签名验证失败";
+//        }
+//        return null;
+//    }
+//
+//    public String MD5Encoder(String s,String charset){
+//        try{
+//            byte[] btInput = s.getBytes(charset);
+//            MessageDigest mdInst = MessageDigest.getInstance("MD5");
+//            mdInst.update(btInput);
+//
+//            byte[] md = mdInst.digest();
+//            StringBuffer sb = new StringBuffer();
+//            for(int i =0 ;i<md.length;i++)
+//            {
+//                int val = ((int)md[i]) & 0xff;
+//                if(val<16){
+//                    sb.append("0");
+//                }
+//                sb.append(Integer.toHexString(val));
+//            }
+//            return sb.toString();
+//        }
+//        catch (Exception e)
+//        {
+//            return  null;
+//        }
+//    }
+}
diff --git a/src/main/java/com/gk/firework/Config/Cors/CorsConfig.java b/src/main/java/com/gk/firework/Config/Cors/CorsConfig.java
new file mode 100644
index 0000000..c7cf9e0
--- /dev/null
+++ b/src/main/java/com/gk/firework/Config/Cors/CorsConfig.java
@@ -0,0 +1,17 @@
+package com.gk.firework.Config.Cors;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
+
+@Configuration
+public class CorsConfig  extends WebMvcConfigurerAdapter {
+
+    @Override
+    public void addCorsMappings(CorsRegistry registry) {
+        registry.addMapping("/**").allowedOrigins("*")
+                .allowedMethods("GET", "HEAD", "POST","PUT", "DELETE", "OPTIONS")
+                .allowCredentials(true).maxAge(3600);
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Config/Cors/CorsFilter.java b/src/main/java/com/gk/firework/Config/Cors/CorsFilter.java
new file mode 100644
index 0000000..d37c6d1
--- /dev/null
+++ b/src/main/java/com/gk/firework/Config/Cors/CorsFilter.java
@@ -0,0 +1,39 @@
+package com.gk.firework.Config.Cors;
+
+import org.springframework.stereotype.Component;
+
+import javax.servlet.*;
+import javax.servlet.annotation.WebFilter;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+@Component
+@WebFilter(urlPatterns = "/*", filterName = "CorsFilter")
+public class CorsFilter implements Filter {
+
+    @Override
+    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
+        HttpServletResponse response = (HttpServletResponse) res;
+        HttpServletRequest reqs = (HttpServletRequest) req;
+        String curOrigin = reqs.getHeader("Origin");
+        response.setHeader("Access-Control-Allow-Origin", curOrigin == null ? "*" : curOrigin);
+//        response.setHeader("Access-Control-Allow-Origin", "*");
+        response.setHeader("Access-Control-Allow-Credentials", "true");
+        response.setHeader("Access-Control-Allow-Methods", "POST, GET, PATCH, DELETE, PUT, OPTIONS");
+        response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, X-Auth-Token, Authorization");
+//        response.setHeader("Access-Control-Allow-Headers", "*");
+        response.setHeader("Access-Control-Max-Age","3600");
+        chain.doFilter(req, res);
+    }
+
+
+    @Override
+    public void init(FilterConfig filterConfig) {
+        System.out.println("cors");
+    }
+
+    @Override
+    public void destroy() {}
+
+}
diff --git a/src/main/java/com/gk/firework/Config/Cors/MyMvcConfigurer.java b/src/main/java/com/gk/firework/Config/Cors/MyMvcConfigurer.java
new file mode 100644
index 0000000..4b24a51
--- /dev/null
+++ b/src/main/java/com/gk/firework/Config/Cors/MyMvcConfigurer.java
@@ -0,0 +1,65 @@
+package com.gk.firework.Config.Cors;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@Configuration
+public class MyMvcConfigurer implements WebMvcConfigurer {
+    @Value("${filePath}")
+    private String filePath; //配置文件配置的物理保存地址
+    @Value("${sqlPath}")
+    private String sqlPath;
+    @Value("${enterprisePath}")
+    private String enterprisePath; //配置文件配置的物理保存地址
+    @Value("${contractPath}")
+    private String contractPath; //配置文件配置的物理保存地址
+    @Value("${transportCertificatePath}")
+    private String transportCertificatePath;
+    @Value("${hiddenDangerPath}")
+    private String hiddenDangerPath;
+    @Value("${patrolPath}")
+    private String patrolPath;
+    @Value("${appPath}")
+    private String appPath;
+    @Value("${customerPath}")
+    private String customerPath;
+
+    @Override
+    public void addCorsMappings(CorsRegistry registry) {
+        registry.addMapping("/**")
+                .allowedOrigins("*")
+                .allowCredentials(true)
+                .allowedMethods("GET", "POST", "DELETE", "PUT","PATCH")
+                .maxAge(3600);
+    }
+
+    /**服务器静态资源配置**/
+    @Override
+    public void addResourceHandlers(ResourceHandlerRegistry registry) {
+        registry.addResourceHandler("/upload/**")
+                .addResourceLocations("file:"+ filePath)   //媒体资源
+                .addResourceLocations("classpath:/META-INF/resources/"); //swagger2页面
+        registry.addResourceHandler("/dbback/**")
+                .addResourceLocations("file:"+sqlPath);
+        registry.addResourceHandler("/upload/enterprise/**")
+                .addResourceLocations("file:"+enterprisePath);
+        registry.addResourceHandler("/upload/contract/**")
+                .addResourceLocations("file:"+contractPath);
+        registry.addResourceHandler("/upload/transportCertificate/**")
+                .addResourceLocations("file:" + transportCertificatePath);
+        registry.addResourceHandler("/upload/hiddenDanger/**")
+                .addResourceLocations("file:" + hiddenDangerPath);
+        registry.addResourceHandler("/upload/patrol/**")
+                .addResourceLocations("file:" + patrolPath);
+        registry.addResourceHandler("/upload/app/**")
+                .addResourceLocations("file:" + appPath);
+        registry.addResourceHandler("/upload/customer/**")
+                .addResourceLocations("file:" + customerPath);
+        registry.addResourceHandler("/logs/**").
+                addResourceLocations("file:" + System.getProperty("user.dir") + "/logs/");
+
+    }
+}
diff --git a/src/main/java/com/gk/firework/Config/DataSource/DataSourceConfig.java b/src/main/java/com/gk/firework/Config/DataSource/DataSourceConfig.java
new file mode 100644
index 0000000..549a8b4
--- /dev/null
+++ b/src/main/java/com/gk/firework/Config/DataSource/DataSourceConfig.java
@@ -0,0 +1,19 @@
+package com.gk.firework.Config.DataSource;
+
+import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.sql.DataSource;
+
+@Configuration
+public class DataSourceConfig {
+
+    @Bean
+    @ConfigurationProperties("spring.datasource.one")
+    DataSource dsOne(){
+        return DruidDataSourceBuilder.create().build();
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Config/DataSource/MyBatisConfigOne.java b/src/main/java/com/gk/firework/Config/DataSource/MyBatisConfigOne.java
new file mode 100644
index 0000000..c755eda
--- /dev/null
+++ b/src/main/java/com/gk/firework/Config/DataSource/MyBatisConfigOne.java
@@ -0,0 +1,80 @@
+package com.gk.firework.Config.DataSource;
+
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.handler.TableNameHandler;
+import com.baomidou.mybatisplus.extension.plugins.inner.DynamicTableNameInnerInterceptor;
+import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
+import org.apache.ibatis.plugin.Interceptor;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.mybatis.spring.SqlSessionTemplate;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.core.io.support.ResourcePatternResolver;
+import org.springframework.stereotype.Repository;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+
+@Configuration
+@MapperScan(value = "com.gk.firework.Mapper",sqlSessionFactoryRef = "sqlSessionFactoryBean1" ,annotationClass = Repository.class)
+public class MyBatisConfigOne {
+    @Autowired
+    @Qualifier("dsOne")
+    DataSource dsOne;
+
+    @Autowired
+    private PaginationInterceptor paginationInterceptor;
+    @Autowired
+    private MybatisPlusInterceptor mybatisPlusInterceptor;
+
+
+
+    @Bean
+    SqlSessionFactory sqlSessionFactoryBean1() throws Exception {
+        MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean();
+        factoryBean.setDataSource(dsOne);
+        factoryBean.setMapperLocations(resolveMapperLocations());
+        paginationInterceptor.setLimit(100000);
+        //关键代码 设置 MyBatis-Plus 分页插件
+        Interceptor[] plugins = {paginationInterceptor,mybatisPlusInterceptor};
+        factoryBean.setPlugins(plugins);
+
+        return factoryBean.getObject();
+    }
+
+    public Resource[] resolveMapperLocations() {
+        ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();
+        List<String> mapperLocations = new ArrayList<>();
+        mapperLocations.add("classpath*:com/gk/firework/Mapper/mybatis/*.xml");
+        List<Resource> resources = new ArrayList();
+        if (mapperLocations != null) {
+            for (String mapperLocation : mapperLocations) {
+                try {
+                    Resource[] mappers = resourceResolver.getResources(mapperLocation);
+                    resources.addAll(Arrays.asList(mappers));
+                } catch (IOException e) {
+                    // ignore
+                }
+            }
+        }
+        return resources.toArray(new Resource[resources.size()]);
+    }
+
+    @Bean
+    SqlSessionTemplate sqlSessionTemplate1() throws Exception{
+        return new SqlSessionTemplate(sqlSessionFactoryBean1());
+    }
+
+
+
+}
diff --git a/src/main/java/com/gk/firework/Config/DataSource/MybatisAspectj.java b/src/main/java/com/gk/firework/Config/DataSource/MybatisAspectj.java
new file mode 100644
index 0000000..e2023bc
--- /dev/null
+++ b/src/main/java/com/gk/firework/Config/DataSource/MybatisAspectj.java
@@ -0,0 +1,27 @@
+package com.gk.firework.Config.DataSource;
+
+import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.stereotype.Component;
+
+@Aspect
+@Component
+public class MybatisAspectj {
+    // 配置织入点
+    @Pointcut("execution(public * com.baomidou.mybatisplus.core.mapper.BaseMapper.selectOne(..))")
+    public void selectOneAspect() {
+    }
+
+    @Before("selectOneAspect()")
+    public void beforeSelect(JoinPoint point) {
+        Object arg = point.getArgs()[0];
+        if (arg instanceof AbstractWrapper) {
+            arg = (AbstractWrapper) arg;
+            ((AbstractWrapper) arg).last("limit 1");
+        }
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Config/DataSource/MybatisPlusConfig.java b/src/main/java/com/gk/firework/Config/DataSource/MybatisPlusConfig.java
new file mode 100644
index 0000000..588b788
--- /dev/null
+++ b/src/main/java/com/gk/firework/Config/DataSource/MybatisPlusConfig.java
@@ -0,0 +1,48 @@
+package com.gk.firework.Config.DataSource;
+
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.handler.TableNameHandler;
+import com.baomidou.mybatisplus.extension.plugins.inner.DynamicTableNameInnerInterceptor;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.HashMap;
+
+/**
+ * @author : jingjy
+ * @date : 2021/4/1 17:15
+ */
+@Configuration
+@MapperScan("com.gk.firework.Mapper")
+public class MybatisPlusConfig {
+
+    public static ThreadLocal<String> myTableName = new ThreadLocal<>();
+
+    @Value("${slice}")
+    private String tableSlice;
+
+    /**
+     * 通过拦截器,拦截SQL请求,可更换表名
+     */
+    @Bean
+    public MybatisPlusInterceptor mybatisPlusInterceptor() {
+        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+        DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor();
+        HashMap<String, TableNameHandler> map = new HashMap<String, TableNameHandler>(2) {{
+            put("deliveryorder", (sql, tableName) -> tableName + tableSlice);
+            put("deliverydetail", (sql, tableName) -> tableName + tableSlice);
+            put("saleorder", (sql, tableName) -> tableName + tableSlice);
+            put("saleorderdetail", (sql, tableName) -> tableName + tableSlice);
+            put("customer", (sql, tableName) -> tableName + tableSlice);
+            put("entryorder", (sql, tableName) -> tableName + tableSlice);
+            put("entrydetail", (sql, tableName) -> tableName + tableSlice);
+
+        }};
+        dynamicTableNameInnerInterceptor.setTableNameHandlerMap(map);
+        interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor);
+        return interceptor;
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Config/Log/JsonParamsLogAspect.java b/src/main/java/com/gk/firework/Config/Log/JsonParamsLogAspect.java
new file mode 100644
index 0000000..73e9df3
--- /dev/null
+++ b/src/main/java/com/gk/firework/Config/Log/JsonParamsLogAspect.java
@@ -0,0 +1,59 @@
+package com.gk.firework.Config.Log;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.gk.firework.Domain.Exception.BusinessException;
+import org.apache.log4j.Logger;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import java.text.SimpleDateFormat;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.Objects;
+
+@Aspect
+@Component
+public class JsonParamsLogAspect {
+
+    private static final Logger logger = Logger.getLogger(JsonParamsLogAspect.class);
+
+    @Pointcut("@annotation(com.gk.firework.Domain.Log.JsonParams)")
+    public void controllerAspect(){
+    }
+
+    @Before(value = "controllerAspect()")
+    public void beforeEnterControllerExecute(JoinPoint point) {
+        this.logHandle(point);
+    }
+
+
+    private void logHandle(JoinPoint point) {
+        try {
+            Object[] args = point.getArgs();
+            if (args.length != 1) throw new BusinessException("系统错误,参数对象只能是一个且固定");
+
+            HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
+            String url = request.getRequestURL().toString();
+            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            String current = formatter.format(new Date());
+            Object arg = args[0];
+            if (arg instanceof JSONArray || arg instanceof JSONObject) {
+                logger.info("\n请求时间:" + current +
+                            "\n请求地址:" + url +
+                            "\n请求参数:" + arg.toString());
+            }
+        } catch (BusinessException e) {
+            e.printStackTrace();
+            logger.error(e.getMessage());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}
diff --git a/src/main/java/com/gk/firework/Config/Oauth2/AccessTokenFilter.java b/src/main/java/com/gk/firework/Config/Oauth2/AccessTokenFilter.java
new file mode 100644
index 0000000..9de36e0
--- /dev/null
+++ b/src/main/java/com/gk/firework/Config/Oauth2/AccessTokenFilter.java
@@ -0,0 +1,214 @@
+package com.gk.firework.Config.Oauth2;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.gk.firework.Domain.AuthorizationInfo;
+import com.gk.firework.Domain.Utils.CommonUtil;
+import com.gk.firework.Domain.Utils.Constants;
+import com.gk.firework.Domain.Utils.Msg;
+import com.gk.firework.Domain.Vo.UserVo;
+import com.gk.firework.Service.AuthorizationService;
+import com.gk.firework.Service.UserService;
+import io.jsonwebtoken.Claims;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.util.AntPathMatcher;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * AccessToken filter
+ *
+ * @author zhangby
+ * @date 2019-05-20 20:32
+ */
+public class AccessTokenFilter implements Filter {
+    private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+    /**
+     * redis service
+     */
+    IRedisService redisService = SpringContextUtil.getBean(IRedisService.class);
+
+    UserService userService = SpringContextUtil.getBean(UserService.class);
+
+    AuthorizationService authorizationService = SpringContextUtil.getBean(AuthorizationService.class);
+
+    /**
+     * do filter
+     *
+     * @param servletRequest  servletRequest
+     * @param servletResponse servletResponse
+     * @param filterChain     filterChain
+     * @throws IOException      IOException
+     * @throws ServletException ServletException
+     */
+    @Override
+    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+        HttpServletRequest request = (HttpServletRequest) servletRequest;
+        HttpServletResponse response = (HttpServletResponse) servletResponse;
+        response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
+        Msg msg = new Msg();
+        try {
+            // filter url  && !request.getMethod().equals("OPTIONS")
+            if (urlMatcher(request.getRequestURI(), Constants.FILTER_EXCLUDE_PATH)){
+                String token = request.getHeader(HttpHeaders.AUTHORIZATION);
+                if (null != token && !token.equals("undefined")) {
+                    /** 解析token */
+                    Claims claims = CommonUtil.parseJWT(token);
+                    if (ObjectUtil.isNotNull(claims)) {
+                        //设置当前登录用户
+                        System.setProperty(Constants.CURRENT_USER_ID, claims.get("user_id").toString());
+                        try {
+                            //获取redis 查询token是否有效 [jti]
+                            String tokenKey = StrUtil.format(RedisKeyEnum.AUTH_TOKEN.getKey(), claims.getId());
+                            Object userInfo = redisService.get(tokenKey);
+                            if (ObjectUtil.isNotNull(userInfo)) {
+                                Map map = JSON.parseObject(userInfo.toString(), Map.class);
+                                UserVo userVo = userService.selectUserVoByName(map.get("username").toString());
+                                if (null == userVo) {
+                                    msg.setCode("100");
+                                    msg.setMessage("用户不存在");
+                                    returnJson(response, msg);
+                                    return;
+                                }
+                                if (userVo.getIssale() == 1){
+                                    if (userVo.getStatus()!=null && userVo.getStatus() != 1){
+                                        msg.setCode("100");
+                                        msg.setMessage("用户已失效");
+                                        returnJson(response, msg);
+                                        return;
+                                    }
+                                    if (userVo.getExpiredate() != null && userVo.getExpiredate().getTime() < System.currentTimeMillis()){
+                                        msg.setCode("100");
+                                        msg.setMessage("用户已超期");
+                                        returnJson(response, msg);
+                                        return;
+                                    }
+
+                                    Object loginObj =  map.get("logintime");
+                                    Object authObj =  map.get("auth");
+                                    if (loginObj != null && authObj != null){
+                                        //通过auth查询授权码最后登录时间
+                                        AuthorizationInfo authInfo = authorizationService.selectByUser(userVo.getCompanynumber(),authObj.toString());
+                                        if (authInfo == null){
+                                            msg.setCode("100");
+                                            msg.setMessage("授权码无效");
+                                            returnJson(response, msg);
+                                            return;
+                                        }
+                                        if (authInfo.getLasttime().getTime() > Long.parseLong(loginObj.toString())){
+                                            redisService.set(tokenKey, userInfo, 0L);
+                                            msg.setCode("100");
+                                            msg.setMessage("登录失效,请重新登录");
+                                            returnJson(response, msg);
+                                            return;
+                                        }
+                                    }
+                                }
+                                //更新登录超时时间
+                                redisService.set(tokenKey, userInfo, 60L*60L*18L);
+                            } else {
+                                logger.info("998:登录超时,无效认证");
+                                msg.setCode("100");
+                                msg.setMessage("登录超时,无效认证");
+                                returnJson(response, msg);
+                                return;
+                            }
+                        } catch (Exception e) {
+                            logger.info("401:非授权访问,无效的token");
+                        }
+                    } else {
+                        logger.info("500: 账户或密码不正确,登录失败");
+                    }
+                }
+                else if(request.getMethod().equals("OPTIONS")) {
+                    response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
+                    response.setHeader("Access-Control-Allow-Credentials", "true");
+                    response.setHeader("Access-Control-Allow-Methods", "POST, GET, PATCH, DELETE, PUT, OPTIONS");
+                    response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, X-Auth-Token, Authorization");
+                    response.setHeader("Access-Control-Max-Age","3600");
+                    response.setStatus(HttpStatus.OK.value());
+                    return;
+                }
+                else {
+                    logger.info("500: token不存在");
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            //系统异常
+            msg.setCode("100");
+            msg.setMessage("系统异常请稍后重试");
+            returnJson(response, msg);
+            response.setStatus(HttpStatus.OK.value());
+        }
+        filterChain.doFilter(servletRequest, servletResponse);
+        //过滤器结束之后销毁
+        System.clearProperty(Constants.CURRENT_USER_ID);
+    }
+
+
+    @Override
+    public void init(FilterConfig filterConfig) throws ServletException {
+    }
+
+    @Override
+    public void destroy() {
+
+    }
+
+    /**
+     * 认证是否需要,验证session url
+     *
+     * @param real_url
+     * @return
+     */
+    private boolean urlMatcher(String real_url, String pathFilter) {
+        AntPathMatcher antPathMatcher = new AntPathMatcher();
+        /** 验证添加项url */
+        if (StrUtil.isNotBlank(pathFilter)) {
+            for (String path : pathFilter.split(",")) {
+                if (antPathMatcher.match(path.trim(), real_url.trim())) {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
+    /**
+     * 返回url
+     *
+     * @param response
+     * @param json
+     */
+    private void returnJson(HttpServletResponse response, Msg msg) {
+        PrintWriter writer = null;
+        response.setCharacterEncoding("UTF-8");
+        response.setContentType("text/html; charset=utf-8");
+        response.setHeader("Access-Control-Allow-Credentials", "true");
+        response.setHeader("Access-Control-Allow-Methods", "POST, GET, PATCH, DELETE, PUT, OPTIONS");
+        response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, X-Auth-Token, Authorization");
+        response.setHeader("Access-Control-Max-Age","3600");
+        try {
+            writer = response.getWriter();
+            writer.print(JSON.toJSON(msg));
+        } catch (IOException e) {
+        } finally {
+            if (writer != null) {
+                writer.close();
+            }
+        }
+    }
+}
diff --git a/src/main/java/com/gk/firework/Config/Oauth2/IRedisService.java b/src/main/java/com/gk/firework/Config/Oauth2/IRedisService.java
new file mode 100644
index 0000000..a1dee75
--- /dev/null
+++ b/src/main/java/com/gk/firework/Config/Oauth2/IRedisService.java
@@ -0,0 +1,180 @@
+package com.gk.firework.Config.Oauth2;
+
+import com.alibaba.fastjson.JSON;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.data.redis.core.ValueOperations;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * redis service
+ *
+ * @author zhangby
+ * @date 2019-05-15 09:34
+ */
+@Service
+public class IRedisService {
+    /**
+     * logger
+     */
+    private final Logger logger = LoggerFactory.getLogger(this.getClass());
+
+    /**
+     * redis service
+     */
+    @Autowired
+    protected StringRedisTemplate redisTemplate;
+
+    /**
+     * Write to redis cache
+     *
+     * @param key key
+     * @param value value
+     * @return boolean
+     */
+    public boolean set(final String key, Object value) {
+        boolean result = false;
+        if (value != null) {
+            try {
+                ValueOperations operations = redisTemplate.opsForValue();
+                if (value instanceof String) {
+                    operations.set(key, value.toString());
+                } else {
+                    operations.set(key, JSON.toJSONString(value));
+                }
+                result = true;
+            } catch (Exception e) {
+                logger.info("Writing redis cache failed! The error message is:" + e.getMessage());
+                e.printStackTrace();
+            }
+        }
+        return result;
+    }
+
+    /**
+     * Write redis cache (set expire survival time)
+     *
+     * @param key key
+     * @param value value
+     * @param expire time
+     * @return boolean
+     */
+    public boolean set(final String key, Object value, Long expire) {
+        boolean result = false;
+        try {
+            ValueOperations operations = redisTemplate.opsForValue();
+            if (value instanceof String) {
+                operations.set(key, value.toString());
+            } else {
+                operations.set(key, JSON.toJSONString(value));
+            }
+            redisTemplate.expire(key, expire, TimeUnit.SECONDS);
+            result = true;
+        } catch (Exception e) {
+            logger.info("Writing to the redis cache (setting the expire lifetime) failed! The error message is:" + e.getMessage());
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+
+    /**
+     * Read redis cache
+     *
+     * @param key key
+     * @return object
+     */
+    public Object get(final String key) {
+        Object result = null;
+        try {
+            ValueOperations operations = redisTemplate.opsForValue();
+            result = operations.get(key);
+        } catch (Exception e) {
+            logger.info("Failed to read redis cache! The error message is:" + e.getMessage());
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+    /**
+     * Read redis to entity
+     *
+     * @param key   redis key
+     * @param clazz 实体类class
+     * @param <T>   泛型
+     * @return T
+     */
+    public <T> T getBean(final String key, Class<T> clazz) {
+        return Optional.ofNullable(get(key))
+                .map(o -> JSON.parseObject(o.toString(), clazz))
+                .orElse(null);
+    }
+
+    /**
+     * Read redis to List
+     * @param key
+     * @param clazz
+     * @param <T>
+     * @return
+     */
+    public <T> List<T> getArrayBean(final String key, Class<T> clazz) {
+        return Optional.ofNullable(get(key))
+                .map(o -> JSON.parseArray(o.toString(), clazz))
+                .orElse(null);
+    }
+
+
+    /**
+     * Determine if there is a corresponding key in the redis cache
+     *
+     * @param key key
+     * @return boolean
+     */
+    public boolean exists(final String key) {
+        boolean result = false;
+        try {
+            result = redisTemplate.hasKey(key);
+        } catch (Exception e) {
+           logger.info("Determine if there is a corresponding key in the redis cache failed! The error message is:" + e.getMessage());
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+    /**
+     * Redis deletes the corresponding value according to the key
+     *
+     * @param key key
+     * @return boolean
+     */
+    public boolean remove(final String key) {
+        boolean result = false;
+        try {
+            if (exists(key)) {
+                redisTemplate.delete(key);
+            }
+            result = true;
+        } catch (Exception e) {
+            logger.info("Redis fails to delete the corresponding value according to the key! The error message is:" + e.getMessage());
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+    /**
+     * Redis deletes the corresponding value according to the keywords batch
+     *
+     * @param keys keys
+     */
+    public void remove(final String... keys) {
+        for (String key : keys) {
+            remove(key);
+        }
+    }
+}
diff --git a/src/main/java/com/gk/firework/Config/Oauth2/JwtAccessToken.java b/src/main/java/com/gk/firework/Config/Oauth2/JwtAccessToken.java
new file mode 100644
index 0000000..87c0f7c
--- /dev/null
+++ b/src/main/java/com/gk/firework/Config/Oauth2/JwtAccessToken.java
@@ -0,0 +1,26 @@
+package com.gk.firework.Config.Oauth2;
+
+import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken;
+import org.springframework.security.oauth2.common.OAuth2AccessToken;
+import org.springframework.security.oauth2.provider.OAuth2Authentication;
+import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
+
+/**
+ * 自定义token
+ *
+ * @author zhangby
+ * @date 2019-04-01 11:39
+ */
+public class JwtAccessToken extends JwtAccessTokenConverter {
+
+    @Override
+    public OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication) {
+        DefaultOAuth2AccessToken defaultOAuth2AccessToken = new DefaultOAuth2AccessToken(accessToken);
+        // 设置额外用户信息
+        OauthUser baseUser = ((OauthUser) authentication.getPrincipal());
+        // 将用户信息添加到token额外信息中
+        defaultOAuth2AccessToken.getAdditionalInformation().put("user_id", baseUser.getId());
+
+        return super.enhance(defaultOAuth2AccessToken, authentication);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Config/Oauth2/JwtConfig.java b/src/main/java/com/gk/firework/Config/Oauth2/JwtConfig.java
new file mode 100644
index 0000000..8934056
--- /dev/null
+++ b/src/main/java/com/gk/firework/Config/Oauth2/JwtConfig.java
@@ -0,0 +1,32 @@
+package com.gk.firework.Config.Oauth2;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.oauth2.provider.token.TokenStore;
+import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
+import org.springframework.security.oauth2.provider.token.store.JwtTokenStore;
+
+/**
+ * 配置jwt
+ */
+@Configuration
+public class JwtConfig {
+
+    @Autowired
+    JwtAccessTokenConverter jwtAccessTokenConverter;
+
+    @Bean
+    @Qualifier("tokenStore")
+    public TokenStore tokenStore() {
+        return new JwtTokenStore(jwtAccessTokenConverter);
+    }
+
+    @Bean
+    protected JwtAccessTokenConverter jwtTokenEnhancer() {
+        JwtAccessToken converter = new JwtAccessToken();
+        converter.setSigningKey("springCloud_oauth_service");
+        return converter;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Config/Oauth2/LoginAuthenticationFilter.java b/src/main/java/com/gk/firework/Config/Oauth2/LoginAuthenticationFilter.java
new file mode 100644
index 0000000..3ae47ca
--- /dev/null
+++ b/src/main/java/com/gk/firework/Config/Oauth2/LoginAuthenticationFilter.java
@@ -0,0 +1,77 @@
+package com.gk.firework.Config.Oauth2;
+
+
+import com.gk.firework.Domain.Utils.Constants;
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
+import org.springframework.security.web.util.matcher.OrRequestMatcher;
+import org.springframework.security.web.util.matcher.RequestMatcher;
+import org.springframework.stereotype.Component;
+import org.springframework.web.filter.GenericFilterBean;
+
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.Optional;
+
+/**
+ * 添加用户授权统一过滤【对登录类型支持】
+ *
+ * @author zhangby
+ * @date 2019-04-09 16:41
+ */
+@Component
+public class LoginAuthenticationFilter extends GenericFilterBean implements ApplicationContextAware {
+
+    private static final String OAUTH_TOKEN_URL = "/oauth/token";
+
+    private RequestMatcher requestMatcher;
+
+    public LoginAuthenticationFilter(){
+        this.requestMatcher = new OrRequestMatcher(
+                new AntPathRequestMatcher(OAUTH_TOKEN_URL, "GET"),
+                new AntPathRequestMatcher(OAUTH_TOKEN_URL, "POST")
+        );
+    }
+
+    /**
+     * 过滤拦截
+     * @param servletRequest
+     * @param servletResponse
+     * @param filterChain
+     * @throws IOException
+     * @throws ServletException
+     */
+    @Override
+    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+
+        HttpServletRequest request = (HttpServletRequest) servletRequest;
+        HttpServletResponse response = (HttpServletResponse) servletResponse;
+
+        if(requestMatcher.matches(request)){
+            try{
+                //设置集成登录信息
+                String auth_type = request.getParameter("auth_type");
+                System.setProperty(Constants.AUTH_TYPE, Optional.ofNullable(auth_type).orElse(""));
+                //预处理
+                filterChain.doFilter(request,response);
+                //后置处理
+            }finally {
+                System.clearProperty(Constants.AUTH_TYPE);
+            }
+        }else{
+            filterChain.doFilter(request,response);
+        }
+    }
+
+    @Override
+    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+
+    }
+}
diff --git a/src/main/java/com/gk/firework/Config/Oauth2/OAuth2Config.java b/src/main/java/com/gk/firework/Config/Oauth2/OAuth2Config.java
new file mode 100644
index 0000000..4616770
--- /dev/null
+++ b/src/main/java/com/gk/firework/Config/Oauth2/OAuth2Config.java
@@ -0,0 +1,70 @@
+package com.gk.firework.Config.Oauth2;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer;
+import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter;
+import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer;
+import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer;
+import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer;
+import org.springframework.security.oauth2.provider.token.TokenStore;
+import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
+
+/**
+ * 配置oauth2.0
+ *
+ * @author zhangby
+ * @date 2019/2/27 11:27 AM
+ */
+@Configuration
+@EnableAuthorizationServer
+public class OAuth2Config extends AuthorizationServerConfigurerAdapter {
+
+    @Override
+    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
+        clients.inMemory()
+                .withClient("uaa-service")
+                .secret("123456")
+                .scopes("service")
+                .autoApprove(true)
+                .authorizedGrantTypes("implicit", "refresh_token", "password", "authorization_code")
+                //18小时过期
+                .refreshTokenValiditySeconds(18*60*60)
+                .accessTokenValiditySeconds(18*60*60);
+    }
+
+    @Override
+    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
+        endpoints.tokenStore(tokenStore)
+                .tokenEnhancer(tokenConverter)
+                .reuseRefreshTokens(false)
+                .authenticationManager(authenticationManager)
+                .userDetailsService(userServiceDetail);
+    }
+
+    @Autowired
+    private LoginAuthenticationFilter loginAuthenticationFilter;
+
+    @Override
+    public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
+        security.allowFormAuthenticationForClients()
+                .tokenKeyAccess("isAuthenticated()")
+                .checkTokenAccess("permitAll()")
+                .addTokenEndpointAuthenticationFilter(loginAuthenticationFilter);
+    }
+
+    @Autowired
+    private UserServiceDetail userServiceDetail;
+
+    @Autowired
+    @Qualifier("authenticationManagerBean")
+    private AuthenticationManager authenticationManager;
+
+    @Autowired
+    TokenStore tokenStore;
+
+    @Autowired
+    JwtAccessTokenConverter tokenConverter;
+}
diff --git a/src/main/java/com/gk/firework/Config/Oauth2/OauthRole.java b/src/main/java/com/gk/firework/Config/Oauth2/OauthRole.java
new file mode 100644
index 0000000..23ee81e
--- /dev/null
+++ b/src/main/java/com/gk/firework/Config/Oauth2/OauthRole.java
@@ -0,0 +1,71 @@
+package com.gk.firework.Config.Oauth2;
+
+
+import org.springframework.security.core.GrantedAuthority;
+
+/**
+ * oauth2.0授权 角色类
+ *
+ * @author zhangby
+ * @date 2019-05-14 09:25
+ */
+
+public class OauthRole implements GrantedAuthority {
+
+    /**
+     * 角色id
+     */
+    private String id;
+    /**
+     * 角色名称
+     */
+    private String name;
+
+    private String code;
+
+    private String btnAccess;
+
+    public OauthRole(String id, String name,String code,String btnAccess) {
+        this.name = name;
+        this.id = id;
+        this.code = code;
+        this.btnAccess = btnAccess;
+    }
+
+    @Override
+    public String getAuthority() {
+        return name;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getBtnAccess() {
+        return btnAccess;
+    }
+
+    public void setBtnAccess(String btnAccess) {
+        this.btnAccess = btnAccess;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Config/Oauth2/OauthUser.java b/src/main/java/com/gk/firework/Config/Oauth2/OauthUser.java
new file mode 100644
index 0000000..fb730af
--- /dev/null
+++ b/src/main/java/com/gk/firework/Config/Oauth2/OauthUser.java
@@ -0,0 +1,107 @@
+package com.gk.firework.Config.Oauth2;
+
+import com.google.common.collect.Lists;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.userdetails.UserDetails;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * oauth2.0授权 用户类
+ *
+ * @author zhangby
+ * @date 2019-05-13 16:22
+ */
+@ApiModel(value = "OauthUser")
+public class OauthUser implements UserDetails {
+
+    /**
+     * 用户id
+     */
+    @ApiModelProperty(hidden = true)
+    private String id;
+    /**
+     * 用户名
+     */
+    @ApiModelProperty(value = "username(登录名)", example = "admin")
+    private String username;
+    /**
+     * 密码
+     */
+    @ApiModelProperty(value = "password(密码)", example = "123")
+    private String password;
+    /**
+     * 用户角色
+     */
+    @ApiModelProperty(hidden = true)
+    private List<OauthRole> oauthRoles = Lists.newArrayList();
+
+    @Override
+    @ApiModelProperty(hidden = true)
+    public Collection<? extends GrantedAuthority> getAuthorities() {
+        return this.oauthRoles;
+    }
+
+    @Override
+    @ApiModelProperty(hidden = true)
+    public String getPassword() {
+        return this.password;
+    }
+
+    @Override
+    @ApiModelProperty(hidden = true)
+    public String getUsername() {
+        return this.username;
+    }
+
+    @Override
+    @ApiModelProperty(hidden = true)
+    public boolean isAccountNonExpired() {
+        return true;
+    }
+
+    @Override
+    @ApiModelProperty(hidden = true)
+    public boolean isAccountNonLocked() {
+        return true;
+    }
+
+    @Override
+    @ApiModelProperty(hidden = true)
+    public boolean isCredentialsNonExpired() {
+        return true;
+    }
+
+    @Override
+    @ApiModelProperty(hidden = true)
+    public boolean isEnabled() {
+        return true;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public List<OauthRole> getOauthRoles() {
+        return oauthRoles;
+    }
+
+    public void setOauthRoles(List<OauthRole> oauthRoles) {
+        this.oauthRoles = oauthRoles;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Config/Oauth2/RedisKeyEnum.java b/src/main/java/com/gk/firework/Config/Oauth2/RedisKeyEnum.java
new file mode 100644
index 0000000..d58ff6b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Config/Oauth2/RedisKeyEnum.java
@@ -0,0 +1,56 @@
+package com.gk.firework.Config.Oauth2;
+
+import cn.hutool.core.lang.Dict;
+import cn.hutool.core.util.StrUtil;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Stream;
+
+/**
+ * Redis key 枚举
+ *
+ * @author zhangby
+ * @date 14/10/19 2:02 pm
+ */
+public enum RedisKeyEnum {
+    /**
+     * redis for access_token key
+     */
+    AUTH_TOKEN("auth:token:{}"),
+    /**
+     * app user for redis key
+     */
+    REDIS_KEY_USER_ID("user:id:{}"),
+    /**
+     * redis for dict key
+     */
+    REDIS_KEY_DICT_TYPE("dict:type:{}");
+
+    private String key;
+
+    RedisKeyEnum(String key) {
+        this.key = key;
+    }
+
+    public String getKey() {
+        return this.key;
+    }
+
+    /**
+     * 枚举转list
+     *
+     * @return
+     */
+    public static List<Dict> toList() {
+        return Stream.of(values())
+                .collect(
+                        ArrayList::new,
+                        (li, item) -> li.add(Dict.create()
+                                .set("label", StrUtil.format(item.getKey(), ""))
+                                .set("value", StrUtil.format(item.getKey(), ""))
+                        ),
+                        List::addAll
+                );
+    }
+}
diff --git a/src/main/java/com/gk/firework/Config/Oauth2/ResourceServerConfig.java b/src/main/java/com/gk/firework/Config/Oauth2/ResourceServerConfig.java
new file mode 100644
index 0000000..87a28ef
--- /dev/null
+++ b/src/main/java/com/gk/firework/Config/Oauth2/ResourceServerConfig.java
@@ -0,0 +1,50 @@
+package com.gk.firework.Config.Oauth2;
+
+import com.gk.firework.Domain.Utils.Constants;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
+import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
+import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;
+import org.springframework.security.oauth2.provider.token.TokenStore;
+import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
+import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;
+
+/**
+ * resource config
+ *
+ * @author zhangby
+ * @date 2019-05-19 12:08
+ */
+@Configuration
+@EnableResourceServer
+public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
+    Logger log = LoggerFactory.getLogger(ResourceServerConfig.class);
+
+    //去除部分不需要token的url  FILTER_EXCLUDE_PATH
+    @Override
+    public void configure(HttpSecurity http) throws Exception {
+        http
+                .csrf().disable()
+                .logout().disable()
+                .addFilterBefore(new AccessTokenFilter(), BasicAuthenticationFilter.class)
+                .authorizeRequests()
+                .antMatchers(Constants.FILTER_EXCLUDE_PATH.split(",")).permitAll()
+                .antMatchers("/**").authenticated();
+    }
+
+
+    @Override
+    public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
+        resources.resourceId("oauth-client").tokenStore(tokenStore);
+    }
+
+    @Autowired
+    TokenStore tokenStore;
+
+    @Autowired
+    JwtAccessTokenConverter tokenConverter;
+}
diff --git a/src/main/java/com/gk/firework/Config/Oauth2/SpringContextUtil.java b/src/main/java/com/gk/firework/Config/Oauth2/SpringContextUtil.java
new file mode 100644
index 0000000..618e88d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Config/Oauth2/SpringContextUtil.java
@@ -0,0 +1,69 @@
+package com.gk.firework.Config.Oauth2;
+
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+
+/**
+ * Static injection of spring objects
+ *
+ * @author zhangby
+ * @date 2019-05-15 11:45
+ */
+@Component
+public class SpringContextUtil implements ApplicationContextAware {
+
+    private static ApplicationContext applicationContext;
+
+    /**
+     * 设置 setApplicationContext
+     * @param applicationContext application
+     * @throws BeansException beansException
+     */
+    @Override
+    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+        if (SpringContextUtil.applicationContext == null) {
+            SpringContextUtil.applicationContext = applicationContext;
+        }
+    }
+
+    /**
+     * 获取applicationContext
+     * @return ApplicationContext
+     */
+    public static ApplicationContext getApplicationContext() {
+        return applicationContext;
+    }
+
+    /**
+     * 通过name获取 Bean.
+     * @param name 名称
+     * @return Object
+     */
+    public static Object getBean(String name) {
+        return getApplicationContext().getBean(name);
+    }
+
+    /**
+     * 通过class获取Bean.
+     * @param clazz class
+     * @param <T> T
+     * @return T
+     */
+    public static <T> T getBean(Class<T> clazz) {
+        return getApplicationContext().getBean(clazz);
+    }
+
+    /**
+     * 通过name,以及Clazz返回指定的Bean
+     * @param name name
+     * @param clazz class
+     * @param <T> T
+     * @return T
+     */
+    public static <T> T getBean(String name, Class<T> clazz) {
+        return getApplicationContext().getBean(name, clazz);
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Config/Oauth2/UserServiceDetail.java b/src/main/java/com/gk/firework/Config/Oauth2/UserServiceDetail.java
new file mode 100644
index 0000000..9710d94
--- /dev/null
+++ b/src/main/java/com/gk/firework/Config/Oauth2/UserServiceDetail.java
@@ -0,0 +1,56 @@
+package com.gk.firework.Config.Oauth2;
+
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.CommonUtil;
+import com.gk.firework.Domain.Utils.Constants;
+import com.gk.firework.Service.UserService;
+import io.swagger.models.auth.In;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * 加载用户特定数据的核心接口(Core interface which loads user-specific data.)
+ *
+ * @author zhangby
+ * @date 2019-05-14 09:49
+ */
+@Service
+public class UserServiceDetail implements UserDetailsService {
+
+    @Autowired
+    UserService userService;
+
+    /**
+     * 根据用户名查询用户
+     */
+    @Override
+    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
+        String authType = System.getProperty(Constants.AUTH_TYPE);
+        OauthUser oauthUser = new OauthUser();
+        //查询登录用户
+        UserInfo userInfo = userService.selectByLoginname(username);
+        Optional.of(userInfo).ifPresent(us ->{
+            //查询角色
+            List<OauthRole> roleByUser = userService.selectRoleByUser(us.getId().intValue());
+            //数据类型转换
+            List<OauthRole> oauthRoles = CommonUtil
+                    .convers(roleByUser, role -> new OauthRole(
+                            role.getId(),
+                            role.getAuthority(),null,null)
+                    );
+            //数据结果集封装
+            oauthUser.setId(us.getId().toString());
+            oauthUser.setPassword(us.getPassword());
+            oauthUser.setUsername(us.getUsername());
+            oauthUser.setOauthRoles(oauthRoles);
+        });
+        //判断登录入口
+        return oauthUser;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Config/Oauth2/WebSecurityConfig.java b/src/main/java/com/gk/firework/Config/Oauth2/WebSecurityConfig.java
new file mode 100644
index 0000000..18dc2dd
--- /dev/null
+++ b/src/main/java/com/gk/firework/Config/Oauth2/WebSecurityConfig.java
@@ -0,0 +1,85 @@
+package com.gk.firework.Config.Oauth2;
+
+import com.gk.firework.Domain.Utils.Base64Encrypt;
+import com.gk.firework.Domain.Utils.StringUtils;
+import org.apache.tomcat.util.security.MD5Encoder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
+import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
+import org.springframework.security.crypto.password.PasswordEncoder;
+
+import javax.servlet.http.HttpServletResponse;
+
+@Configuration
+@EnableGlobalMethodSecurity(prePostEnabled = true)
+public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
+
+    @Autowired
+    private UserServiceDetail userServiceDetail;
+
+    @Override
+    @Bean
+    public AuthenticationManager authenticationManagerBean() throws Exception {
+        return super.authenticationManagerBean();
+    }
+
+    @Override
+    protected void configure(HttpSecurity http) throws Exception {
+        //CSRF:因为不再依赖于Cookie,所以你就不需要考虑对CSRF(跨站请求伪造)的防范
+        http
+                .csrf().disable()
+                .exceptionHandling()
+                .authenticationEntryPoint((request, response, authException) -> response.sendError(HttpServletResponse.SC_UNAUTHORIZED))
+                .and()
+                .logout().disable()
+//                .addFilter(loginAuthenticationFilter)
+                .authorizeRequests()
+                .regexMatchers("/actuator.*").permitAll()
+                .antMatchers("/**").authenticated()
+                .and()
+                .httpBasic();
+
+    }
+
+    @Override
+    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
+        auth
+                .userDetailsService(userServiceDetail)
+                .passwordEncoder(new PasswordEncoder() {
+                    @Override
+                    public String encode(CharSequence rawPassword) {
+                        return Base64Encrypt.encode(rawPassword.toString().getBytes());
+                    }
+
+                    @Override
+                    public boolean matches(CharSequence rawPassword, String encodedPassword) {
+                        return encodedPassword.equals(Base64Encrypt.encode(rawPassword.toString().getBytes()));
+                    }
+                });
+    }
+
+    /**
+     * Configuration password encryption
+     * @return
+     */
+    @Bean
+    PasswordEncoder passwordEncoder() {
+        return new PasswordEncoder() {
+            @Override
+            public String encode(CharSequence charSequence) {
+                return charSequence.toString();
+            }
+
+            @Override
+            public boolean matches(CharSequence charSequence, String s) {
+                return s.equals(charSequence.toString());
+            }
+        };
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Config/ServiceContext/ApplicationContextUtil.java b/src/main/java/com/gk/firework/Config/ServiceContext/ApplicationContextUtil.java
new file mode 100644
index 0000000..1221b0c
--- /dev/null
+++ b/src/main/java/com/gk/firework/Config/ServiceContext/ApplicationContextUtil.java
@@ -0,0 +1,32 @@
+package com.gk.firework.Config.ServiceContext;
+
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+
+/**
+ * 配置类,解决定时任务无法注入service的问题
+ */
+@Component
+public class ApplicationContextUtil implements ApplicationContextAware {
+
+    private static ApplicationContext applicationContext;
+
+    public static ApplicationContext getApplicationContext() {
+        return applicationContext;
+    }
+
+
+    @Override
+    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+        ApplicationContextUtil.applicationContext = applicationContext;
+
+    }
+
+
+    public static Object getBean(String beanName) {
+        return applicationContext.getBean(beanName);
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Config/Swagger/SwaggerConfig.java b/src/main/java/com/gk/firework/Config/Swagger/SwaggerConfig.java
new file mode 100644
index 0000000..5e2f10c
--- /dev/null
+++ b/src/main/java/com/gk/firework/Config/Swagger/SwaggerConfig.java
@@ -0,0 +1,42 @@
+package com.gk.firework.Config.Swagger;
+
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.ParameterBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.schema.ModelRef;
+import springfox.documentation.service.Contact;
+import springfox.documentation.service.Parameter;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+import java.util.*;
+
+@Configuration
+@EnableSwagger2
+public class SwaggerConfig {
+
+    @Bean
+    public Docket docket() {
+        ParameterBuilder ticketPar = new ParameterBuilder();
+        List<Parameter> pars = new ArrayList<Parameter>();
+        ticketPar.name("Authorization").description("token")
+                .modelRef(new ModelRef("string")).parameterType("header")
+                .required(false).build(); //header中的ticket参数非必填,传空也可以
+        pars.add(ticketPar.build());
+
+        return new Docket(DocumentationType.SWAGGER_2)
+                .select().apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
+                .paths(PathSelectors.any())
+                .build().globalOperationParameters(pars).apiInfo(new ApiInfoBuilder()
+                        .description("烟花爆竹流向管理系统接口文档").contact(new Contact("李宇", "", "986321569@qq.com"))
+                        .version("1.0").title("API文档").license("Apache2.0")
+                        .licenseUrl("http://www.apache.org/licnesens/LINCENSE-2.0").build());
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Config/Swagger/WebMvcConfig.java b/src/main/java/com/gk/firework/Config/Swagger/WebMvcConfig.java
new file mode 100644
index 0000000..1a0a7a6
--- /dev/null
+++ b/src/main/java/com/gk/firework/Config/Swagger/WebMvcConfig.java
@@ -0,0 +1,17 @@
+package com.gk.firework.Config.Swagger;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
+
+@Configuration
+public class WebMvcConfig extends WebMvcConfigurerAdapter {
+    @Override
+    public void addResourceHandlers(ResourceHandlerRegistry registry) {
+        registry.addResourceHandler("swagger-ui.html")
+                .addResourceLocations("classpath:/META-INF/resources/");
+
+        registry.addResourceHandler("/webjars/**")
+                .addResourceLocations("classpath:/META-INF/resources/webjars/");
+    }
+}
diff --git a/src/main/java/com/gk/firework/Config/ThreadExecutor/ExecutorConfig.java b/src/main/java/com/gk/firework/Config/ThreadExecutor/ExecutorConfig.java
new file mode 100644
index 0000000..debe134
--- /dev/null
+++ b/src/main/java/com/gk/firework/Config/ThreadExecutor/ExecutorConfig.java
@@ -0,0 +1,80 @@
+package com.gk.firework.Config.ThreadExecutor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.AsyncConfigurer;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+
+import java.lang.reflect.Method;
+import java.util.concurrent.Executor;
+
+import java.util.concurrent.ThreadPoolExecutor;
+
+@Configuration
+@EnableAsync
+public class ExecutorConfig implements AsyncConfigurer {
+    private Logger logger = LoggerFactory.getLogger(ExecutorConfig.class);
+
+    /**
+     * 最小线程数(核心线程数)
+     */
+    @Value("${threadPool.corePoolSize}")
+    private int corePoolSize;
+    /**
+     * 最大线程数
+     */
+    @Value("${threadPool.maxPoolSize}")
+    private int maxPoolSize;
+    /**
+     * 等待队列(队列最大长度)
+     */
+    @Value("${threadPool.queueCapacity}")
+    private int queueCapacity;
+
+
+    @Bean(name = "SocketTaskExecutor")
+    public Executor asyncServiceExecutor() {
+        logger.info("start asyncServiceExecutor");
+
+        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+        //配置核心线程数
+        executor.setCorePoolSize(corePoolSize);
+        //配置最大线程数
+        executor.setMaxPoolSize(maxPoolSize);
+        //配置队列大小
+        executor.setQueueCapacity(queueCapacity);
+        //配置线程池中的线程的名称前缀
+        executor.setThreadNamePrefix("async-service-");
+        // rejection-policy:当pool已经达到max size的时候,如何处理新任务
+        // CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行
+        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+
+        //执行初始化
+        executor.initialize();
+        return executor;
+    }
+
+    /**
+     * 异步异常处理
+     *
+     * @return
+     */
+    @Override
+    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
+        return new SpringAsyncExceptionHandler();
+    }
+
+    class SpringAsyncExceptionHandler implements AsyncUncaughtExceptionHandler {
+        @Override
+        public void handleUncaughtException(Throwable throwable, Method method, Object... obj) {
+            logger.error("Exception occurs in async method", throwable.getMessage());
+        }
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Config/Upload/UploadConfig.java b/src/main/java/com/gk/firework/Config/Upload/UploadConfig.java
new file mode 100644
index 0000000..214bf28
--- /dev/null
+++ b/src/main/java/com/gk/firework/Config/Upload/UploadConfig.java
@@ -0,0 +1,21 @@
+package com.gk.firework.Config.Upload;
+
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration;
+import org.springframework.context.annotation.Bean;
+import org.springframework.web.multipart.MultipartResolver;
+import org.springframework.web.multipart.commons.CommonsMultipartResolver;
+
+@EnableAutoConfiguration(exclude = {MultipartAutoConfiguration.class})
+public class UploadConfig {
+    @Bean(name = "multipartResolver")
+    public MultipartResolver multipartResolver() {
+        CommonsMultipartResolver resolver = new CommonsMultipartResolver();
+        resolver.setDefaultEncoding("UTF-8");
+        resolver.setResolveLazily(true);
+        resolver.setMaxInMemorySize(40960);
+        //上传文件大小
+        resolver.setMaxUploadSize(100 * 1024 * 1024);
+        return resolver;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Config/WebSocket/WebSocketConfig.java b/src/main/java/com/gk/firework/Config/WebSocket/WebSocketConfig.java
new file mode 100644
index 0000000..92a6e45
--- /dev/null
+++ b/src/main/java/com/gk/firework/Config/WebSocket/WebSocketConfig.java
@@ -0,0 +1,14 @@
+package com.gk.firework.Config.WebSocket;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.socket.server.standard.ServerEndpointExporter;
+
+@Configuration
+public class WebSocketConfig {
+
+    @Bean
+    public ServerEndpointExporter serverEndpointExporter(){
+        return new ServerEndpointExporter();
+    }
+}
diff --git a/src/main/java/com/gk/firework/Config/WebSocket/WebSocketServer.java b/src/main/java/com/gk/firework/Config/WebSocket/WebSocketServer.java
new file mode 100644
index 0000000..2e863f2
--- /dev/null
+++ b/src/main/java/com/gk/firework/Config/WebSocket/WebSocketServer.java
@@ -0,0 +1,123 @@
+package com.gk.firework.Config.WebSocket;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import javax.websocket.*;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.io.IOException;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArraySet;
+import java.util.concurrent.atomic.AtomicInteger;
+
+@Component("websocket")
+@ServerEndpoint("/push/{uid}")
+@Slf4j
+public class WebSocketServer {
+
+    @PostConstruct
+    public void init() {
+        System.out.println("websocket 加载");
+    }
+
+    //静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。
+    private static final AtomicInteger onlineCount = new AtomicInteger(0);
+    //concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。
+    private static Map<Long,WebSocketServer> webSocketMap = new ConcurrentHashMap<>();
+
+    //与某个客户端的连接会话,需要通过它来给客户端发送数据
+    private Session session;
+
+    private Long uid;
+
+
+
+
+    /**
+     * 连接建立成功调用的方法
+     */
+    @OnOpen
+    public void onOpen(Session session,@PathParam("uid") Long uid) {
+        this.session = session;
+        this.uid = uid;
+        if(webSocketMap.containsKey(uid)){
+            webSocketMap.remove(uid);
+            webSocketMap.put(uid,this);
+        }else{
+            webSocketMap.put(uid,this);
+            onlineCount.incrementAndGet();
+        }
+        log.info("有新窗口开始监听:当前在线人数为" + onlineCount);
+    }
+
+    /**
+     * 连接关闭调用的方法
+     */
+    @OnClose
+    public void onClose() {
+        if (webSocketMap.containsKey(uid)) {
+            webSocketMap.remove(uid);
+            onlineCount.decrementAndGet();
+        }
+        log.info("有一连接关闭!当前在线人数为" + onlineCount);
+    }
+
+
+
+
+    /**
+     * 收到客户端消息后调用的方法
+     * @param message 客户端发送过来的消息
+     */
+    @OnMessage
+    public void onMessage(String message) throws IOException {
+        log.info("来自客户端的消息:{}",message);
+        sendMessage("收到消息,消息内容:"+message);
+    }
+
+    @OnError
+    public void onError(Session session, Throwable error) {
+        log.error("发生错误:{},Session ID: {}",error.getMessage(),session.getId());
+    }
+
+    public void sendMessage(String message) throws IOException {
+        synchronized(session) {
+            this.session.getBasicRemote().sendText(message);
+        }
+    }
+
+
+    /**
+     * @param uid
+     * @param message
+     */
+    public static void sendMessage(@PathParam("uid") Long uid, String message) {
+        try {
+            if (webSocketMap.containsKey(uid))  webSocketMap.get(uid).sendMessage(message);
+        } catch (IOException e) {
+            log.error("发送消息出错:{}", e.getMessage());
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 群发消息
+     * @param message
+     * @throws IOException
+     */
+    public static void broadcast(String message) throws IOException {
+
+    }
+
+
+    public Session getSession() {
+        return session;
+    }
+
+    public void setSession(Session session) {
+        this.session = session;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Controller/AppFileController.java b/src/main/java/com/gk/firework/Controller/AppFileController.java
new file mode 100644
index 0000000..6d4ca31
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/AppFileController.java
@@ -0,0 +1,211 @@
+package com.gk.firework.Controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.gk.firework.Controller.Base.BaseController;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.Utils.*;
+import com.gk.firework.Domain.Vo.*;
+import com.gk.firework.Service.AppFileService;
+import com.gk.firework.Service.HelpDocService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+
+
+@Api(tags = "APP版本信息接口")
+@RestController
+public class AppFileController extends BaseController {
+    @Value("${appPath}")
+    private String appPath;
+    @Value("${appUrl}")
+    private String appUrl;
+    @Autowired
+    AppFileService appFileService;
+    @Autowired
+    HelpDocService helpDocService;
+
+    @GetMapping("/appFile")
+    @ApiOperation(value = "获取App文件数据",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码"),
+            @ApiImplicitParam(name = "pageSize",value = "每页行数"),
+            @ApiImplicitParam(name = "sort",value = "排序规则"),
+            @ApiImplicitParam(name = "order",value = "排序字段"),
+            @ApiImplicitParam(name = "filetype",value = "文件类型"),
+    })
+    public Msg getAppFileInfo(@RequestParam(defaultValue = "0") Integer pageIndex, @RequestParam(defaultValue = "10") Integer pageSize, String sort, String order,
+                            String filetype){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        HashMap<String, Object> condition = new HashMap<String, Object>();
+
+        if (StringUtils.isNotBlank(filetype)){
+            condition.put("filetype",filetype.trim());
+        }
+
+        pageInfo.setCondition(condition);
+        appFileService.selectDataGrid(pageInfo);
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    @GetMapping("/newAppFile")
+    @ApiOperation(value = "获取最新App文件数据",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "filetype",value = "文件类型"),
+    })
+    public Msg getNewAppFile(String filetype){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        AppFileInfo appFileInfo = appFileService.selectNew(filetype);
+        if (appFileInfo != null){
+            msg.setResult(appFileInfo);
+            return msg;
+        }else {
+            msg.setCode("999");
+            msg.setMessage("未找到文件");
+            return msg;
+        }
+    }
+
+    @ApiOperation(value = "添加文件",response = Msg.class)
+    @PostMapping("/addAppFile")
+    public Msg addAppFile(AppFileVo appFileVo) throws Exception {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        AppFileInfo appFileInfo = BeanUtils.copy(appFileVo, AppFileInfo.class);
+
+        if (appFileVo.getFile() != null){
+            String filePath = UploadUtil.uploadFile(appFileVo.getFile(),appPath);
+            appFileInfo.setFileurl(appUrl+filePath);
+        }
+        appFileInfo.setCreated(new Date());
+        appFileInfo.setUpdated(new Date());
+        appFileService.save(appFileInfo);
+        return msg;
+    }
+
+    @ApiOperation(value = "修改文件",response = Msg.class)
+    @PostMapping("/editAppFile")
+    public Msg editAppFile(AppFileVo appFileVo) throws Exception {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        AppFileInfo appFileInfo = BeanUtils.copy(appFileVo, AppFileInfo.class);
+
+        if (appFileVo.getFile() != null){
+            String filePath = UploadUtil.uploadFile(appFileVo.getFile(),appPath);
+            appFileInfo.setFileurl(appUrl+filePath);
+        }
+        appFileInfo.setUpdated(new Date());
+        appFileService.updateById(appFileInfo);
+        return msg;
+    }
+
+    @ApiOperation(value = "删除文件",response = Msg.class)
+    @PostMapping("/delAppFile")
+    public Msg delAppFile(@RequestBody JSONObject jsonObject){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        Long id = jsonObject.getLong("id");
+
+        AppFileInfo appFileInfo = appFileService.getById(id);
+        if (appFileInfo != null){
+            appFileService.removeById(appFileInfo);
+        }else {
+            msg.setCode("999");
+            msg.setMessage("未找到记录");
+        }
+        return msg;
+    }
+
+    @GetMapping("/helpDoc")
+    @ApiOperation(value = "获取帮助文档数据",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码"),
+            @ApiImplicitParam(name = "pageSize",value = "每页行数"),
+            @ApiImplicitParam(name = "sort",value = "排序规则"),
+            @ApiImplicitParam(name = "order",value = "排序字段"),
+            @ApiImplicitParam(name = "name",value = "文件名称"),
+    })
+    public Msg getHelpDocInfo(@RequestParam(defaultValue = "0") Integer pageIndex, @RequestParam(defaultValue = "10") Integer pageSize, String sort, String order,
+                              String name){
+        Msg msg = new Msg(true);
+
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        HashMap<String, Object> condition = new HashMap<>(4);
+
+        if (StringUtils.isNotBlank(name)){
+            condition.put("name",name.trim());
+        }
+
+        pageInfo.setCondition(condition);
+        helpDocService.selectDataGrid(pageInfo);
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    @ApiOperation(value = "添加帮助文档",response = Msg.class)
+    @PostMapping("/addHelpDoc")
+    public Msg addHelpDoc(HelpDocVo helpDocVo) throws Exception {
+        Msg msg = new Msg(true);
+        HelpDocInfo helpDocInfo = BeanUtils.copy(helpDocVo, HelpDocInfo.class);
+
+        if (helpDocVo.getFile() != null){
+            String filePath = UploadUtil.uploadFile(helpDocVo.getFile(),appPath);
+            helpDocInfo.setFileurl(appUrl+filePath);
+        }
+        helpDocInfo.setCreated(new Date());
+        helpDocInfo.setUpdated(new Date());
+        helpDocService.save(helpDocInfo);
+        return msg;
+    }
+
+    @ApiOperation(value = "修改帮助文档",response = Msg.class)
+    @PostMapping("/editHelpDoc")
+    public Msg editHelpDoc(HelpDocVo helpDocVo) throws Exception {
+        Msg msg = new Msg(true);
+
+        HelpDocInfo helpDocInfo = BeanUtils.copy(helpDocVo, HelpDocInfo.class);
+        if (helpDocVo.getFile() != null){
+            String filePath = UploadUtil.uploadFile(helpDocVo.getFile(),appPath);
+            helpDocInfo.setFileurl(appUrl+filePath);
+        }
+        helpDocInfo.setUpdated(new Date());
+
+        helpDocService.updateById(helpDocInfo);
+        return msg;
+    }
+
+    @ApiOperation(value = "删除帮助文档(假删)",response = Msg.class)
+    @PostMapping("/delHelpDoc")
+    public Msg delHelpDoc(@RequestBody JSONObject jsonObject) {
+        Msg msg = new Msg(true);
+        Long id = jsonObject.getLong("id");
+        HelpDocInfo helpDocInfo = helpDocService.getById(id);
+        if (helpDocInfo != null) {
+            helpDocInfo.setIsdel((byte) 1);
+            helpDocService.updateById(helpDocInfo);
+        } else {
+            msg.setCode("999");
+            msg.setMessage("未找到记录");
+        }
+        return msg;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Controller/AssessApplyController.java b/src/main/java/com/gk/firework/Controller/AssessApplyController.java
new file mode 100644
index 0000000..9fa2999
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/AssessApplyController.java
@@ -0,0 +1,185 @@
+package com.gk.firework.Controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Controller.Base.BaseController;
+import com.gk.firework.Domain.AccessAssessApply;
+import com.gk.firework.Domain.AssessApply;
+import com.gk.firework.Domain.Utils.FilterObject;
+import com.gk.firework.Service.AccessAssessApplyService;
+import com.gk.firework.Service.AssessApplyService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@Api(tags = "销售,准入评定")
+@RequestMapping("/assess")
+@RestController
+public class AssessApplyController extends BaseController {
+
+    @Autowired
+    AssessApplyService assessApplyService;
+    @Autowired
+    AccessAssessApplyService accessAssessApplyService;
+
+    @PostMapping("/addApply-sale")
+    @ApiOperation(value = "新增评定申请", httpMethod = "POST")
+    public Object addSaleAssessApply(AssessApply assessApply) {
+        assessApplyService.addSaleAssessApply(assessApply, getUser());
+        return success();
+    }
+
+    @PostMapping("/modApply-sale")
+    @ApiOperation(value = "修改评定申请", httpMethod = "POST")
+    public Object modSaleAssessApply(AssessApply assessApply) {
+        assessApplyService.modSaleAssessApply(assessApply, getUser());
+        return success();
+    }
+
+    @PostMapping("/submitApply-sale")
+    @ApiOperation(value = "提交申请",httpMethod = "POST")
+    public Object submitSaleAssessApply(@RequestParam Long id) {
+        assessApplyService.submitSaleAssessApply(id, getUser());
+        return success();
+    }
+
+    @PostMapping("/approveApply-sale")
+    @ApiOperation(value = "审批通过", httpMethod = "POST")
+    public Object approveSaleAssessApply(@RequestBody JSONObject entity) {
+        assessApplyService.approveSaleAssessApply(entity,getUser());
+        return success();
+    }
+
+    @PostMapping("/rejectApply-sale")
+    @ApiOperation(value = "审批驳回", httpMethod = "POST")
+    public Object rejectSaleAssessApply(@RequestBody JSONObject entity) {
+        assessApplyService.rejectSaleAssessApply(entity,getUser());
+        return success();
+    }
+
+    @PostMapping("/applyList-sale")
+    @ApiOperation(value = "分页查询", httpMethod = "POST")
+    public Object saleApplyList(@RequestBody FilterObject filterAssess) {
+        Integer pageIndex = filterAssess.getPageIndex();
+        Integer pageSize = filterAssess.getPageSize();
+        IPage page = assessApplyService.selectSalePages(new Page<>(pageIndex, pageSize), filterAssess.getFilter(), getUser());
+        return success(page);
+    }
+
+
+    @PostMapping("/addApply-access")
+    @ApiOperation(value = "新增准入申请", httpMethod = "POST")
+    public Object addAccessAssessApply(AssessApply assessApply) {
+        assessApplyService.addAccessAssessApply(assessApply, getUser());
+        return success();
+    }
+
+    @PostMapping("/modApply-access")
+    @ApiOperation(value = "修改准入申请", httpMethod = "POST")
+    public Object modAccessAssessApply(AssessApply assessApply) {
+        assessApplyService.modAccessAssessApply(assessApply, getUser());
+        return success();
+    }
+
+    @PostMapping("/submitApply-access")
+    @ApiOperation(value = "提交准入申请",httpMethod = "POST")
+    public Object submitAccessAssessApply(@RequestParam Long id) {
+        assessApplyService.submitAccessAssessApply(id, getUser());
+        return success();
+    }
+
+    @PostMapping("/approveApply-access")
+    @ApiOperation(value = "审批通过",httpMethod = "POST")
+    public Object approveAccessAssessApply(@RequestBody JSONObject entity) {
+        accessAssessApplyService.approveAccessAssessApply(entity, getUser());
+        return success();
+    }
+
+
+    @PostMapping("/rejectApply-access")
+    @ApiOperation(value = "拒绝通过",httpMethod = "POST")
+    public Object rejectAccessAssessApply(@RequestBody JSONObject entity) {
+        accessAssessApplyService.rejectAccessAssessApply(entity, getUser());
+        return success();
+    }
+
+
+
+    /**
+    * @Description: 准入评定申请分页(协会)
+    * @date 2021/7/7 16:07
+    */
+    @PostMapping("/applyList-access")
+    @ApiOperation(value = "准入评定申请分页", httpMethod = "POST")
+    public Object accessApplyList(@RequestBody FilterObject filterAssess) {
+        Integer pageIndex = filterAssess.getPageIndex();
+        Integer pageSize = filterAssess.getPageSize();
+        IPage page = accessAssessApplyService.selectAccessPages(new Page<>(pageIndex, pageSize), filterAssess.getFilter(), getUser());
+        return success(page);
+    }
+
+
+    /**
+     * @Description: 准入评定申诉分页(被处罚企业)
+     * @date 2021/7/7 16:07
+     */
+    @PostMapping("/applyList-access-appeal")
+    @ApiOperation(value = "准入评定申诉分页", httpMethod = "POST")
+    public Object accessApplyAppealList(@RequestBody FilterObject filterAssess) {
+        Integer pageIndex = filterAssess.getPageIndex();
+        Integer pageSize = filterAssess.getPageSize();
+        IPage page = accessAssessApplyService.selectAccessAppealPages(new Page<>(pageIndex, pageSize), filterAssess.getFilter(), getUser());
+        return success(page);
+    }
+
+
+
+    /**
+     * @Description: 企业申诉(将被处罚企业) 14天内可以申诉
+     * @date 2021/7/7 16:07
+     */
+    @PostMapping("/appealApply-access")
+    @ApiOperation(value = "企业准入评定申诉", httpMethod = "POST")
+    public Object appealAccessApply(AccessAssessApply accessAccessApply) {
+        accessAssessApplyService.AccessAppeal(accessAccessApply,getUser());
+        return success();
+    }
+
+
+    /**
+     * @Description: 申诉通过
+     * @date 2021/7/7 16:07
+     */
+    @PostMapping("/appealPass-access")
+    @ApiOperation(value = "申诉通过", httpMethod = "POST")
+    public Object appealAccessPass(@RequestParam Long id) {
+        accessAssessApplyService.appealAccessPass(id,getUser());
+        return success();
+    }
+
+
+
+    /**
+     * @Description: 申诉拒绝(可以包含拒绝理由)
+     * @date 2021/7/7 16:07
+     */
+    @PostMapping("/appealReject-access")
+    @ApiOperation(value = "申诉拒绝", httpMethod = "POST")
+    public Object appealAccessReject(@RequestBody JSONObject entity) {
+        accessAssessApplyService.appealAccessReject(entity,getUser());
+        return success();
+    }
+
+
+
+
+
+
+
+
+
+
+
+}
diff --git a/src/main/java/com/gk/firework/Controller/AuthorizationController.java b/src/main/java/com/gk/firework/Controller/AuthorizationController.java
new file mode 100644
index 0000000..0ddcddf
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/AuthorizationController.java
@@ -0,0 +1,145 @@
+package com.gk.firework.Controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.gk.firework.Controller.Base.BaseController;
+import com.gk.firework.Domain.AuthorizationInfo;
+import com.gk.firework.Domain.Enterprise;
+import com.gk.firework.Domain.Enum.ErrorCode;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.Msg;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Service.AuthorizationService;
+import com.gk.firework.Service.EnterpriseService;
+import com.gk.firework.Service.UserService;
+import io.swagger.annotations.Api;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author : jingjy
+ * @date : 2021/7/2 14:31
+ */
+@Api("授权码")
+@RequestMapping("auth")
+@RestController
+public class AuthorizationController extends BaseController {
+    @Autowired
+    private AuthorizationService authorizationService;
+    @Autowired
+    private EnterpriseService enterpriseService;
+    @Autowired
+    private UserService userService;
+
+    @GetMapping("/list")
+    public Msg getAuthListByEnterpriseId(@RequestParam("userId") String userId) {
+        if (StringUtils.isBlank(userId)) {
+            return new Msg(ErrorCode.ERROR_10001);
+        }
+        UserInfo userInfo = userService.getById(userId);
+        if (userInfo == null) {
+            return new Msg(ErrorCode.ERROR_50001);
+        }
+        List<AuthorizationInfo> authorizationInfo = authorizationService.getAuthByEnterprise(userInfo.getCompanynumber());
+        return success(authorizationInfo);
+    }
+
+    @PostMapping("/create")
+    public Msg createAuth(@RequestBody JSONObject jsonObject) {
+        String userId = jsonObject.getString("userId");
+        String contractCode = jsonObject.getString("contractCode");
+        Byte flag = jsonObject.getByte("flag");
+        if (StringUtils.isBlank(userId)) {
+            return new Msg(ErrorCode.ERROR_10001);
+        }
+        UserInfo userInfo = userService.getById(userId);
+        if (userInfo == null) {
+            return new Msg(ErrorCode.ERROR_50001);
+        }
+        if (StringUtils.isBlank(contractCode)) {
+            return new Msg(ErrorCode.ERROR_10002, "合同编号不能为空");
+        }
+        AuthorizationInfo authorizationInfo = new AuthorizationInfo();
+        List<AuthorizationInfo> authorizationExist = authorizationService.getAuthByEnterprise(userInfo.getCompanynumber());
+        String prefix;
+        if (authorizationExist.size() > 0) {
+            //企业已经生成过授权码,则使用第一次生成的前缀
+            prefix = authorizationExist.get(0).getAuthcodeprefix();
+        } else {
+            //未生成则随机生成,不能重复
+            String str;
+            str = randomLetter(3);
+            boolean isPrefixExist;
+            isPrefixExist = authorizationService.checkPrefixExist(str);
+            while (isPrefixExist) {
+                str = randomLetter(3);
+                isPrefixExist = authorizationService.checkPrefixExist(str);
+            }
+            prefix = str;
+        }
+        String suffix;
+            suffix = randomLetter(3);
+        boolean isAuthCodeExist;
+        isAuthCodeExist = authorizationService.checkCodeExist(prefix + suffix);
+        while (isAuthCodeExist) {
+            suffix = randomLetter(3);
+            isAuthCodeExist = authorizationService.checkCodeExist(prefix + suffix);
+        }
+        authorizationInfo.setAuthcode(prefix+suffix);
+        authorizationInfo.setAuthcodeprefix(prefix);
+        authorizationInfo.setFlag(flag);
+        authorizationInfo.setEnterprisenumber(userInfo.getCompanynumber());
+        authorizationInfo.setContractcode(contractCode);
+        authorizationInfo.setCreatedat(new Date());
+        authorizationInfo.setCreatedby(userService.getById(getUser().getId()).getUsername());
+        authorizationInfo.setStatus((byte)1);
+        authorizationService.save(authorizationInfo);
+        return success();
+    }
+
+    @PostMapping("status")
+    public Msg changeStatus(@RequestBody JSONObject jsonObject){
+        String id = jsonObject.getString("id");
+        String status = jsonObject.getString("status");
+        if (!"0".equals(status) && !"1".equals(status)){
+            return new Msg(ErrorCode.ERROR_10004);
+        }
+        if (StringUtils.isBlank(id)){
+            return new Msg(ErrorCode.ERROR_10002);
+        }
+        AuthorizationInfo authorizationInfo = authorizationService.getById(id);
+        if (authorizationInfo == null){
+            return new Msg(ErrorCode.ERROR_50001);
+        }
+        authorizationInfo.setStatus(Byte.parseByte(status));
+        authorizationService.updateById(authorizationInfo);
+        return success();
+    }
+
+    @PostMapping("delete")
+    public Msg deleteAuth(@RequestBody JSONObject jsonObject){
+        String id = jsonObject.getString("id");
+        if (StringUtils.isBlank(id)){
+            return new Msg(ErrorCode.ERROR_10002);
+        }
+        AuthorizationInfo authorizationInfo = authorizationService.getById(id);
+        if (authorizationInfo == null){
+            return new Msg(ErrorCode.ERROR_50001);
+        }
+        authorizationService.removeById(id);
+        return success();
+    }
+    /**
+     * @param n 随机字符串长度
+     * @return 生成的随机字符串
+     */
+    private String randomLetter(int n) {
+        StringBuilder str = new StringBuilder();
+        for (int i = 0; i < n; i++) {
+            str.append((char) (Math.random() * 26 + 'A'));
+        }
+        return str.toString();
+    }
+}
diff --git a/src/main/java/com/gk/firework/Controller/Base/BaseController.java b/src/main/java/com/gk/firework/Controller/Base/BaseController.java
new file mode 100644
index 0000000..c673b3e
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/Base/BaseController.java
@@ -0,0 +1,137 @@
+package com.gk.firework.Controller.Base;
+
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.gk.firework.Config.Oauth2.IRedisService;
+import com.gk.firework.Config.Oauth2.RedisKeyEnum;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.CommonUtil;
+import com.gk.firework.Domain.Utils.Msg;
+import com.google.common.net.HttpHeaders;
+import io.jsonwebtoken.Claims;
+import org.apache.log4j.Logger;
+import org.springframework.web.bind.annotation.ModelAttribute;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+public class BaseController {
+
+    protected static final Logger logger = Logger.getLogger(BaseController.class);
+    protected HttpServletRequest request;
+    protected HttpServletResponse response;
+    protected HttpSession session;
+
+    @Resource
+    IRedisService redisService;
+
+    @ModelAttribute
+    public void setReqAndResp(HttpServletRequest request, HttpServletResponse response){
+        this.request = request;
+        this.response = response;
+        this.session = request.getSession();
+    }
+
+    /**
+     * 输出信息到页面
+     * @param msg:要输出的信息(可以是js脚本等)
+     */
+    public void printOutMsg(String msg){
+        try {
+            this.response.setCharacterEncoding("UTF-8");
+            this.response.setContentType("text/html;charset=utf-8");
+            PrintWriter out = null;
+            out = this.response.getWriter();
+            out.print(msg);
+            out.flush();
+            out.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 获取请求完整路径
+     * @param request
+     * @return
+     */
+    public String getUrl(HttpServletRequest request){
+        String url = request.getRequestURI();
+        String params = "";
+        if(request.getQueryString()!=null){
+            params = request.getQueryString().toString();
+        }
+        if(!"".equals(params)){
+            url = url+"?"+params;
+        }
+        return url;
+    }
+
+    /**
+    * @Description: 获取用户
+    * @param
+    * @date 2021/3/23 14:36
+    */
+    public UserInfo getUser() {
+        String token = this.request.getHeader(HttpHeaders.AUTHORIZATION);
+        //解析token
+
+        Claims claims = CommonUtil.parseJWT(token);
+        if (null != claims){
+            String tokenKey = StrUtil.format(RedisKeyEnum.AUTH_TOKEN.getKey(), claims.getId());
+            Object o = redisService.get(tokenKey);
+            if (o == null) {
+                return null;
+            }else{
+                JSONObject jo = JSONObject.parseObject(o.toString());
+                UserInfo user = new UserInfo();
+                user.setId(jo.getLong("id"));;
+                user.setUsername(jo.getString("username"));
+                user.setCompanyid(jo.getLong("companyid"));
+                user.setType(jo.getInteger("type"));
+                return user;
+            }
+        }else{
+            return null;
+        }
+
+    }
+
+    public String getAuth(){
+        String token = this.request.getHeader(HttpHeaders.AUTHORIZATION);
+        Claims claims = CommonUtil.parseJWT(token);
+        if (null != claims){
+            String tokenKey = StrUtil.format(RedisKeyEnum.AUTH_TOKEN.getKey(), claims.getId());
+            Object o = redisService.get(tokenKey);
+            if (o == null) {
+                return null;
+            }else{
+                JSONObject object = JSONObject.parseObject(o.toString());
+
+                return object.getString("auth");
+            }
+        }else{
+            return null;
+        }
+
+    }
+
+    public Msg success() {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        return msg;
+    }
+
+    public Msg success(Object object) {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        msg.setResult(object);
+        return msg;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Controller/BlackListController.java b/src/main/java/com/gk/firework/Controller/BlackListController.java
new file mode 100644
index 0000000..fc4b96d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/BlackListController.java
@@ -0,0 +1,44 @@
+package com.gk.firework.Controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Controller.Base.BaseController;
+import com.gk.firework.Domain.BlackList;
+import com.gk.firework.Domain.Utils.FilterObject;
+import com.gk.firework.Service.BlackListService;
+import io.swagger.annotations.Api;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+
+@Api(tags = "黑名单")
+@RequestMapping("/blackList")
+@RestController
+public class BlackListController extends BaseController {
+
+    @Autowired
+    private BlackListService blackListService;
+
+    @PostMapping("/add")
+    public Object addBlackList(@RequestBody BlackList blackList){
+        blackListService.addBlackList(blackList, getUser());
+        return success();
+    }
+
+    @PostMapping("/del")
+    public Object delBlackList(@RequestParam Long id){
+        blackListService.delBlackList(id, getUser());
+        return success();
+    }
+
+    @PostMapping("/list")
+    public Object list(@RequestBody FilterObject filterObj){
+        Integer pageIndex = filterObj.getPageIndex();
+        Integer pageSize = filterObj.getPageSize();
+        IPage page = blackListService.selectPages(new Page<>(pageIndex, pageSize), filterObj.getFilter(), getUser());
+        return success(page);
+    }
+
+
+
+}
diff --git a/src/main/java/com/gk/firework/Controller/ContractController.java b/src/main/java/com/gk/firework/Controller/ContractController.java
new file mode 100644
index 0000000..4ea4cc4
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/ContractController.java
@@ -0,0 +1,1209 @@
+package com.gk.firework.Controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Controller.Base.BaseController;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.Enum.ErrorCode;
+import com.gk.firework.Domain.Utils.*;
+import com.gk.firework.Domain.Vo.*;
+import com.gk.firework.Service.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.*;
+
+import static com.gk.firework.Domain.Enum.ErrorCode.*;
+
+@Api(tags = "在线交易合同接口")
+@RequestMapping("/contract")
+@RestController
+public class ContractController extends BaseController {
+    @Value("${contractPath}")
+    private String contractPath; //配置文件配置的物理保存地址
+
+    @Autowired
+    ContractOrderService contractOrderService;
+    @Autowired
+    ContractDetailService contractDetailService;
+    @Autowired
+    ContractLogService contractLogService;
+    @Autowired
+    ContractUnitDetailService contractUnitDetailService;
+    @Autowired
+    ProductService productService;
+    @Autowired
+    UserService userService;
+    @Autowired
+    ProductCodeService productCodeService;
+    @Autowired
+    ProductLocusService productLocusService;
+    @Autowired
+    ControlPrintParamService controlPrintParamService;
+
+    @GetMapping("/getApply")
+    @ApiOperation(value = "获取合同申请数据",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码"),
+            @ApiImplicitParam(name = "pageSize",value = "每页行数"),
+            @ApiImplicitParam(name = "sort",value = "排序规则"),
+            @ApiImplicitParam(name = "order",value = "排序字段"),
+//            @ApiImplicitParam(name = "operator",value = "购买企业"),
+            @ApiImplicitParam(name = "supplyunitname",value = "生产企业"),
+            @ApiImplicitParam(name = "status",value = "合同状态"),
+            @ApiImplicitParam(name = "ordercode",value = "合同单号"),
+//            @ApiImplicitParam(name = "province",value = "省份"),
+//            @ApiImplicitParam(name = "city",value = "城市"),
+//            @ApiImplicitParam(name = "area",value = "区县"),
+//            @ApiImplicitParam(name = "town",value = "乡镇"),
+//            @ApiImplicitParam(name = "community",value = "社区"),
+    })
+    public Msg getApplyInfo(@RequestParam(defaultValue = "0") Integer pageIndex, @RequestParam(defaultValue = "10") Integer pageSize, String sort, String order,
+                                    String supplyunitname, String status, String ordercode){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        HashMap<String, Object> condition = new HashMap<String, Object>();
+
+        if (StringUtils.isNotBlank(supplyunitname)) {
+            condition.put("supplyunitname", supplyunitname.trim());
+        }
+
+        if (StringUtils.isNotBlank(status)) {
+            condition.put("status", status.trim());
+        }
+
+        if (StringUtils.isNotBlank(ordercode)){
+            condition.put("ordercode",ordercode.trim());
+        }
+
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (userInfo.getCompanyid() != null){
+            condition.put("purchaseenterprisenumber", userInfo.getCompanynumber());
+        }else if (userInfo.getType() == 3){
+            condition.put("province",userInfo.getProvince());
+            condition.put("city",userInfo.getCity());
+            condition.put("area",userInfo.getArea());
+            condition.put("town",userInfo.getTown());
+            condition.put("community",userInfo.getCommunity());
+        }
+
+//        if (StringUtils.isNotBlank(province) && condition.get("province") == null){
+//            condition.put("province",province.trim());
+//
+//        if (StringUtils.isNotBlank(city)){
+//            condition.put("city",city.trim());
+//        }
+//
+//        if (StringUtils.isNotBlank(area)){
+//            condition.put("area",area.trim());
+//        }
+//
+//        if (StringUtils.isNotBlank(town)){
+//            condition.put("town",town.trim());
+//        }
+//
+//        if (StringUtils.isNotBlank(community)){
+//            condition.put("community",community.trim());
+//        }
+
+//        }
+
+
+        pageInfo.setCondition(condition);
+        contractOrderService.selectDataGrid(pageInfo);
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    @GetMapping("/getConfirm")
+    @ApiOperation(value = "获取合同确认数据",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码"),
+            @ApiImplicitParam(name = "pageSize",value = "每页行数"),
+            @ApiImplicitParam(name = "sort",value = "排序规则"),
+            @ApiImplicitParam(name = "order",value = "排序字段"),
+            @ApiImplicitParam(name = "operator",value = "购买企业"),
+//            @ApiImplicitParam(name = "manufacturer",value = "生产企业"),
+            @ApiImplicitParam(name = "status",value = "合同状态"),
+            @ApiImplicitParam(name = "ordercode",value = "合同单号"),
+    })
+    public Msg getConfirm(@RequestParam(defaultValue = "0") Integer pageIndex, @RequestParam(defaultValue = "10") Integer pageSize, String sort, String order,
+                                    String operator, String status, String ordercode){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        HashMap<String, Object> condition = new HashMap<String, Object>();
+
+        if (StringUtils.isNotBlank(operator)) {
+            condition.put("operator", operator.trim());
+        }
+
+        if (StringUtils.isNotBlank(status)) {
+            condition.put("status", status.trim());
+        }
+
+        if (StringUtils.isNotBlank(ordercode)){
+            condition.put("ordercode",ordercode.trim());
+        }
+
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (userInfo.getCompanyid() != null){
+            condition.put("supplyenterprisenumber", userInfo.getCompanynumber());
+        }else if (userInfo.getType() == 3){
+            condition.put("province",userInfo.getProvince());
+            condition.put("city",userInfo.getCity());
+            condition.put("area",userInfo.getArea());
+            condition.put("town",userInfo.getTown());
+            condition.put("community",userInfo.getCommunity());
+        }
+
+//        if (StringUtils.isNotBlank(province) && condition.get("province") == null){
+//            condition.put("province",province.trim());
+//
+//        if (StringUtils.isNotBlank(city)){
+//            condition.put("city",city.trim());
+//        }
+//
+//        if (StringUtils.isNotBlank(area)){
+//            condition.put("area",area.trim());
+//        }
+//
+//        if (StringUtils.isNotBlank(town)){
+//            condition.put("town",town.trim());
+//        }
+//
+//        if (StringUtils.isNotBlank(community)){
+//            condition.put("community",community.trim());
+//        }
+//        }
+
+        condition.put("confirm",(byte)1);
+        pageInfo.setCondition(condition);
+        contractOrderService.selectDataGrid(pageInfo);
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+
+    @ApiOperation(value = "添加合同", response = Msg.class)
+    @PostMapping("/addApply")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "purchaseunitname",value = "单位名称",required = true),
+            @ApiImplicitParam(name = "purchaseunitaddress",value = "单位地址",required = true),
+            @ApiImplicitParam(name = "purchaserepresentative",value = "法定代表人",required = true),
+            @ApiImplicitParam(name = "purchaserepresentativephone",value = "法定代表人联系电话",required = true),
+            @ApiImplicitParam(name = "purchaserepresentativeemail",value = "法定代表人电子邮箱",required = true),
+            @ApiImplicitParam(name = "purchasebank",value = "开户银行",required = true),
+            @ApiImplicitParam(name = "purchaselicensenumber",value = "许可证编号",required = true),
+            @ApiImplicitParam(name = "purchasezipcode",value = "邮政编码",required = true),
+            @ApiImplicitParam(name = "purchaseagent",value = "委托代理人",required = true),
+            @ApiImplicitParam(name = "purchaseagentphone",value = "委托代理人联系电话",required = true),
+            @ApiImplicitParam(name = "purchaseagentemail",value = "委托代理人电子邮箱",required = true),
+            @ApiImplicitParam(name = "purchaseaccount",value = "账户",required = true),
+            @ApiImplicitParam(name = "purchaseenterprisenumber",value = "企业编号",required = true),
+
+            @ApiImplicitParam(name = "supplyunitname",value = "单位名称",required = true),
+            @ApiImplicitParam(name = "supplyunitaddress",value = "单位地址",required = true),
+            @ApiImplicitParam(name = "supplyrepresentative",value = "法定代表人",required = true),
+            @ApiImplicitParam(name = "supplyrepresentativephone",value = "法定代表人联系电话",required = true),
+            @ApiImplicitParam(name = "supplyrepresentativeemail",value = "法定代表人电子邮箱",required = true),
+            @ApiImplicitParam(name = "supplybank",value = "开户银行",required = true),
+            @ApiImplicitParam(name = "supplylicensenumber",value = "许可证编号",required = true),
+            @ApiImplicitParam(name = "supplyzipcode",value = "邮政编码",required = true),
+            @ApiImplicitParam(name = "supplyagent",value = "委托代理人",required = true),
+            @ApiImplicitParam(name = "supplyagentphone",value = "委托代理人联系电话",required = true),
+            @ApiImplicitParam(name = "supplyagentemail",value = "委托代理人电子邮箱",required = true),
+            @ApiImplicitParam(name = "supplyaccount",value = "账户",required = true),
+            @ApiImplicitParam(name = "supplyenterprisenumber",value = "企业编号",required = true),
+
+
+            @ApiImplicitParam(name = "signtime",value = "签订时间",required = true),
+            @ApiImplicitParam(name = "signlocation",value = "签订地点",required = true),
+
+            @ApiImplicitParam(name = "qualitystandard",value = "产品质量标准及要求",required = true),
+            @ApiImplicitParam(name = "prohibiteddrug",value = "禁(限)用药物要求",required = true),
+            @ApiImplicitParam(name = "packingstandard",value = "产品包装标准及要求   ",required = true),
+            @ApiImplicitParam(name = "timeandlocation",value = "提(交)货时间和地点",required = true),
+            @ApiImplicitParam(name = "transportandcost",value = "运输方式及费用负担",required = true),
+            @ApiImplicitParam(name = "acceptstandard",value = "验收标准与方法",required = true),
+            @ApiImplicitParam(name = "objectdeadline",value = "提出异议期限",required = true),
+            @ApiImplicitParam(name = "settlemethod",value = "结算方式与期限",required = true),
+            @ApiImplicitParam(name = "productsafetyandquality",value = "产品安全与质量责任",required = true),
+            @ApiImplicitParam(name = "transportsafety",value = "运输安全责任",required = true),
+            @ApiImplicitParam(name = "breakcontract",value = "违约责任",required = true),
+            @ApiImplicitParam(name = "contractdisputesfelid",value = "合同争议的解决方式:序号",required = true),
+            @ApiImplicitParam(name = "contractdisputesfelidcontent",value = "合同争议的解决方式:序号内容",required = true),
+            @ApiImplicitParam(name = "otheragreedmatters",value = "其他约定事项",required = true),
+
+            @ApiImplicitParam(name = "validstarttime",value = "合同有效开始时间",required = true),
+            @ApiImplicitParam(name = "validendtime",value = "合同有效结束时间",required = true),
+
+            @ApiImplicitParam(name = "file",value = "合同附件",required = true),
+            @ApiImplicitParam(name = "productList",value = "合同产品列表",required = true),
+
+    }
+    )
+    public Msg addApply(ContractOrderVo contractOrderVo) throws Exception {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        contractOrderService.checkAdd(contractOrderVo);
+        contractOrderService.addApply(contractOrderVo, getUser());
+        return msg;
+    }
+
+    @ApiOperation(value = "修改合同",response = Msg.class)
+    @PostMapping("/putApply")
+    public Msg putApply(ContractOrderVo contractOrderVo) throws Exception {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        contractOrderService.checkAdd(contractOrderVo);
+        contractOrderService.putApply(contractOrderVo, getUser());
+        return msg;
+    }
+
+    @ApiOperation(value = "删除合同",response = Msg.class)
+    @PostMapping("/delApply")
+    public Msg putApply(@RequestBody JSONObject jsonObject) throws Exception {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        String operator = getUser().getUsername();
+        Long id = jsonObject.getLong("id");
+        ContractOrderInfo contractOrderInfo = contractOrderService.getById(id);
+        //
+        if (!contractOrderInfo.getStatus().equals(ContractStatus.WAIT_SUBMIT) &&
+                !contractOrderInfo.getStatus().equals(ContractStatus.Refuse_Product)){
+            msg.setCode("999");
+            msg.setMessage("合同状态不为待提交、拒绝生产,无法删除");
+            return msg;
+        }
+
+        contractOrderInfo.setIsdel((byte)1);
+        contractOrderInfo.setModifiedby(operator);
+        contractOrderInfo.setModifieddate(new Date());
+        contractOrderService.updateById(contractOrderInfo);
+
+        ContractLogInfo contractLogInfo = new ContractLogInfo();
+        contractLogInfo.setOptlog("删除合同");
+        contractLogInfo.setOperator(operator);
+        contractLogInfo.setOrdercode(contractOrderInfo.getOrdercode());
+        contractLogInfo.setOperatordate(new Date());
+        contractLogService.save(contractLogInfo);
+
+        return msg;
+    }
+
+    @ApiOperation(value = "提交合同",response = Msg.class)
+    @PostMapping("/submitApply")
+    public Msg submitApply(@RequestBody JSONObject jsonObject) throws Exception {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        String operator = getUser().getUsername();
+        Long id = jsonObject.getLong("id");
+        ContractOrderInfo contractOrderInfo = contractOrderService.getById(id);
+
+        if (!contractOrderInfo.getStatus().equals(ContractStatus.WAIT_SUBMIT) &&
+                !contractOrderInfo.getStatus().equals(ContractStatus.Refuse_Product)){
+            msg.setCode("999");
+            msg.setMessage("合同状态不为待提交、拒绝生产,无法提交");
+            return msg;
+        }
+
+        contractOrderInfo.setStatus(ContractStatus.WAIT_CONFIRM);
+        contractOrderInfo.setModifiedby(operator);
+        contractOrderInfo.setModifieddate(new Date());
+        contractOrderInfo.setOpinion("");
+        contractOrderService.updateById(contractOrderInfo);
+
+        ContractLogInfo contractLogInfo = new ContractLogInfo();
+        contractLogInfo.setOptlog("提交合同");
+        contractLogInfo.setOperator(operator);
+        contractLogInfo.setOrdercode(contractOrderInfo.getOrdercode());
+        contractLogInfo.setOperatordate(new Date());
+        contractLogService.save(contractLogInfo);
+
+        return msg;
+    }
+
+    @ApiOperation(value = "确认生产", response = Msg.class)
+    @PostMapping("/confirmProduct")
+    public Msg confirmProduct(@RequestBody ContractOrderVo contractOrderVo) {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        contractOrderService.checkConfirm(contractOrderVo);
+        contractOrderService.confirmProduct(contractOrderVo, getUser());
+        return msg;
+    }
+
+    @ApiOperation(value = "导出电子标签号",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "ordercode",value = "合同单号"),
+    })
+    @PostMapping("/exportRFID")
+    public Msg exportRFID(@RequestBody JSONObject jsonObject) throws Exception {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        String ordercode = jsonObject.getString("ordercode");
+        ContractOrderInfo contractOrderInfo = contractOrderService.selectByOrderCode(ordercode);
+        if (!contractOrderInfo.getStatus().equals(ContractStatus.Generated)) {
+            msg.setCode("999");
+            msg.setMessage("合同状态不为已生成,无法导出");
+            return msg;
+        }
+        List<ProductCodeInfo> productCodeInfos = productCodeService.selectByOrderCode(ordercode);
+        List<ProductCodeVo> productCodeVoList = new ArrayList<> ();
+        for (ProductCodeInfo productCodeInfo : productCodeInfos){
+            ProductCodeVo productCodeVo = BeanUtils.copy(productCodeInfo,ProductCodeVo.class);
+            String start = productCodeInfo.getOriginalcode().substring(14,19);
+            Integer end = Integer.parseInt(start)+productCodeInfo.getBoxnumber()-1;
+            productCodeVo.setBoxrange("("+start+"-"+String.format("%05d", end)+")");
+            productCodeVo.setCrc(productCodeInfo.getOrdercode().substring(productCodeInfo.getOrdercode().length()-8));
+            productCodeVoList.add(productCodeVo);
+        }
+        msg.setResult(productCodeVoList);
+        return msg;
+    }
+
+    @ApiOperation(value = "导出内包装码",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "ordercode",value = "合同单号"),
+    })
+    @PostMapping("/exportBarCode")
+    public Msg exportBarCode(@RequestBody JSONObject jsonObject) throws Exception {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        String ordercode = jsonObject.getString("ordercode");
+        ContractOrderInfo contractOrderInfo = contractOrderService.selectByOrderCode(ordercode);
+        if (!contractOrderInfo.getStatus().equals(ContractStatus.Generated)) {
+            msg.setCode("999");
+            msg.setMessage("合同状态不为已生成,无法导出");
+            return msg;
+        }
+        List<ProductCodeVo> productCodeVos = new ArrayList<>();
+        List<ProductCodeVo> printCodeVos = new ArrayList<>();
+        List<ProductCodeInfo> productCodeInfos = productCodeService.selectByOrderCode(ordercode);
+        for (ProductCodeInfo productCodeInfo : productCodeInfos){
+            ProductCodeVo productCodeVo = BeanUtils.copy(productCodeInfo,ProductCodeVo.class);
+
+            BigDecimal explosiveContent = new BigDecimal(productCodeVo.getExplosivecontent().replace("kg","").replace("g",""));
+            Integer boxNumber = productCodeVo.getBoxnumber();
+//            try {
+//                productCodeVo.setImg(MatrixToImageWriter.getBase64Img(productCodeInfo.getOriginalcode()));
+//            }catch (Exception e){
+//                e.printStackTrace();
+//            }
+
+            if (productCodeVo.getExplosivecontent().contains("kg")){
+                BigDecimal explosive = explosiveContent.multiply(new BigDecimal(1000)).divide(new BigDecimal(boxNumber),0, RoundingMode.HALF_UP);
+                productCodeVo.setExplosivecontent(explosive + "g");
+            } else {
+                BigDecimal explosive = explosiveContent.divide(new BigDecimal(boxNumber),0, RoundingMode.HALF_UP);
+                productCodeVo.setExplosivecontent(explosive + "g");
+            }
+
+            Map<String,List<ProductCodeVo>> result = FireworkDeal.getProductCodeVoList(productCodeVo);
+
+            productCodeVos.addAll(result.get("productCodeVoList"));
+            printCodeVos.addAll(result.get("printCodeVoList"));
+        }
+
+        // printCodeVos
+        int length = printCodeVos.size();
+        int pageSize = 10;
+        int quotient  = length / pageSize;
+        int remainder = length % pageSize;
+        int maxPageIndex = quotient;
+        if (remainder > 0) maxPageIndex++;
+        List<List<ProductCodeVo>> splitPrintSize = new ArrayList<>();
+        for (int pageIndex = 0; pageIndex < maxPageIndex; pageIndex++) {
+            if (pageIndex + 1 == maxPageIndex) {
+                splitPrintSize.add(printCodeVos.subList(pageIndex * pageSize, length));
+                break;
+            }
+            splitPrintSize.add(printCodeVos.subList(pageIndex * pageSize, (pageIndex + 1) * pageSize));
+        }
+
+        HashMap<String, Object> result = new HashMap<>();
+//        result.put("exportInfo", productCodeVos);
+        result.put("printInfo", splitPrintSize);
+        msg.setResult(result);
+        return msg;
+    }
+
+    @ApiOperation(value = "显示内包装码批次",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "ordercode",value = "合同单号"),
+    })
+    @PostMapping("/batchBarCode")
+    public Msg batchBarCode(@RequestBody JSONObject jsonObject) throws Exception {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        String ordercode = jsonObject.getString("ordercode");
+        Integer needBlank = jsonObject.getInteger("needBlank");
+        ContractOrderInfo contractOrderInfo = contractOrderService.selectByOrderCode(ordercode);
+        if (!contractOrderInfo.getStatus().equals(ContractStatus.Generated)) {
+            msg.setCode("999");
+            msg.setMessage("合同状态不为已生成,无法打印");
+            return msg;
+        }
+        List<ProductCodeVo> printCodeVos = new ArrayList<>();
+        List<ProductCodeInfo> productCodeInfos = productCodeService.selectByOrderCode(ordercode);
+        for (ProductCodeInfo productCodeInfo : productCodeInfos){
+            ProductCodeVo productCodeVo = BeanUtils.copy(productCodeInfo,ProductCodeVo.class);
+            BigDecimal explosiveContent = new BigDecimal(productCodeVo.getExplosivecontent().replace("kg","").replace("g",""));
+            Integer boxNumber = productCodeVo.getBoxnumber();
+            if (productCodeVo.getExplosivecontent().contains("kg")){
+                BigDecimal explosive = explosiveContent.multiply(new BigDecimal(1000)).divide(new BigDecimal(boxNumber),0, RoundingMode.HALF_UP);
+                productCodeVo.setExplosivecontent(explosive + "g");
+            } else {
+                BigDecimal explosive = explosiveContent.divide(new BigDecimal(boxNumber),0, RoundingMode.HALF_UP);
+                productCodeVo.setExplosivecontent(explosive + "g");
+            }
+            printCodeVos.addAll(FireworkDeal.getBatchProductCodeList(productCodeVo,needBlank));
+        }
+
+        // printCodeVos
+        int length = printCodeVos.size();
+        int pageSize = 1000;
+        int quotient  = length / pageSize;
+        int remainder = length % pageSize;
+        int maxPageIndex = quotient;
+        if (remainder > 0) maxPageIndex++;
+        List<ProductCodePrint> splitPrintSize = new ArrayList<>();
+        for (int pageIndex = 0; pageIndex < maxPageIndex; pageIndex++) {
+            ProductCodePrint productCodePrint = new ProductCodePrint();
+            productCodePrint.setOrderCode(ordercode);
+            productCodePrint.setBatchCode(pageIndex+1);
+            if (pageIndex + 1 == maxPageIndex) {
+                List<ProductCodeVo> productCodeVoList = printCodeVos.subList(pageIndex * pageSize, length);
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(i).getItemcode())) {
+                        productCodePrint.setStartCode(productCodeVoList.get(i).getItemcode());
+                        break;
+                    }
+                }
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(productCodeVoList.size()-1-i).getItemcode())) {
+                        productCodePrint.setEndCode(productCodeVoList.get(productCodeVoList.size()-1-i).getItemcode());
+                        break;
+                    }
+                }
+                splitPrintSize.add(productCodePrint);
+            }
+            else {
+                List<ProductCodeVo> productCodeVoList = printCodeVos.subList(pageIndex * pageSize, (pageIndex + 1) * pageSize);
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(i).getItemcode())) {
+                        productCodePrint.setStartCode(productCodeVoList.get(i).getItemcode());
+                        break;
+                    }
+                }
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(productCodeVoList.size()-1-i).getItemcode())) {
+                        productCodePrint.setEndCode(productCodeVoList.get(productCodeVoList.size()-1-i).getItemcode());
+                        break;
+                    }
+                }
+                splitPrintSize.add(productCodePrint);
+            }
+        }
+
+        HashMap<String, Object> result = new HashMap<>();
+        result.put("printInfo", splitPrintSize);
+        msg.setResult(result);
+        return msg;
+    }
+
+    @ApiOperation(value = "分批打印内包装码",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "orderCode",value = "合同单号"),
+            @ApiImplicitParam(name = "batchCode",value = "批次号"),
+    })
+    @PostMapping("/printBarCode")
+    public Msg printBarCode(@RequestBody JSONObject jsonObject) throws Exception {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        String orderCode = jsonObject.getString("orderCode");
+        Integer batchCode = jsonObject.getInteger("batchCode");
+        Integer needBlank = jsonObject.getInteger("needBlank");
+        ContractOrderInfo contractOrderInfo = contractOrderService.selectByOrderCode(orderCode);
+        if (!contractOrderInfo.getStatus().equals(ContractStatus.Generated)) {
+            msg.setCode("999");
+            msg.setMessage("合同状态不为已生成,无法打印");
+            return msg;
+        }
+        List<ProductCodeVo> printCodeVos = new ArrayList<>();
+        List<ProductCodeInfo> productCodeInfos = productCodeService.selectByOrderCode(orderCode);
+        for (ProductCodeInfo productCodeInfo : productCodeInfos){
+            ProductCodeVo productCodeVo = BeanUtils.copy(productCodeInfo,ProductCodeVo.class);
+            BigDecimal explosiveContent = new BigDecimal(productCodeVo.getExplosivecontent().replace("kg","").replace("g",""));
+            Integer boxNumber = productCodeVo.getBoxnumber();
+            if (productCodeVo.getExplosivecontent().contains("kg")){
+                BigDecimal explosive = explosiveContent.multiply(new BigDecimal(1000)).divide(new BigDecimal(boxNumber),0, RoundingMode.HALF_UP);
+                productCodeVo.setExplosivecontent(explosive + "g");
+            } else {
+                BigDecimal explosive = explosiveContent.divide(new BigDecimal(boxNumber),0, RoundingMode.HALF_UP);
+                productCodeVo.setExplosivecontent(explosive + "g");
+            }
+            printCodeVos.addAll(FireworkDeal.getBatchProductCodeList(productCodeVo,needBlank));
+        }
+
+        // printCodeVos
+        int length = printCodeVos.size();
+        int pageSize = 1000;
+        int quotient  = length / pageSize;
+        int remainder = length % pageSize;
+        int maxPageIndex = quotient;
+        if (remainder > 0) maxPageIndex++;
+        ProductCodePrint productPrint = new ProductCodePrint();
+        for (int pageIndex = 0; pageIndex < maxPageIndex; pageIndex++) {
+            ProductCodePrint productCodePrint = new ProductCodePrint();
+            productCodePrint.setOrderCode(orderCode);
+            productCodePrint.setBatchCode(pageIndex+1);
+            if (pageIndex + 1 == maxPageIndex) {
+                List<ProductCodeVo> productCodeVoList = printCodeVos.subList(pageIndex * pageSize, length);
+                productCodePrint.setProductCodeVos(productCodeVoList);
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(i).getItemcode())) {
+                        productCodePrint.setStartCode(productCodeVoList.get(i).getItemcode());
+                        break;
+                    }
+                }
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(productCodeVoList.size()-1-i).getItemcode())) {
+                        productCodePrint.setEndCode(productCodeVoList.get(productCodeVoList.size()-1-i).getItemcode());
+                        break;
+                    }
+                }
+            } else {
+                List<ProductCodeVo> productCodeVoList = printCodeVos.subList(pageIndex * pageSize, (pageIndex + 1) * pageSize);
+                productCodePrint.setProductCodeVos(productCodeVoList);
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(i).getItemcode())) {
+                        productCodePrint.setStartCode(productCodeVoList.get(i).getItemcode());
+                        break;
+                    }
+                }
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(productCodeVoList.size()-1-i).getItemcode())) {
+                        productCodePrint.setEndCode(productCodeVoList.get(productCodeVoList.size()-1-i).getItemcode());
+                        break;
+                    }
+                }
+            }
+
+            if (productCodePrint.getBatchCode().equals(batchCode)){
+                productPrint = productCodePrint;
+                break;
+            }
+        }
+        msg.setResult(productPrint);
+        return msg;
+    }
+
+    @ApiOperation(value = "分批打印内包装码",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "orderCode",value = "合同单号"),
+            @ApiImplicitParam(name = "batchCode",value = "批次号"),
+    })
+    @PostMapping("/zplPrint")
+    public Msg zplPrintBarCode(@RequestBody JSONObject jsonObject){
+        String orderCode = jsonObject.getString("orderCode");
+        Integer batchCode = jsonObject.getInteger("batchCode");
+        Integer needBlank = jsonObject.getInteger("needBlank");
+        ContractOrderInfo contractOrderInfo = contractOrderService.selectByOrderCode(orderCode);
+        if (!contractOrderInfo.getStatus().equals(ContractStatus.Generated)) {
+            return new Msg(ERROR_10004,"合同状态不为已生成,无法打印");
+        }
+        List<ProductCodeVo> printCodeVos = new ArrayList<>();
+        List<ProductCodeInfo> productCodeInfos = productCodeService.selectByOrderCode(orderCode);
+        for (ProductCodeInfo productCodeInfo : productCodeInfos){
+            ProductCodeVo productCodeVo = BeanUtils.copy(productCodeInfo,ProductCodeVo.class);
+            BigDecimal explosiveContent = new BigDecimal(productCodeVo.getExplosivecontent().replace("kg","").replace("g",""));
+            Integer boxNumber = productCodeVo.getBoxnumber();
+            if (productCodeVo.getExplosivecontent().contains("kg")){
+                BigDecimal explosive = explosiveContent.multiply(new BigDecimal(1000)).divide(new BigDecimal(boxNumber),0, RoundingMode.HALF_UP);
+                productCodeVo.setExplosivecontent(explosive + "g");
+            } else {
+                BigDecimal explosive = explosiveContent.divide(new BigDecimal(boxNumber),0, RoundingMode.HALF_UP);
+                productCodeVo.setExplosivecontent(explosive + "g");
+            }
+            printCodeVos.addAll(FireworkDeal.getBatchProductCodeList(productCodeVo,needBlank));
+        }
+
+        // printCodeVos
+        int length = printCodeVos.size();
+        int pageSize = 1000;
+        int quotient  = length / pageSize;
+        int remainder = length % pageSize;
+        int maxPageIndex = quotient;
+        if (remainder > 0) maxPageIndex++;
+        ProductCodePrint productPrint = new ProductCodePrint();
+        for (int pageIndex = 0; pageIndex < maxPageIndex; pageIndex++) {
+            ProductCodePrint productCodePrint = new ProductCodePrint();
+            productCodePrint.setOrderCode(orderCode);
+            productCodePrint.setBatchCode(pageIndex+1);
+            if (pageIndex + 1 == maxPageIndex) {
+                List<ProductCodeVo> productCodeVoList = printCodeVos.subList(pageIndex * pageSize, length);
+                productCodePrint.setProductCodeVos(productCodeVoList);
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(i).getItemcode())) {
+                        productCodePrint.setStartCode(productCodeVoList.get(i).getItemcode());
+                        break;
+                    }
+                }
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(productCodeVoList.size()-1-i).getItemcode())) {
+                        productCodePrint.setEndCode(productCodeVoList.get(productCodeVoList.size()-1-i).getItemcode());
+                        break;
+                    }
+                }
+            } else {
+                List<ProductCodeVo> productCodeVoList = printCodeVos.subList(pageIndex * pageSize, (pageIndex + 1) * pageSize);
+                productCodePrint.setProductCodeVos(productCodeVoList);
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(i).getItemcode())) {
+                        productCodePrint.setStartCode(productCodeVoList.get(i).getItemcode());
+                        break;
+                    }
+                }
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(productCodeVoList.size()-1-i).getItemcode())) {
+                        productCodePrint.setEndCode(productCodeVoList.get(productCodeVoList.size()-1-i).getItemcode());
+                        break;
+                    }
+                }
+            }
+
+            if (productCodePrint.getBatchCode().equals(batchCode)){
+                productPrint = productCodePrint;
+                break;
+            }
+        }
+
+        String zpl;
+        try {
+            zpl = contractOrderService.generateZplString(productPrint,userService.getById(getUser().getId()));
+        }catch (Exception e){
+            return new Msg(ERROR_40001,"打印出错");
+        }
+        return success(zpl);
+    }
+
+
+    @ApiOperation(value = "拒绝生产",response = Msg.class)
+    @PostMapping("/rejectProduct")
+    public Msg rejectProduct(@RequestBody JSONObject jsonObject) throws Exception {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        String operator = getUser().getUsername();
+        Long id = jsonObject.getLong("id");
+        ContractOrderInfo contractOrderInfo = contractOrderService.getById(id);
+
+        if (!contractOrderInfo.getStatus().equals(ContractStatus.WAIT_CONFIRM)) {
+            msg.setCode("999");
+            msg.setMessage("合同状态不为待确认,无法拒绝生产");
+            return msg;
+        }
+
+        contractOrderInfo.setStatus(ContractStatus.Refuse_Product);
+        contractOrderInfo.setOpinion(jsonObject.getString("opinion"));
+        contractOrderInfo.setModifiedby(operator);
+        contractOrderInfo.setModifieddate(new Date());
+        contractOrderService.updateById(contractOrderInfo);
+
+        ContractLogInfo contractLogInfo = new ContractLogInfo();
+        contractLogInfo.setOptlog("拒绝合同");
+        contractLogInfo.setOperator(operator);
+        contractLogInfo.setOrdercode(contractOrderInfo.getOrdercode());
+        contractLogInfo.setOperatordate(new Date());
+        contractLogService.save(contractLogInfo);
+
+        return msg;
+    }
+
+    @ApiOperation(value = "生成条码",response = Msg.class)
+    @PostMapping("produce")
+    public Msg produce(@RequestBody JSONObject jsonObject){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        Long id = jsonObject.getLong("id");
+        ContractOrderInfo contractOrderInfo = contractOrderService.getById(id);
+        if (!contractOrderInfo.getStatus().equals(ContractStatus.Confirm_Product)) {
+            msg.setCode("999");
+            msg.setMessage("合同状态不为确认生产,无法生成条码");
+            return msg;
+        }
+        Date producedate = jsonObject.getDate("producedate");
+        if (producedate == null){
+            return new Msg(ErrorCode.ERROR_10002);
+        }
+
+
+
+        {
+            //获取合同的产品信息
+            List<ContractDetailInfo> contractDetailInfos = contractDetailService.getBaseMapper().selectList(
+                    new LambdaQueryWrapper<ContractDetailInfo>()
+                            .eq(ContractDetailInfo::getOrdercode, contractOrderInfo.getOrdercode()));
+
+            for (ContractDetailInfo detail : contractDetailInfos) {
+
+                String productCode = detail.getDirectioncode();
+                //箱数
+                Integer boxNum = detail.getNum();
+                ProductInfo productInfo = productService.selectByDirection(productCode);
+                //箱含量
+                Integer numPerBox = productInfo.getBoxNumber();
+                //查找单日合同产品总数
+                int currentNum = boxNum * numPerBox;
+                List<ContractDetailInfo> detailInfos = contractDetailService.selectAllDetailAtSpecificDate(productCode, producedate);
+                int numAlready = detailInfos.stream().mapToInt(ContractDetailInfo::getNum).sum() * numPerBox;
+                //情况1.这个情况应该不会出现
+                if (numAlready >= 100000) {
+                    msg.setCode("999");
+                    msg.setMessage("产品:" + productInfo.getName() + ",指定日超过100000挂,数量为:" + numAlready);
+                    return msg;
+                }
+                //情况2
+                if (numAlready + currentNum >= 100000) {
+                    msg.setCode("999");
+                    msg.setMessage("产品:" + productInfo.getName() + "指定日挂数:" + numAlready + ",当前数量:" + currentNum + "总和超过100000");
+                    return msg;
+                }
+
+
+            }
+        }
+
+        contractOrderInfo.setProducedate(producedate);
+        contractOrderService.updateById(contractOrderInfo);
+
+        return msg;
+    }
+
+
+    @ApiOperation(value = "产品导入解析返回",response = Msg.class)
+    @PostMapping("/{enterprisenumber}/product2json")
+    public Msg product2json(@PathVariable("enterprisenumber") String enterprisenumber, MultipartFile file) {
+        List<Product2JsonVo> product2JsonVos = productService.transform2Json(enterprisenumber, file, getUser());
+        return success(product2JsonVos);
+    }
+
+
+    /**
+     * @Description: 查询供货或者购货单位信息
+     * @author celin
+     * @date 2021/5/26 9:33
+     */
+    @ApiOperation(value = "查询供货或者购货单位信息",response = Msg.class)
+    @PostMapping("/contractUnitList")
+    Msg supplyAndPurchaseUnitPage(@RequestBody FilterObject filter) {
+        Integer pageIndex = filter.getPageIndex();
+        Integer pageSize = filter.getPageSize();
+        IPage page = contractUnitDetailService.selectSupplyAndPurchaseUnitPage(new Page<>(pageIndex,pageSize),filter.getFilter(),getUser());
+        return success(page);
+    }
+
+    /**
+     * @Description: 新增供货或者购货单位信息
+     * @date 2021/5/26 9:47
+     */
+    @ApiOperation(value = "新增供货或者购货单位信息",response = Msg.class)
+    @PostMapping("/addContractUnit")
+    Msg addSupplyAndPurchaseUnit(@RequestBody ContractUnitDetail contractUnitDetail) {
+        contractUnitDetailService.checkAdd(contractUnitDetail);
+        contractUnitDetailService.addSupplyAndPurchaseUnit(contractUnitDetail,getUser());
+        return success();
+    }
+
+
+    /**
+     * @Description: 修改供货或者购货单位信息
+     * @date 2021/5/26 9:47
+     */
+    @ApiOperation(value = "修改供货或者购货单位信息",response = Msg.class)
+    @PostMapping("/contractUnit")
+    Msg modSupplyAndPurchaseUnit(@RequestBody ContractUnitDetail contractUnitDetail) {
+        contractUnitDetailService.checkAdd(contractUnitDetail);
+        contractUnitDetailService.modSupplyAndPurchaseUnit(contractUnitDetail,getUser());
+        return success();
+    }
+
+    /**
+     * @Description: 删除供货或者购货单位信息
+     * @date 2021/5/26 9:47
+     */
+    @ApiOperation(value = "删除供货或者购货单位信息",response = Msg.class)
+    @PostMapping("/delContractUnit")
+    Msg delSupplyAndPurchaseUnit(@RequestParam Long id) {
+        contractUnitDetailService.delSupplyAndPurchaseUnit(id,getUser());
+        return success();
+    }
+
+    @GetMapping("/replenishBox")
+    public Msg replenishBoxPrint(@RequestParam String code){
+        if (StringUtils.isBlank(code) || !FireworkDeal.is22Characters(code)){
+            return new Msg(ERROR_10004.getCode(),ERROR_10004.getMsg()+":流向码格式不符,请输入包装箱码!");
+        }
+        ProductCodeInfo productCodeInfo = productCodeService.selectByOriginalCode(code);
+        if (productCodeInfo == null){
+            return new Msg(ERROR_50001.getCode(),ERROR_50001.getMsg()+":没有找到相应的产品信息!");
+        }
+        ProductCodeVo productCodeVo = BeanUtils.copy(productCodeInfo,ProductCodeVo.class);
+        String start = productCodeInfo.getOriginalcode().substring(14,19);
+        Integer end = Integer.parseInt(start)+productCodeInfo.getBoxnumber()-1;
+        productCodeVo.setBoxrange("("+start+"-"+String.format("%05d", end)+")");
+        productCodeVo.setCrc(productCodeInfo.getOrdercode().substring(productCodeInfo.getOrdercode().length()-8));
+
+        return success(productCodeVo);
+    }
+
+    /** 打印日志插入 **/
+    @PostMapping("/printLog")
+    public Msg printLog(JSONArray array){
+        UserInfo userInfo = userService.getById(getUser().getId());
+        for (int i=0;i<array.size();i++){
+            String dire = array.getString(i);
+            ProductVo productVo = productService.selectVoByDirection(dire);
+
+            ProductLocusInfo productLocusInfo = new ProductLocusInfo(dire,new Date(),
+                    new Date(),userInfo.getCompany(),null,ProductLocusInfo.REPLENISH_PRINT_STATUS,
+                    productVo.getBoxNumber().toString());
+            productLocusService.insertProductLocus(productLocusInfo);
+        }
+
+        return success();
+    }
+
+
+    @ApiOperation(value = "退回电子标签",response = Msg.class)
+    @PostMapping("/{ordercode}/returnTag")
+    public Msg returnTag(@PathVariable("ordercode") String ordercode, MultipartFile file) {
+        contractOrderService.returnTag(ordercode, file,getUser());
+        List<ProductVo> productVoList = contractDetailService.selectByOrder(ordercode);
+        return success(productVoList);
+    }
+
+
+    @ApiOperation(value = "外包装箱码使用插件打印",response = Msg.class)
+    @PostMapping("/replenishBoxPrint")
+    public Msg replenishBoxZplPrint(@RequestBody JSONObject jsonObject){
+        String codes = jsonObject.getString("codes");
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (StringUtils.isBlank(codes)){
+            return new Msg(ERROR_10004);
+        }
+        List<String>codeList = StringUtils.toList(codes);
+        List<ProductCodeVo>productCodeVos = new ArrayList<>();
+        for (String code : codeList){
+            if (StringUtils.isBlank(code) || !FireworkDeal.is22Characters(code)){
+                return new Msg(ERROR_10004.getCode(),ERROR_10004.getMsg()+":流向码格式不符,请输入包装箱码!");
+            }
+            ProductCodeInfo productCodeInfo = productCodeService.selectByOriginalCode(code);
+            if (productCodeInfo == null){
+                return new Msg(ERROR_50001.getCode(),ERROR_50001.getMsg()+":没有找到相应的产品信息!");
+            }
+            ProductCodeVo productCodeVo = BeanUtils.copy(productCodeInfo,ProductCodeVo.class);
+            String start = productCodeInfo.getOriginalcode().substring(14,19);
+            Integer end = Integer.parseInt(start)+productCodeInfo.getBoxnumber()-1;
+            productCodeVo.setBoxrange("("+start+"-"+String.format("%05d", end)+")");
+            productCodeVo.setCrc(productCodeInfo.getOrdercode().substring(productCodeInfo.getOrdercode().length()-8));
+            productCodeVos.add(productCodeVo);
+        }
+        String zplString = contractOrderService.generateOuterTag(productCodeVos,userInfo);
+        return success(zplString);
+    }
+
+    @ApiOperation(value = "内包装码使用插件打印",response = Msg.class)
+    @PostMapping("/replenishInnerPrint")
+    public Msg replenishInnerZplPrint(@RequestBody JSONObject jsonObject){
+        String codes = jsonObject.getString("codes");
+        if (StringUtils.isBlank(codes)){
+            return new Msg(ERROR_10004);
+        }
+        List<String>codeList = StringUtils.toList(codes);
+        List<ProductCodeVo>productCodeVos = new ArrayList<>();
+        for (String code : codeList){
+            if (StringUtils.isBlank(code) || !FireworkDeal.is19Characters(code)){
+                return new Msg(ERROR_10004.getCode(),ERROR_10004.getMsg()+":流向码格式不符,请输入包装箱码!");
+            }
+
+            ProductInfo productInfo = productService.selectByDirection(code);
+            DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(code);
+            int j = Integer.parseInt(directionDetail.getSerialNo())%productInfo.getBoxNumber();
+            if (j == 0){
+                j = productInfo.getBoxNumber();
+            }
+            int i = Integer.parseInt(directionDetail.getSerialNo()) - j + 1;
+            String boxCode = directionDetail.getItemCode() + directionDetail.getDateCode()
+                    + String.format("%05d",i)+ String.format("%03d",productInfo.getBoxNumber());
+
+            ProductCodeInfo productCodeInfo = productCodeService.selectByOriginalCode(boxCode);
+            if (productCodeInfo == null){
+                return new Msg(ERROR_50001.getCode(),ERROR_50001.getMsg()+":没有找到相应的产品信息!");
+            }
+            ProductCodeVo productCodeVo = BeanUtils.copy(productCodeInfo,ProductCodeVo.class);
+            productCodeVo.setItemcode(code);
+            String start = productCodeInfo.getOriginalcode().substring(14,19);
+            Integer end = Integer.parseInt(start)+productCodeInfo.getBoxnumber()-1;
+            productCodeVo.setBoxrange("("+start+"-"+String.format("%05d", end)+")");
+            productCodeVo.setCrc(productCodeInfo.getOrdercode().substring(productCodeInfo.getOrdercode().length()-8));
+            productCodeVos.add(productCodeVo);
+        }
+        if (productCodeVos.size() % 2 == 1){
+            productCodeVos.add(new ProductCodeVo());
+        }
+        UserInfo userInfo = userService.getById(getUser().getId());
+        String zplString = contractOrderService.generateInnerTag(productCodeVos,userInfo);
+        return success(zplString);
+    }
+
+    @ApiOperation(value = "合同箱码获取批次信息",response = Msg.class)
+    @PostMapping("/replenishBoxBatch")
+    public Msg replenishBoxBatch(@RequestBody JSONObject jsonObject){
+        String orderCode = jsonObject.getString("orderCode");
+        ContractOrderInfo contractOrderInfo = contractOrderService.selectByOrderCode(orderCode);
+        if (!contractOrderInfo.getStatus().equals(ContractStatus.Generated)) {
+            return new Msg(ERROR_50002,"合同状态不为已生成,无法打印");
+        }
+        List<ProductCodeVo> printCodeVos = new ArrayList<>();
+        List<ProductCodeInfo> productCodeInfos = productCodeService.selectByOrderCode(orderCode);
+        int length = productCodeInfos.size();
+        int pageSize = 1000;
+        int quotient  = length / pageSize;
+        int remainder = length % pageSize;
+        int maxPageIndex = quotient;
+        if (remainder > 0) maxPageIndex++;
+        List<ProductCodePrint> splitPrintSize = new ArrayList<>();
+        for (ProductCodeInfo productCodeInfo : productCodeInfos){
+            ProductCodeVo productCodeVo = BeanUtils.copy(productCodeInfo,ProductCodeVo.class);
+            BigDecimal explosiveContent = new BigDecimal(productCodeVo.getExplosivecontent().replace("kg","").replace("g",""));
+            Integer boxNumber = productCodeVo.getBoxnumber();
+            if (productCodeVo.getExplosivecontent().contains("kg")){
+                BigDecimal explosive = explosiveContent.multiply(new BigDecimal(1000)).divide(new BigDecimal(boxNumber),0, RoundingMode.HALF_UP);
+                productCodeVo.setExplosivecontent(explosive + "g");
+            } else {
+                BigDecimal explosive = explosiveContent.divide(new BigDecimal(boxNumber),0, RoundingMode.HALF_UP);
+                productCodeVo.setExplosivecontent(explosive + "g");
+            }
+
+            printCodeVos.add(productCodeVo);
+        }
+        for (int pageIndex = 0; pageIndex < maxPageIndex; pageIndex++) {
+            ProductCodePrint productCodePrint = new ProductCodePrint();
+            productCodePrint.setOrderCode(orderCode);
+            productCodePrint.setBatchCode(pageIndex+1);
+            if (pageIndex + 1 == maxPageIndex) {
+                List<ProductCodeVo> productCodeVoList = printCodeVos.subList(pageIndex * pageSize, length);
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(i).getOriginalcode())) {
+                        productCodePrint.setStartCode(productCodeVoList.get(i).getOriginalcode());
+                        break;
+                    }
+                }
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(productCodeVoList.size()-1-i).getOriginalcode())) {
+                        productCodePrint.setEndCode(productCodeVoList.get(productCodeVoList.size()-1-i).getOriginalcode());
+                        break;
+                    }
+                }
+                splitPrintSize.add(productCodePrint);
+            }
+            else {
+                List<ProductCodeVo> productCodeVoList = printCodeVos.subList(pageIndex * pageSize, (pageIndex + 1) * pageSize);
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(i).getOriginalcode())) {
+                        productCodePrint.setStartCode(productCodeVoList.get(i).getOriginalcode());
+                        break;
+                    }
+                }
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(productCodeVoList.size()-1-i).getOriginalcode())) {
+                        productCodePrint.setEndCode(productCodeVoList.get(productCodeVoList.size()-1-i).getOriginalcode());
+                        break;
+                    }
+                }
+                splitPrintSize.add(productCodePrint);
+            }
+        }
+
+        HashMap<String, Object> result = new HashMap<>();
+        result.put("printInfo", splitPrintSize);
+        return success(result);
+    }
+
+    @ApiOperation(value = "合同箱码根据批次打印",response = Msg.class)
+    @PostMapping("/replenishBoxBatchPrint")
+    public Msg replenishBoxBatchPrint(@RequestBody JSONObject jsonObject){
+        String orderCode = jsonObject.getString("orderCode");
+        Integer batchCode = jsonObject.getInteger("batchCode");
+        UserInfo userInfo = userService.getById(getUser().getId());
+        ContractOrderInfo contractOrderInfo = contractOrderService.selectByOrderCode(orderCode);
+        if (!contractOrderInfo.getStatus().equals(ContractStatus.Generated)) {
+            return new Msg(ERROR_50002,"合同状态不为已生成,无法打印");
+        }
+        List<ProductCodeVo> printCodeVos = new ArrayList<>();
+        List<ProductCodeInfo> productCodeInfos = productCodeService.selectByOrderCode(orderCode);
+        for (ProductCodeInfo productCodeInfo : productCodeInfos){
+            ProductCodeVo productCodeVo = BeanUtils.copy(productCodeInfo,ProductCodeVo.class);
+            String start = productCodeInfo.getOriginalcode().substring(14,19);
+            Integer end = Integer.parseInt(start)+productCodeInfo.getBoxnumber()-1;
+            productCodeVo.setBoxrange("("+start+"-"+String.format("%05d", end)+")");
+            productCodeVo.setCrc(productCodeInfo.getOrdercode().substring(productCodeInfo.getOrdercode().length()-8));
+            printCodeVos.add(productCodeVo);
+        }
+
+        // printCodeVos
+        int length = printCodeVos.size();
+        int pageSize = 1000;
+        int quotient  = length / pageSize;
+        int remainder = length % pageSize;
+        int maxPageIndex = quotient;
+        if (remainder > 0) maxPageIndex++;
+        ProductCodePrint productPrint = new ProductCodePrint();
+        for (int pageIndex = 0; pageIndex < maxPageIndex; pageIndex++) {
+            ProductCodePrint productCodePrint = new ProductCodePrint();
+            productCodePrint.setOrderCode(orderCode);
+            productCodePrint.setBatchCode(pageIndex+1);
+            if (pageIndex + 1 == maxPageIndex) {
+                List<ProductCodeVo> productCodeVoList = printCodeVos.subList(pageIndex * pageSize, length);
+                productCodePrint.setProductCodeVos(productCodeVoList);
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(i).getOriginalcode())) {
+                        productCodePrint.setStartCode(productCodeVoList.get(i).getOriginalcode());
+                        break;
+                    }
+                }
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(productCodeVoList.size()-1-i).getOriginalcode())) {
+                        productCodePrint.setEndCode(productCodeVoList.get(productCodeVoList.size()-1-i).getOriginalcode());
+                        break;
+                    }
+                }
+            } else {
+                List<ProductCodeVo> productCodeVoList = printCodeVos.subList(pageIndex * pageSize, (pageIndex + 1) * pageSize);
+                productCodePrint.setProductCodeVos(productCodeVoList);
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(i).getOriginalcode())) {
+                        productCodePrint.setStartCode(productCodeVoList.get(i).getOriginalcode());
+                        break;
+                    }
+                }
+                for (int i = 0; i< 4; i++) {
+                    if (StringUtils.isNotBlank(productCodeVoList.get(productCodeVoList.size()-1-i).getOriginalcode())) {
+                        productCodePrint.setEndCode(productCodeVoList.get(productCodeVoList.size()-1-i).getOriginalcode());
+                        break;
+                    }
+                }
+            }
+
+            if (productCodePrint.getBatchCode().equals(batchCode)){
+                productPrint = productCodePrint;
+                break;
+            }
+        }
+
+        String zpl;
+        try {
+            List<ProductCodeVo>productCodeVos = productPrint.getProductCodeVos();
+            zpl = contractOrderService.generateOuterTag(productCodeVos, userInfo);
+        }catch (Exception e){
+            return new Msg(ERROR_40001,"生成标签出错");
+        }
+        return success(zpl);
+    }
+
+    @GetMapping("/getControlParams")
+    public Msg getControlParams(@RequestParam(defaultValue = "0") Integer pageIndex, @RequestParam(defaultValue = "10") Integer pageSize, String sort, String order,
+                                String enterprisename, String type) {
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize, sort, order);
+        HashMap<String, Object> condition = new HashMap<String, Object>();
+
+        if (StringUtils.isNotBlank(enterprisename)) {
+            condition.put("enterprisename", enterprisename.trim());
+        }
+
+        if (StringUtils.isNotBlank(type)) {
+            condition.put("type", type.trim());
+        }
+        Integer userType = getUser().getType();
+        //非admin只能看自己的
+        if (userType != 1) {
+            condition.put("owner", getUser().getUsername());
+        }
+
+        pageInfo.setCondition(condition);
+        controlPrintParamService.selectDataGrid(pageInfo);
+
+        return success(pageInfo);
+    }
+
+    @PostMapping("/setControlParams")
+    public Msg setControlParams(ControlPrintParam controlPrintParam){
+
+        return success();
+    }
+
+
+    /**
+     * @Description: 获取特定type配置
+     * @date 2022/2/11 14:09
+     */
+    @GetMapping("/getOwnSelectType")
+    public Msg getControlParams(@RequestParam Byte type) {
+        ControlPrintParam res = controlPrintParamService.getOwnSelectType(type, getUser());
+        return success(res);
+    }
+
+
+    /**
+     * @Description: 新增配置方案
+     * @date 2022/2/11 16:16
+     */
+    @PostMapping("/addControlParams")
+    public Msg addControlParams(@RequestBody ControlPrintParam controlPrintParam){
+        controlPrintParamService.addOrUpdateControlParams(controlPrintParam,getUser());
+        return success();
+    }
+
+
+    /**
+    * @Description: 更新配置方案
+    * @date 2022/2/11 17:29
+    */
+
+    @PostMapping("/updateControlParams")
+    public Msg updateControlParams(@RequestBody ControlPrintParam controlPrintParam){
+        controlPrintParamService.updateControlParams(controlPrintParam,getUser());
+        return success();
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Controller/DeliveryController.java b/src/main/java/com/gk/firework/Controller/DeliveryController.java
new file mode 100644
index 0000000..dad69f8
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/DeliveryController.java
@@ -0,0 +1,469 @@
+package com.gk.firework.Controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Controller.Base.BaseController;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.Log.JsonParams;
+import com.gk.firework.Domain.Utils.FilterObject;
+import com.gk.firework.Domain.Utils.Msg;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Vo.DirectionDetail;
+import com.gk.firework.Domain.Vo.FireworkDeal;
+import com.gk.firework.Domain.Vo.ProductVo;
+import com.gk.firework.Service.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+import static com.gk.firework.Domain.Enum.ErrorCode.*;
+import static com.gk.firework.Domain.Enum.ErrorCode.ERROR_10003;
+
+/**
+ * @author : jingjy
+ * @date : 2021/4/1 10:21
+ */
+@Api(tags = "出库接口")
+@RestController
+@RequestMapping("/delivery")
+public class DeliveryController extends BaseController {
+    @Autowired
+    private DeliveryOrderService deliveryOrderService;
+    @Autowired
+    private DeliveryDetailService deliveryDetailService;
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private StockService stockService;
+    @Autowired
+    private ProductService productService;
+    @Autowired
+    private ProductLocusService productLocusService;
+    @Autowired
+    private WarnContentService warnContentService;
+
+    /**
+     * @param jsonArray 接收json数组格式为:[{"id":"用户ID","rfids":"出库流向码,以逗号进行拼接","time":"出库时间","type":"1或者2;1:正常出库;2:退货出库"}]
+     * @return msg
+     */
+    @ApiOperation(value = "出库",notes = "接收json数组格式为:[{\"id\":\"用户ID\",\"rfids\":\"出库流向码,以逗号进行拼接\",\"time\":\"出库时间\",\"type\":\"1或者2;1:正常出库;2:退货出库\"}]")
+    @PostMapping("/out")
+    @JsonParams
+    public Msg deliveryStock(@RequestBody JSONArray jsonArray){
+        Msg msg = new Msg(true);
+        if (jsonArray.isEmpty()){
+            msg.setCode(ERROR_10001.getCode());
+            msg.setMessage(ERROR_10001.getMsg()+":未收到出库信息!");
+            return msg;
+        }
+
+        for (int i = 0; i < jsonArray.size(); i++) {
+            JSONObject jsonObject = jsonArray.getJSONObject(i);
+            String userId = jsonObject.getString("id");
+            String directionCodeStr = jsonObject.getString("rfids");
+            String datetime = jsonObject.getString("time");
+            String type = jsonObject.getString("type");
+            String cert = jsonObject.getString("cert");
+            Date date;
+            DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            try {
+                date = dateFormat.parse(datetime);
+            } catch (ParseException e) {
+                msg.setCode(ERROR_10003.getCode());
+                msg.setMessage(ERROR_10003.getMsg()+":日期类型错误!");
+                return msg;
+            }
+
+            if (StringUtils.isBlank(directionCodeStr)){
+                msg.setCode(ERROR_10001.getCode());
+                msg.setMessage(ERROR_10001.getMsg()+":流向码不能为空");
+                return msg;
+            }
+
+            boolean isUser = userService.checkUserById(userId);
+            if (!isUser){
+                msg.setCode(ERROR_50001.getCode());
+                msg.setMessage(ERROR_50001.getMsg()+":未找到相关用户信息,不能出库!");
+                return msg;
+            }
+            UserInfo userInfo = userService.getById(userId);
+
+            List<String> directionCodes = StringUtils.toList(directionCodeStr);
+
+            //判断是否存在同时间同操作人出库记录
+            boolean exist = deliveryOrderService.isOrderExist(datetime,userInfo);
+            if (exist){
+                continue;
+            }
+
+            //出库单创建
+            DeliveryOrderInfo deliveryOrderInfo;
+            String auth = getAuth();
+            auth = StringUtils.isBlank(auth) ? "NOAUTH" : auth;
+            deliveryOrderInfo = deliveryOrderService.generateDeliveryOrder(type,date,userInfo,cert,auth);
+            List<DeliveryDetailInfo>deliveryDetailInfos = deliveryDetailService.generateDeliveryDetail(deliveryOrderInfo,userInfo,directionCodes);
+
+            deliveryOrderService.save(deliveryOrderInfo);
+            deliveryDetailService.saveBatch(deliveryDetailInfos);
+            //扣库存
+            stockService.deliveryByDetail(date,deliveryDetailInfos,userInfo);
+        }
+        return msg;
+    }
+
+    @ApiOperation(value = "快速出库",response = Msg.class)
+    @PostMapping("/deliveryQuick")
+    @JsonParams
+    public Msg deliveryQuick(@RequestBody JSONArray jsonArray){
+        Msg msg = new Msg(true);
+        if (jsonArray.size() > 0)
+        {
+            for (int i = 0; i < jsonArray.size(); i++) {
+                JSONObject jsonObject = jsonArray.getJSONObject(i);
+                String userId = jsonObject.getString("id");
+                String directionCodeFirst = jsonObject.getString("rfidfirst");
+                String directionCodeLast = jsonObject.getString("rfidlast");
+                String datetime = jsonObject.getString("time");
+                String transport = jsonObject.getString("cert");
+                //type 1.常规出库; 2.退货出库
+                String type = "1";
+                Date date;
+                DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                try {
+                    date = dateFormat.parse(datetime);
+                } catch (ParseException e) {
+                    return new Msg(ERROR_10003,"出库日期类型错误");
+                }
+                if (!(FireworkDeal.is22Characters(directionCodeFirst) && FireworkDeal.is22Characters(directionCodeLast))){
+                    return new Msg(ERROR_10004,"流向码首尾不符合规则,无法快速出库");
+                }
+                boolean isUser = userService.checkUserById(userId);
+                if (!isUser){
+                    return new Msg(ERROR_50001,"未找到相关用户信息,不能出库");
+                }
+                UserInfo userInfo = userService.getById(userId);
+                //判断是否存在同时间同操作人入库记录
+                boolean exist = deliveryOrderService.isOrderExist(datetime,userInfo);
+                if (exist){ continue; }
+
+                String auth = getAuth();
+                auth = StringUtils.isBlank(auth) ? "NOAUTH" : auth;
+                DeliveryOrderInfo orderInfo = deliveryOrderService.generateDeliveryOrder(type,date,userInfo,transport, auth);
+                List<DeliveryDetailInfo>detailInfos = new ArrayList<>();
+                List<ProductLocusInfo>locusInfos = new ArrayList<>();
+                List<ProductVo> productVos = new ArrayList<>();
+                DirectionDetail detailFirst = FireworkDeal.dealDirectionCode(directionCodeFirst);
+                DirectionDetail detailLast = FireworkDeal.dealDirectionCode(directionCodeLast);
+                if (!detailFirst.getItemCode().equals(detailLast.getItemCode())){
+                    return new Msg(ERROR_10004,"首尾商品编码不一致,无法快速出库");
+                }
+                if (Integer.parseInt(detailFirst.getSerialNo()) > Integer.parseInt(detailLast.getSerialNo())){
+                    return new Msg(ERROR_10004,"首位商品序号大于末位,无法快速出库");
+                }
+                ProductVo productVo = productService.selectVoByDirection(directionCodeFirst);
+                if (productVo == null){
+                    return new Msg(ERROR_50001,"未找到相关产品信息,不能出库");
+                }
+
+                Integer firstNo = Integer.parseInt(detailFirst.getSerialNo());
+                Integer lastNo = Integer.parseInt(detailLast.getSerialNo());
+                int perBoxNum = Integer.parseInt(detailFirst.getBoxNo());
+                int boxNum = ((lastNo-firstNo)/perBoxNum)+1;
+                int totalNum = 0;
+
+                for (int j=1;j<= boxNum;j++){
+                    String dire = detailFirst.getItemCode()+detailFirst.getDateCode()+ String.format("%05d", firstNo)+String.format("%03d", perBoxNum);
+                    DeliveryDetailInfo detailInfo = new DeliveryDetailInfo();
+                    detailInfo.setDeliverycode(orderInfo.getOrdercode());
+                    detailInfo.setDirectioncode(dire);
+                    detailInfo.setItemcode(productVo.getItemCode());
+                    detailInfo.setItemname(productVo.getName());
+                    detailInfo.setCreateat(new Date());
+                    detailInfo.setCreateby(userInfo.getUsername());
+                    detailInfo.setNum(perBoxNum);
+                    detailInfos.add(detailInfo);
+                    ProductLocusInfo productLocusInfo = new ProductLocusInfo(dire,new Date(),date, userInfo.getCompany(),
+                            null,ProductLocusInfo.DELIVERY_STATUS,productVo.getBoxNumber().toString());
+                    locusInfos.add(productLocusInfo);
+                    firstNo+=perBoxNum;
+                    totalNum += perBoxNum;
+                }
+
+                FireworkDeal.getProductVos(directionCodeFirst,detailFirst,detailLast,productVos,productVo);
+                orderInfo.setBoxnum(totalNum);
+                deliveryOrderService.save(orderInfo);
+                deliveryDetailService.saveBatch(detailInfos);
+                productLocusService.insertBatch(locusInfos);
+                stockService.deliveryByDetail(date,detailInfos,userInfo);
+            }
+        }
+        return msg;
+    }
+
+    /**
+     * 退货出库
+     */
+    @PostMapping("/entryReturn")
+    @ApiOperation(value = "退货出库", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "filter.code", type = "JSONObject",
+                    value = " JSONObject{\"datetime\":\"时间\",\"data\":[{\"directionCode\":\"流向码\"},{\"directionCode\":\"流向码\"}]}"),
+    })
+    @JsonParams
+    public Msg getProductListByCodes(@RequestBody JSONObject object) {
+        JSONArray jsonArray = object.getJSONArray("data");
+        String datetime = object.getString("datetime");
+        Date date;
+        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        try {
+            date = dateFormat.parse(datetime);
+        } catch (ParseException e) {
+            return new Msg(ERROR_10003,"日期类型错误!");
+        }
+        //生成出库单号,类型,退货出库
+        DeliveryOrderInfo deliveryOrderInfo;
+        UserInfo userInfo = userService.getById(getUser().getId());
+        String auth = getAuth();
+        auth = StringUtils.isBlank(auth) ? "NOAUTH" : auth;
+
+        deliveryOrderInfo = deliveryOrderService.generateDeliveryOrder(FireworkDeal.OTHER_DELIVERY,date,userInfo, null, auth);
+        List<DeliveryDetailInfo>deliveryDetailInfos = new ArrayList<>();
+        List<StockInfo>stockInfos = new ArrayList<>();
+        for (int i = 0; i < jsonArray.size(); i++) {
+            // 遍历 jsonArray 数组,把每一个对象转成 json 对象
+            JSONObject jsonObject = jsonArray.getJSONObject(i);
+            String directionCode = jsonObject.getString("directionCode");
+            DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(directionCode);
+            ProductInfo productInfo = productService.selectByDirection(directionDetail.getItemCode());
+
+            // 生成出库详情,库存OWNER设置为空
+            DeliveryDetailInfo deliveryDetailInfo = new DeliveryDetailInfo();
+            deliveryDetailInfo.setDirectioncode(directionCode);
+            deliveryDetailInfo.setDeliverycode(deliveryOrderInfo.getOrdercode());
+            deliveryDetailInfo.setItemcode(directionDetail.getItemCode());
+            deliveryDetailInfo.setItemname(productInfo.getName());
+            deliveryDetailInfo.setCreateat(new Date());
+            deliveryDetailInfo.setCreateby(getUser().getUsername());
+            deliveryDetailInfos.add(deliveryDetailInfo);
+            StockInfo stockInfo = stockService.selectStockByDirection(directionCode);
+            if (stockInfo == null){
+                return new Msg(ERROR_50001,"库存信息未找到");
+            }
+            stockInfo.setOwner("");
+            stockInfo.setModifiedby(userInfo.getUsername());
+            stockInfo.setModifieddate(date);
+            stockInfos.add(stockInfo);
+        }
+
+        deliveryOrderService.save(deliveryOrderInfo);
+        deliveryDetailService.saveBatch(deliveryDetailInfos);
+        stockService.updateStocks(stockInfos,userInfo);
+        return success();
+    }
+
+
+    /**
+    * @Description: 出库查询
+    * @date 2021/4/15 12:05
+    */
+    @PostMapping("/outbound-query")
+    @ApiOperation(value = "出库查询", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex", value = "当前页码", required = true),
+            @ApiImplicitParam(name = "pageSize", value = "页大小", required = true),
+            @ApiImplicitParam(name = "filter.province", value = "省"),
+            @ApiImplicitParam(name = "filter.city", value = "市"),
+            @ApiImplicitParam(name = "filter.district", value = "区"),
+            @ApiImplicitParam(name = "filter.street", value = "街道"),
+            @ApiImplicitParam(name = "filter.committee", value = "委员会"),
+            @ApiImplicitParam(name = "filter.starttime", value = "开始时间"),
+            @ApiImplicitParam(name = "filter.endtime", value = "结束时间"),
+            @ApiImplicitParam(name = "filter.transportcert", value = "运输证号码"),
+            @ApiImplicitParam(name = "filter.enterprisename", value = "入库企业名称"),
+            @ApiImplicitParam(name = "filter.safetysupervision", value = "安全监管分类"),
+            @ApiImplicitParam(name = "filter.code", value = "单号"),
+    })
+    Object getOutboundInfo(@RequestBody FilterObject jsonFilter) {
+        Integer pageIndex = jsonFilter.getPageIndex();
+        Integer pageSize = jsonFilter.getPageSize();
+        IPage page =  deliveryOrderService.selectPage(new Page<>(pageIndex, pageSize), jsonFilter.getFilter(), getUser());
+        return success(page);
+    }
+
+    @PostMapping("/stock/outbound-query")
+    @ApiOperation(value = "出库查询", httpMethod = "POST")
+    Object getStockOutboundInfo(@RequestBody FilterObject jsonFilter) {
+        Integer pageIndex = jsonFilter.getPageIndex();
+        Integer pageSize = jsonFilter.getPageSize();
+        IPage page =  deliveryOrderService.selectStockPage(new Page<>(pageIndex, pageSize), jsonFilter.getFilter(), getUser());
+        return success(page);
+    }
+
+    /**
+    * @Description: 出库导出
+    * @date 2021/4/19 17:24
+    */
+    /**
+     * @Description: 出库查询
+     * @date 2021/4/15 12:05
+     */
+    @PostMapping("/export/outbound")
+    @ApiOperation(value = "出库查询", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex", value = "当前页码", required = true),
+            @ApiImplicitParam(name = "pageSize", value = "页大小", required = true),
+            @ApiImplicitParam(name = "filter.province", value = "省"),
+            @ApiImplicitParam(name = "filter.city", value = "市"),
+            @ApiImplicitParam(name = "filter.district", value = "区"),
+            @ApiImplicitParam(name = "filter.street", value = "街道"),
+            @ApiImplicitParam(name = "filter.committee", value = "委员会"),
+            @ApiImplicitParam(name = "filter.starttime", value = "开始时间"),
+            @ApiImplicitParam(name = "filter.endtime", value = "结束时间"),
+            @ApiImplicitParam(name = "filter.transportcert", value = "运输证号码"),
+            @ApiImplicitParam(name = "filter.enterprisename", value = "入库企业名称"),
+    })
+    Object exportOutbound(@RequestBody FilterObject jsonFilter) {
+        List<DeliveryOrderInfo> list =  deliveryOrderService.selectExportList(jsonFilter.getFilter(), getUser());
+        return success(list);
+    }
+
+
+    /**
+     * @Description: 根据{出库单号}查询出库明细
+     * @date 2021/4/15 12:05
+     */
+    @PostMapping("/outbound-detail")
+    @ApiOperation(value = "出库单明细", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex", value = "当前页码", required = true),
+            @ApiImplicitParam(name = "pageSize", value = "页大小", required = true),
+            @ApiImplicitParam(name = "filter.code", value = "入库单号code"),
+    })
+    Object getOutboundDetail(@RequestBody FilterObject jsonFilter) {
+        Integer pageIndex = jsonFilter.getPageIndex();
+        Integer pageSize = jsonFilter.getPageSize();
+        IPage page =  deliveryDetailService.selectDetailPage(new Page<>(pageIndex, pageSize), jsonFilter.getFilter());
+        return success(page);
+    }
+
+    /**
+     * @Description: 根据{出库单code}查询出库明细并导出
+     * @date 2021/4/15 11:09
+     */
+    @GetMapping("/export/outbound-detail")
+    @ApiOperation(value = "出库单明细导出", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "code", value = "出库单号code"),
+    })
+    Object getOutboundDetail(@RequestParam String code) {
+        List<Map> detailExport = deliveryDetailService.selectDetailExport(code);
+        return success(detailExport);
+    }
+
+    @GetMapping("/cert")
+    @ApiOperation(value = "根据运输证查询出库明细", httpMethod = "GET")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "cert", value = "运输证号"),
+    })
+    Msg getDeliveryDetailByCert(@RequestParam String cert){
+        if (StringUtils.isBlank(cert)){
+            return new Msg(ERROR_10001.getCode(),ERROR_10001.getMsg());
+        }
+        Map<String,List>map = new HashMap<>();
+        List<DeliveryOrderInfo> deliveryOrderInfos = deliveryOrderService.getDeliveryOrderByCert(cert);
+        if (deliveryOrderInfos == null || deliveryOrderInfos.size() == 0){
+            return new Msg(ERROR_50001.getCode(),ERROR_50001.getMsg()+":没有找到对应的出库记录!");
+        }
+        List<DeliveryDetailInfo>deliveryDetailInfoList = new ArrayList<>();
+        for (DeliveryOrderInfo deliveryOrderInfo : deliveryOrderInfos){
+            List<DeliveryDetailInfo>deliveryDetailInfos = deliveryDetailService.getDetailByCode(deliveryOrderInfo.getOrdercode());
+            deliveryDetailInfoList.addAll(deliveryDetailInfos);
+        }
+        List<ProductVo>productVos = deliveryOrderService.getProductVosByCert(cert);
+        map.put("detail",deliveryDetailInfoList);
+        map.put("product",productVos);
+
+        return success(map);
+    }
+
+    @ApiOperation(value = "批量退库")
+    @PostMapping("/returnBatch")
+    @JsonParams
+    public List<Msg> returnBatch(@RequestBody JSONArray array) {
+        List<Msg>msgList = new ArrayList<>();
+        if (array.size() < 1) {
+            return null;
+        }
+        for (int j = 0; j < array.size(); j++) {
+            // 遍历 jsonArray 数组,把每一个对象转成 json 对象
+            JSONObject object = array.getJSONObject(j);
+            JSONArray jsonArray = object.getJSONArray("data");
+            String datetime = object.getString("datetime");
+            Date date;
+            DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            try {
+                date = dateFormat.parse(datetime);
+            } catch (ParseException e) {
+                msgList.add(new Msg(ERROR_10003, "日期类型错误!"));
+                continue;
+            }
+            //生成出库单号,类型,退货出库
+            DeliveryOrderInfo deliveryOrderInfo;
+            UserInfo userInfo = userService.getById(getUser().getId());
+            String auth = getAuth();
+            auth = StringUtils.isBlank(auth) ? "NOAUTH" : auth;
+
+            deliveryOrderInfo = deliveryOrderService.generateDeliveryOrder(FireworkDeal.OTHER_DELIVERY, date, userInfo, null, auth);
+            List<DeliveryDetailInfo> deliveryDetailInfos = new ArrayList<>();
+            List<StockInfo> stockInfos = new ArrayList<>();
+            StringBuilder stringBuilder = new StringBuilder();
+            boolean flag = false;
+            for (int i = 0; i < jsonArray.size(); i++) {
+                // 遍历 jsonArray 数组,把每一个对象转成 json 对象
+                JSONObject jsonObject = jsonArray.getJSONObject(i);
+                String directionCode = jsonObject.getString("directionCode");
+                DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(directionCode);
+                ProductInfo productInfo = productService.selectByDirection(directionDetail.getItemCode());
+
+                // 生成出库详情,库存OWNER设置为空
+                DeliveryDetailInfo deliveryDetailInfo = new DeliveryDetailInfo();
+                deliveryDetailInfo.setDirectioncode(directionCode);
+                deliveryDetailInfo.setDeliverycode(deliveryOrderInfo.getOrdercode());
+                deliveryDetailInfo.setItemcode(directionDetail.getItemCode());
+                deliveryDetailInfo.setItemname(productInfo.getName());
+                deliveryDetailInfo.setCreateat(new Date());
+                deliveryDetailInfo.setCreateby(getUser().getUsername());
+                deliveryDetailInfos.add(deliveryDetailInfo);
+                StockInfo stockInfo = stockService.selectStockByDirection(directionCode);
+                if (stockInfo == null) {
+                    stringBuilder.append(directionCode).append("库存信息未找到");
+                    flag = true;
+                    continue;
+                }
+                stockInfo.setOwner("");
+                stockInfos.add(stockInfo);
+            }
+            if (flag){
+                msgList.add(new Msg(ERROR_50001,stringBuilder.toString()));
+                continue;
+            }
+
+            deliveryOrderService.save(deliveryOrderInfo);
+            deliveryDetailService.saveBatch(deliveryDetailInfos);
+            stockService.updateStocks(stockInfos, getUser());
+            msgList.add(new Msg(SUCCESS));
+        }
+        return msgList;
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Controller/DictionaryController.java b/src/main/java/com/gk/firework/Controller/DictionaryController.java
new file mode 100644
index 0000000..001193c
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/DictionaryController.java
@@ -0,0 +1,333 @@
+package com.gk.firework.Controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.Utils.*;
+import com.gk.firework.Service.*;
+import io.swagger.annotations.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@Api(tags = "数据字典接口")
+@RestController
+public class DictionaryController {
+    @Autowired
+    DictionaryTypeService dictionaryTypeService;
+    @Autowired
+    DictionaryItemService dictionaryItemService;
+
+
+    @Autowired
+    UserService userService;
+    @Autowired
+    RoleService roleService;
+    @Autowired
+    UserRolesService userRolesService;
+    @Autowired
+    RolePermissionsService rolePermissionsService;
+    @Autowired
+    ExcelExportService excelExportService;
+    @Autowired
+    DistrictService districtService;
+    @Autowired
+    UserRolesService userRolesInfoService;
+
+    @GetMapping("/dictionary-types")
+    @ApiOperation(value = "获取数据字典类型",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码"),
+            @ApiImplicitParam(name = "pageSize",value = "每页行数"),
+            @ApiImplicitParam(name = "name",value = "名称"),
+    })
+    public Msg getDictionaryTypeInfo(@RequestParam(defaultValue = "0") Integer pageIndex, @RequestParam(defaultValue = "10") Integer pageSize, String name){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize);
+        HashMap<String, Object> condition = new HashMap<String, Object>();
+
+        if (StringUtils.isNotBlank(name)) {
+            condition.put("name", name.trim());
+        }
+
+        pageInfo.setCondition(condition);
+        dictionaryTypeService.selectDataGrid(pageInfo);
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    @PostMapping("/adddictionary-types")
+    @ApiOperation(value = "添加数据字典类型",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "code",value = "编码",required = true),
+            @ApiImplicitParam(name = "text",value = "名称",required = true),
+            @ApiImplicitParam(name = "description",value = "备注"),
+            @ApiImplicitParam(name = "operator",value = "操作人"),
+    })
+    public Msg addDiactionaryTypeInfo(@RequestBody JSONObject jsonObject){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        String code = jsonObject.getString("code");
+        String text = jsonObject.getString("text");
+        String operator = jsonObject.getString("operator");
+        DictionaryTypeInfo dictionaryExistCode = dictionaryTypeService.selctByCode(code);
+        if (dictionaryExistCode != null){
+            msg.setCode("999");
+            msg.setMessage("编码已存在");
+            return msg;
+        }
+        DictionaryTypeInfo dictionaryExistText = dictionaryTypeService.selctByText(text);
+        if (dictionaryExistText != null){
+            msg.setCode("999");
+            msg.setMessage("名称已存在");
+            return msg;
+        }
+        DictionaryTypeInfo dictionaryTypeInfo = new DictionaryTypeInfo();
+        dictionaryTypeInfo.setCode(code);
+        dictionaryTypeInfo.setStatus((byte)1);
+        dictionaryTypeInfo.setText(text);
+        dictionaryTypeInfo.setCreatedby(operator);
+        dictionaryTypeInfo.setCreateddate(new Date());
+        dictionaryTypeInfo.setModifiedby(operator);
+        dictionaryTypeInfo.setModifieddate(new Date());
+        dictionaryTypeInfo.setDescription(jsonObject.getString("description"));
+        dictionaryTypeService.save(dictionaryTypeInfo);
+        return msg;
+    }
+
+    @PostMapping("/putdictionary-types")
+    @ApiOperation(value = "修改字典类型",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id",value = "id",required = true),
+            @ApiImplicitParam(name = "code",value = "编码",required = true),
+            @ApiImplicitParam(name = "text",value = "名称",required = true),
+            @ApiImplicitParam(name = "description",value = "备注"),
+            @ApiImplicitParam(name = "operator",value = "操作人"),
+    })
+    public Msg putDiactionaryTypefo(@RequestBody JSONObject jsonObject){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        Long id = jsonObject.getLong("id");
+        String code = jsonObject.getString("code");
+        String text = jsonObject.getString("text");
+        String operator = jsonObject.getString("operator");
+        List<DictionaryTypeInfo> dictionaryTypes = dictionaryTypeService.selectExistInfo(id,code,null);
+        if (dictionaryTypes.size() > 0){
+            msg.setCode("999");
+            msg.setMessage("编码重复");
+            return msg;
+        }
+        List<DictionaryTypeInfo> dictionaryTypeInfoList = dictionaryTypeService.selectExistInfo(id,null,text);
+        if (dictionaryTypeInfoList.size() > 0){
+            msg.setCode("999");
+            msg.setMessage("名称重复");
+            return msg;
+        }
+        DictionaryTypeInfo dictionaryTypeInfo = new DictionaryTypeInfo();
+        dictionaryTypeInfo.setId(jsonObject.getLong("id"));
+        dictionaryTypeInfo.setCode(code);
+        dictionaryTypeInfo.setText(text);
+        dictionaryTypeInfo.setModifiedby(operator);
+        dictionaryTypeInfo.setModifieddate(new Date());
+        dictionaryTypeInfo.setDescription(jsonObject.getString("description"));
+        dictionaryTypeService.updateById(dictionaryTypeInfo);
+        return msg;
+
+    }
+
+    @PostMapping("/deldictionary-types")
+    @ApiOperation(value = "删除字典类型", notes = "删除字典类型", response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType="query",name = "id",value = "id",required = true),
+            @ApiImplicitParam(paramType="body",name = "lastmodifiedby",value = "更新人"),
+
+    })
+    public Msg delDiactionaryTypeInfo(@ApiParam(value = "id,lastmodifiedby")
+                             @RequestBody JSONObject jsonObject){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        DictionaryTypeInfo dictionaryTypeInfo = new DictionaryTypeInfo();
+        dictionaryTypeInfo.setId(jsonObject.getLong("id"));
+        dictionaryTypeInfo.setModifiedby(jsonObject.getString("lastmodifiedby"));
+        dictionaryTypeInfo.setModifieddate(new Date());
+        dictionaryTypeInfo.setStatus((byte)0);
+        dictionaryTypeService.updateById(dictionaryTypeInfo);
+        return msg;
+    }
+
+    @GetMapping("/dictionary-items")
+    @ApiOperation(value = "获取数据字典详情",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码"),
+            @ApiImplicitParam(name = "pageSize",value = "每页行数"),
+            @ApiImplicitParam(name = "name",value = "名称"),
+            @ApiImplicitParam(name = "dictionaryTypeId",value = "字典类型id"),
+    })
+    public Msg getDiactionaryItemInfo(@RequestParam(defaultValue = "0") Integer pageIndex, @RequestParam(defaultValue = "10") Integer pageSize,
+                                      String name,Long dictionaryTypeId){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize);
+        HashMap<String, Object> condition = new HashMap<String, Object>();
+
+        if (StringUtils.isNotBlank(name)) {
+            condition.put("name", name.trim());
+        }
+
+        if (dictionaryTypeId != null){
+            condition.put("dictionaryTypeId",dictionaryTypeId);
+        }
+
+        pageInfo.setCondition(condition);
+        dictionaryItemService.selectDataGrid(pageInfo);
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    @GetMapping("/dictionaryAllItems")
+    @ApiOperation(value = "获取数据字典详情",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "dictionaryType",value = "字典类型名称"),
+    })
+    public Msg getDiactionaryItemInfo(String dictionaryType){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        List<DictionaryItemInfo> dictionaryItems = dictionaryItemService.selectByType(dictionaryType);
+        msg.setResult(dictionaryItems);
+        return msg;
+    }
+
+    @PostMapping("/adddictionary-items")
+    @ApiOperation(value = "添加数据字典详情",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "text",value = "字典标签",required = true),
+            @ApiImplicitParam(name = "value",value = "字典值",required = true),
+            @ApiImplicitParam(name = "description",value = "备注"),
+            @ApiImplicitParam(name = "dictionaryTypeId",value = "类型id"),
+            @ApiImplicitParam(name = "operator",value = "操作人"),
+            @ApiImplicitParam(name = "sort",value = "序号"),
+            @ApiImplicitParam(name = "status",value = "状态"),
+    })
+    public Msg addDiactionaryItemInfo(@RequestBody JSONObject jsonObject){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        String value = jsonObject.getString("value");
+        String text = jsonObject.getString("text");
+        String operator = jsonObject.getString("operator");
+        Long typeid = jsonObject.getLong("dictionaryTypeId");
+        if (typeid == null){
+            msg.setCode("999");
+            msg.setMessage("未选择字典类型");
+            return msg;
+        }
+        DictionaryItemInfo dictionaryExistCode = dictionaryItemService.selctByText(text);
+        if (dictionaryExistCode != null){
+            msg.setCode("999");
+            msg.setMessage("字典标签已存在");
+            return msg;
+        }
+        DictionaryItemInfo dictionaryExistText = dictionaryItemService.selctByValue(value);
+        if (dictionaryExistText != null){
+            msg.setCode("999");
+            msg.setMessage("字典值已存在");
+            return msg;
+        }
+        DictionaryItemInfo dictionaryItemInfo = new DictionaryItemInfo();
+        dictionaryItemInfo.setTypeid(typeid);
+        dictionaryItemInfo.setValue(value);
+        dictionaryItemInfo.setStatus(jsonObject.getByte("status"));
+        dictionaryItemInfo.setText(text);
+        dictionaryItemInfo.setSort(jsonObject.getInteger("sort"));
+        dictionaryItemInfo.setCreatedby(operator);
+        dictionaryItemInfo.setCreateddate(new Date());
+        dictionaryItemInfo.setModifiedby(operator);
+        dictionaryItemInfo.setModifieddate(new Date());
+        dictionaryItemInfo.setDescription(jsonObject.getString("description"));
+        dictionaryItemService.save(dictionaryItemInfo);
+        return msg;
+    }
+
+    @PostMapping("/putdictionary-items")
+    @ApiOperation(value = "修改字典详情",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id",value = "id",required = true),
+            @ApiImplicitParam(name = "text",value = "字典标签",required = true),
+            @ApiImplicitParam(name = "value",value = "字典值",required = true),
+            @ApiImplicitParam(name = "description",value = "备注"),
+            @ApiImplicitParam(name = "operator",value = "操作人"),
+            @ApiImplicitParam(name = "sort",value = "序号"),
+            @ApiImplicitParam(name = "status",value = "状态"),
+    })
+    public Msg putDiactionaryItemfo(@RequestBody JSONObject jsonObject){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        Long id = jsonObject.getLong("id");
+
+        String value = jsonObject.getString("value");
+        String text = jsonObject.getString("text");
+        String operator = jsonObject.getString("operator");
+
+        List<DictionaryTypeInfo> dictionaryTypes = dictionaryItemService.selectExistInfo(id,value,null);
+        if (dictionaryTypes.size() > 0){
+            msg.setCode("999");
+            msg.setMessage("字典值重复");
+            return msg;
+        }
+        List<DictionaryTypeInfo> dictionaryTypeInfoList = dictionaryItemService.selectExistInfo(id,null,text);
+        if (dictionaryTypeInfoList.size() > 0){
+            msg.setCode("999");
+            msg.setMessage("字典标签重复");
+            return msg;
+        }
+
+        DictionaryItemInfo dictionaryItemInfo = new DictionaryItemInfo();
+        dictionaryItemInfo.setId(id);
+        dictionaryItemInfo.setValue(value);
+        dictionaryItemInfo.setStatus(jsonObject.getByte("status"));
+        dictionaryItemInfo.setText(text);
+        dictionaryItemInfo.setSort(jsonObject.getInteger("sort"));
+        dictionaryItemInfo.setModifiedby(operator);
+        dictionaryItemInfo.setModifieddate(new Date());
+        dictionaryItemInfo.setDescription(jsonObject.getString("description"));
+        dictionaryItemService.updateById(dictionaryItemInfo);
+        return msg;
+    }
+
+    @PostMapping("/deldictionary-items")
+    @ApiOperation(value = "删除字典详情", notes = "删除字典详情", response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType="query",name = "id",value = "id",required = true),
+            @ApiImplicitParam(paramType="body",name = "lastmodifiedby",value = "更新人"),
+
+    })
+    public Msg delDiactionaryItemInfo(@ApiParam(value = "id,lastmodifiedby")
+                                      @RequestBody JSONObject jsonObject){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        DictionaryItemInfo dictionaryTypeInfo = new DictionaryItemInfo();
+        dictionaryTypeInfo.setId(jsonObject.getLong("id"));
+        dictionaryItemService.removeById(dictionaryTypeInfo);
+        return msg;
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Controller/EnterpriseController.java b/src/main/java/com/gk/firework/Controller/EnterpriseController.java
new file mode 100644
index 0000000..3dcdbc3
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/EnterpriseController.java
@@ -0,0 +1,1128 @@
+package com.gk.firework.Controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Controller.Base.BaseController;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.Enum.DocumentType;
+import com.gk.firework.Domain.Enum.EnterpriseSafetySupervision;
+import com.gk.firework.Domain.Enum.PersonnelCategory;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.Utils.*;
+import com.gk.firework.Domain.Vo.*;
+import com.gk.firework.Scheduls.Task.CheckEnterpriseTask;
+import com.gk.firework.Service.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.Map;
+import java.util.List;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static com.gk.firework.Domain.Enum.ErrorCode.ERROR_10001;
+
+
+@Api(tags = "企业信息接口")
+@RequestMapping("/enterprise")
+@RestController
+public class EnterpriseController extends BaseController {
+
+    @Autowired
+    private EnterpriseService enterpriseService;
+    @Autowired
+    private EnterpriseApplyService enterpriseApplyService;
+    @Autowired
+    private EnterpriseLicenseService enterpriseLicenseService;
+    @Autowired
+    private EnterpriseWarehouseService enterpriseWarehouseService;
+    @Autowired
+    private EnterpriseStandardizationService enterpriseStandardizationService;
+    @Autowired
+    private EnterprisePersonService enterprisePersonService;
+    @Autowired
+    private EnterpriseAnnualService enterpriseAnnualService;
+    @Autowired
+    private EnterpriseDocumentService enterpriseDocumentService;
+    @Autowired
+    private SecuritySupervisoryService securitySupervisoryService;
+    @Autowired
+    private EnterpriseFeedService enterpriseFeedService;
+    @Autowired
+    private UserService userService;
+
+    /**
+     * @Description: 企业基本信息
+     * @date 2021/3/24 9:50
+     */
+    @PostMapping(value = "/list")
+    @ApiOperation(value = "企业基本信息", notes = "分页查询", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex", value = "当前页面索引", required = true),
+            @ApiImplicitParam(name = "pageSize", value = "页面个数", required = true),
+            @ApiImplicitParam(name = "filter.safetysupervision", value = "安全监管分类", required = true),
+            @ApiImplicitParam(name = "filter.economicIndustry", value = "国民经济行业分类", required = true),
+            @ApiImplicitParam(name = "filter.enterprisename", value = "企业名称", required = true),
+            @ApiImplicitParam(name = "filter.valid", value = "有效期(0,1)", required = true),
+            @ApiImplicitParam(name = "filter.province", value = "省", required = true),
+            @ApiImplicitParam(name = "filter.city", value = "市", required = true),
+            @ApiImplicitParam(name = "filter.district", value = "区", required = true),
+            @ApiImplicitParam(name = "filter.street", value = "街道", required = true),
+            @ApiImplicitParam(name = "filter.committee", value = "委员会", required = true),
+
+    })
+    Object list(@RequestBody FilterObject enterpriseFilter) {
+        Integer pageIndex = enterpriseFilter.getPageIndex();
+        Integer pageSize = enterpriseFilter.getPageSize();
+        IPage<Enterprise> iPage = enterpriseService.selectEnterprise(new Page<>(pageIndex, pageSize), enterpriseFilter.getFilter(), getUser());
+        return success(iPage);
+    }
+
+    @PostMapping(value = "/parentList")
+    @ApiOperation(value = "选择上级企业信息简单查询", notes = "分页查询", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex", value = "当前页面索引", required = true),
+            @ApiImplicitParam(name = "pageSize", value = "页面个数", required = true),
+            @ApiImplicitParam(name = "filter.province", value = "省", required = true),
+            @ApiImplicitParam(name = "filter.city", value = "市", required = true),
+            @ApiImplicitParam(name = "filter.district", value = "区", required = true),
+            @ApiImplicitParam(name = "filter.street", value = "街道", required = true),
+            @ApiImplicitParam(name = "filter.committee", value = "委员会", required = true),
+            @ApiImplicitParam(name = "filter.enterprisename", value = "企业名称", required = true),
+
+    })
+    Object parentList(@RequestBody FilterObject enterpriseFilter) {
+        Integer pageIndex = enterpriseFilter.getPageIndex();
+        Integer pageSize = enterpriseFilter.getPageSize();
+        IPage<Enterprise> iPage = enterpriseService.selectParentEnterprise(new Page<>(pageIndex, pageSize), enterpriseFilter.getFilter());
+        return success(iPage);
+    }
+
+
+    @GetMapping(value = "/list-underSupervision")
+    @ApiOperation(value = "监管部门下的所有企业", notes = "分页查询", httpMethod = "GET")
+    Object enterpriseList(@RequestParam Integer type) {
+        List<Enterprise> data = enterpriseService.selectListUnderSupervision(type,getUser());
+        return success(data);
+    }
+
+    @GetMapping(value = "/applyList")
+    @ApiOperation(value = "申请查询", notes = "分页查询", httpMethod = "GET")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex", value = "当前页面索引", required = true),
+            @ApiImplicitParam(name = "pageSize", value = "页面个数", required = true),
+
+    })
+    Object applyList(EnterpriseApply enterpriseApplyFilter, Integer pageIndex, Integer pageSize) {
+        UserInfo user = getUser();
+        IPage<EnterpriseApply> iPage = enterpriseApplyService.selectEnterpriseApply(new Page<>(pageIndex, pageSize), enterpriseApplyFilter, user);
+        return success(iPage);
+    }
+
+
+    @PostMapping(value = "/addApply")
+    @ApiOperation(value = "修改", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "commitstatus", value = "提交状态(0,1) 0是删除,1是修改", required = true),
+            @ApiImplicitParam(name = "parentid", value = "修改|删除单子的id ", required = true),
+            @ApiImplicitParam(name = "safetysupervision", value = "安全监管分类(不可修改)"),
+            @ApiImplicitParam(name = "economicindustry", value = "国民经济行业分类", required = true),
+            @ApiImplicitParam(name = "enterprisenumber", value = "单位编号"),
+            @ApiImplicitParam(name = "enterprisename", value = "企业名称"),
+            @ApiImplicitParam(name = "enterpriseemail", value = "电子邮箱"),
+            @ApiImplicitParam(name = "enterprisesize", value = "企业规模"),
+            @ApiImplicitParam(name = "enterprisestatus", value = "企业状态"),
+            @ApiImplicitParam(name = "department", value = "行政主管部门"),
+            @ApiImplicitParam(name = "devicenumber", value = "设备编号"),
+            @ApiImplicitParam(name = "officeaddress", value = "单位办公地址"),
+            @ApiImplicitParam(name = "province", value = "省"),
+            @ApiImplicitParam(name = "city", value = "市"),
+            @ApiImplicitParam(name = "district", value = "区"),
+            @ApiImplicitParam(name = "street", value = "街道"),
+            @ApiImplicitParam(name = "committee", value = "委员会"),
+            @ApiImplicitParam(name = "securitysupervisory", value = "治安主管单位"),
+            @ApiImplicitParam(name = "officephone", value = "办公电话"),
+            @ApiImplicitParam(name = "faxphone", value = "传真电话"),
+            @ApiImplicitParam(name = "registeraddress", value = "单位注册地址"),
+            @ApiImplicitParam(name = "registertype", value = "注册类型"),
+            @ApiImplicitParam(name = "establishtime", value = "成立时间"),
+            @ApiImplicitParam(name = "qqnumber", value = "qq号码"),
+            @ApiImplicitParam(name = "postcode", value = "邮编"),
+            @ApiImplicitParam(name = "roomnumber", value = "工房数量"),
+            @ApiImplicitParam(name = "economictype", value = "国民经济类型"),
+            @ApiImplicitParam(name = "productioncontent", value = "生产经营项目"),
+            @ApiImplicitParam(name = "businessregisternumber", value = "工商注册号"),
+            @ApiImplicitParam(name = "organizationstructurecode", value = "组织结构代码"),
+            @ApiImplicitParam(name = "validstarttime", value = "有效期开始时间"),
+            @ApiImplicitParam(name = "validendtime", value = "有效期结束时间"),
+            @ApiImplicitParam(name = "employeenumber", value = "从业人数"),
+            @ApiImplicitParam(name = "ispaysafetyinsurance", value = "是否缴纳安全责任险"),
+            @ApiImplicitParam(name = "insurancecontractnumber", value = "保险合同号码(保单号) "),
+            @ApiImplicitParam(name = "insureamount", value = "投保金额 "),
+            @ApiImplicitParam(name = "insurestarttime", value = "投保有效期开始时间"),
+            @ApiImplicitParam(name = "insureendtime", value = "投保有效期结束时间 "),
+            @ApiImplicitParam(name = "ismajorhazard", value = "是否有重大危险源 "),
+            @ApiImplicitParam(name = "isspecialequipment", value = "是否有特种设备 "),
+            @ApiImplicitParam(name = "isoccupationalhealthinfo", value = "是否有职业卫生信息 "),
+            @ApiImplicitParam(name = "isspecialpersonnel", value = "是否有特种人员 "),
+            @ApiImplicitParam(name = "selfrecordingcycle", value = "自查记录周期 "),
+            @ApiImplicitParam(name = "isparententerprise", value = "是否有上级企业 "),
+            @ApiImplicitParam(name = "parententerpriseid", value = "上级企业id "),
+            @ApiImplicitParam(name = "parententerprisename", value = "上级企业名称 "),
+            @ApiImplicitParam(name = "infostatus", value = "信息状态 "),
+            @ApiImplicitParam(name = "infoupdateby", value = "创建用户(前端cookie获取用户id)"),
+            @ApiImplicitParam(name = "infocreatebyname", value = "信息创建人(前端cookie获取用户姓名)"),
+            @ApiImplicitParam(name = "legalrepresentative", value = "法定代表人信息(json字符串)"),
+            @ApiImplicitParam(name = "mainprincipal", value = "主要负责人(json字符串)"),
+            @ApiImplicitParam(name = "securityofficer", value = "安全负责人(json字符串)"),
+            @ApiImplicitParam(name = "informationofficer", value = "信息员(json字符串)"),
+            @ApiImplicitParam(name = "enterpriselocation", value = "单位坐标"),
+    })
+    Object addApply(@RequestBody EnterpriseApply enterpriseApply) {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        try {
+            enterpriseService.addApply(enterpriseApply, getUser());
+        } catch (IllegalAccessException e) {
+            e.printStackTrace();
+        }
+        msg.setResult(enterpriseApply);
+        return msg;
+    }
+
+
+    @PostMapping(value = "/addEnterprise")
+    @ApiOperation(value = "新增企业信息", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "safetysupervision", value = "安全监管分类", required = true),
+            @ApiImplicitParam(name = "economicindustry", value = "国民经济行业分类", required = true),
+            @ApiImplicitParam(name = "enterprisenumber", value = "单位编号"),
+            @ApiImplicitParam(name = "enterprisename", value = "企业名称"),
+            @ApiImplicitParam(name = "enterpriseemail", value = "电子邮箱"),
+            @ApiImplicitParam(name = "enterprisesize", value = "企业规模"),
+            @ApiImplicitParam(name = "enterprisestatus", value = "企业状态"),
+            @ApiImplicitParam(name = "department", value = "行政主管部门"),
+            @ApiImplicitParam(name = "devicenumber", value = "设备编号"),
+            @ApiImplicitParam(name = "officeaddress", value = "单位办公地址"),
+            @ApiImplicitParam(name = "province", value = "省"),
+            @ApiImplicitParam(name = "city", value = "市"),
+            @ApiImplicitParam(name = "district", value = "区"),
+            @ApiImplicitParam(name = "street", value = "街道"),
+            @ApiImplicitParam(name = "committee", value = "委员会"),
+            @ApiImplicitParam(name = "securitysupervisory", value = "治安主管单位"),
+            @ApiImplicitParam(name = "officephone", value = "办公电话"),
+            @ApiImplicitParam(name = "faxphone", value = "传真电话"),
+            @ApiImplicitParam(name = "registeraddress", value = "单位注册地址"),
+            @ApiImplicitParam(name = "registertype", value = "注册类型"),
+            @ApiImplicitParam(name = "establishtime", value = "成立时间"),
+            @ApiImplicitParam(name = "qqnumber", value = "qq号码"),
+            @ApiImplicitParam(name = "postcode", value = "邮编"),
+            @ApiImplicitParam(name = "roomnumber", value = "工房数量"),
+            @ApiImplicitParam(name = "economictype", value = "国民经济类型"),
+            @ApiImplicitParam(name = "productioncontent", value = "生产经营项目"),
+            @ApiImplicitParam(name = "businessregisternumber", value = "工商注册号"),
+            @ApiImplicitParam(name = "organizationstructurecode", value = "组织结构代码"),
+            @ApiImplicitParam(name = "validstarttime", value = "有效期开始时间"),
+            @ApiImplicitParam(name = "validendtime", value = "有效期结束时间"),
+            @ApiImplicitParam(name = "employeenumber", value = "从业人数"),
+            @ApiImplicitParam(name = "ispaysafetyinsurance", value = "是否缴纳安全责任险"),
+            @ApiImplicitParam(name = "insurancecontractnumber", value = "保险合同号码(保单号) "),
+            @ApiImplicitParam(name = "insureamount", value = "投保金额 "),
+            @ApiImplicitParam(name = "insurestarttime", value = "投保有效期开始时间"),
+            @ApiImplicitParam(name = "insureendtime", value = "投保有效期结束时间 "),
+            @ApiImplicitParam(name = "ismajorhazard", value = "是否有重大危险源 "),
+            @ApiImplicitParam(name = "isspecialequipment", value = "是否有特种设备 "),
+            @ApiImplicitParam(name = "isoccupationalhealthinfo", value = "是否有职业卫生信息 "),
+            @ApiImplicitParam(name = "isspecialpersonnel", value = "是否有特种人员 "),
+            @ApiImplicitParam(name = "selfrecordingcycle", value = "自查记录周期 "),
+            @ApiImplicitParam(name = "isparententerprise", value = "是否有上级企业 "),
+            @ApiImplicitParam(name = "parententerpriseid", value = "上级企业id "),
+            @ApiImplicitParam(name = "parententerprisename", value = "上级企业名称 "),
+            @ApiImplicitParam(name = "infostatus", value = "信息状态 "),
+            @ApiImplicitParam(name = "legalrepresentative", value = "法定代表人信息(json字符串)"),
+            @ApiImplicitParam(name = "mainprincipal", value = "主要负责人(json字符串)"),
+            @ApiImplicitParam(name = "securityofficer", value = "安全负责人(json字符串)"),
+            @ApiImplicitParam(name = "informationofficer", value = "信息员(json字符串)"),
+            @ApiImplicitParam(name = "enterpriselocation", value = "单位坐标"),
+    })
+    Object addEnterprise(@RequestBody Enterprise enterprise) {
+        enterpriseService.checkAddEnterprise(enterprise, true);
+        enterpriseService.addEnterprise(enterprise,getUser());
+        return success();
+    }
+
+
+    @PostMapping(value = "/modEnterprise")
+    @ApiOperation(value = "修改企业信息",httpMethod = "PUT")
+    Object modEnterprise(@RequestBody Enterprise enterprise) {
+        enterpriseService.checkModEnterprise(enterprise);
+        enterpriseService.modEnterprise(enterprise,getUser());
+        return success();
+    }
+
+
+    @PostMapping(value = "/delEnterprise")
+    @ApiOperation(value = "删除企业信息",httpMethod = "DELETE")
+    @ApiImplicitParam(name = "id",value = "企业id")
+    Object delEnterprise(@RequestParam Long id) {
+        enterpriseService.delEnterprise(id,getUser());
+        return success();
+    }
+
+
+    @PostMapping(value = "/deactivateEnterprise")
+    @ApiOperation(value = "停用企业信息",httpMethod = "POST")
+    @ApiImplicitParam(name = "id",value = "企业id")
+    Object deactivateEnterprise(@RequestParam Long id) {
+        enterpriseService.deactivateEnterprise(id,null,getUser());
+        return success();
+    }
+
+    @PostMapping(value = "/activateEnterprise")
+    @ApiOperation(value = "启用企业信息",httpMethod = "POST")
+    @ApiImplicitParam(name = "id",value = "企业id")
+    Object activateEnterprise(@RequestParam Long id) {
+        enterpriseService.activateEnterprise(id,null,getUser());
+        return success();
+    }
+
+
+
+    /**
+     * @Description: 许可证照信息
+     * @date 2021/3/24 9:50
+     */
+    @PostMapping(value = "/addLicense")
+    @ApiOperation(value = "新增许可证书",httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "许可证id(不传)"),
+            @ApiImplicitParam(name = "licensenumber",value = "许可证编号",required = true),
+            @ApiImplicitParam(name = "licensename",value = "许可证名称",required = true),
+            @ApiImplicitParam(name = "authority",value = "发证机关"),
+            @ApiImplicitParam(name = "ranges",value = "许可范围"),
+            @ApiImplicitParam(name = "validstarttime",value = "有效开始时间"),
+            @ApiImplicitParam(name = "validendtime",value = "有效结束时间"),
+            @ApiImplicitParam(name = "imgids",value = "删除图片id的list"),
+            @ApiImplicitParam(name = "file",value = "上传的文件"),
+            @ApiImplicitParam(name = "enterpriseid",value = "企业信息id",required = true),
+    })
+    Object addEnterpriseLicense(EnterpriseLicenseVo enterpriseLicenseVo) {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        try {
+            enterpriseLicenseService.checkEnterpriseLicense(enterpriseLicenseVo);
+            enterpriseLicenseService.addEnterpriseLicense(enterpriseLicenseVo,getUser());
+        } catch (BusinessException e) {
+            e.printStackTrace();
+            msg.setCode("400");
+            msg.setMessage(e.getMessage());
+        } catch (Exception e) {
+            e.printStackTrace();
+            msg.setCode("400");
+            msg.setMessage("发生错误,请联系管理员");
+        }
+        return msg;
+    }
+
+
+    @PostMapping(value = "/modLicense")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "许可证id(必传)", required = true),
+            @ApiImplicitParam(name = "licensenumber", value = "许可证编号", required = true),
+            @ApiImplicitParam(name = "licensename", value = "许可证名称", required = true),
+            @ApiImplicitParam(name = "authority", value = "发证机关"),
+            @ApiImplicitParam(name = "ranges", value = "许可范围"),
+            @ApiImplicitParam(name = "validstarttime", value = "有效开始时间"),
+            @ApiImplicitParam(name = "validendtime", value = "有效结束时间"),
+            @ApiImplicitParam(name = "imgids", value = "删除图片id的list"),
+            @ApiImplicitParam(name = "file", value = "上传的文件"),
+            @ApiImplicitParam(name = "enterpriseid", value = "企业信息id", required = true),
+    })
+    @ApiOperation(value = "修改许可证书", httpMethod = "PUT")
+    Object modEnterpriseLicense(EnterpriseLicenseVo enterpriseLicenseVo) {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        try {
+            enterpriseLicenseService.checkEnterpriseLicense(enterpriseLicenseVo);
+            enterpriseLicenseService.modEnterpriseLicense(enterpriseLicenseVo, getUser());
+        } catch (BusinessException e) {
+            e.printStackTrace();
+            msg.setCode("400");
+            msg.setMessage(e.getMessage());
+        } catch (Exception e) {
+            e.printStackTrace();
+            msg.setCode("400");
+            msg.setMessage("发生错误,请联系管理员");
+        }
+
+        return msg;
+    }
+
+    @PostMapping(value = "/delLicense")
+    @ApiOperation(value = "删除许可证书",httpMethod = "PUT")
+    @ApiImplicitParam(name = "id", value = "许可证id", required = true)
+    Object delEnterpriseLicense(@RequestParam Long id) {
+        enterpriseLicenseService.delEnterpriseLicense(id,getUser());
+        return success();
+    }
+
+    @GetMapping(value = "/licenseList")
+    @ApiOperation(value = "获取企业信息的所有许可证",httpMethod = "GET")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "企业id", required = true),
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码",required = true),
+            @ApiImplicitParam(name = "pageSize",value = "页面大小",required = true),
+    })
+    Object licenseList(@RequestParam Long id,
+                       @RequestParam Integer pageIndex,
+                       @RequestParam Integer pageSize) {
+        IPage<EnterpriseLicense> iPage = enterpriseLicenseService.selectPage(id, new Page<>(pageIndex, pageSize));
+        return success(iPage);
+    }
+
+
+
+    /**
+    * @Description: 治安主管单位信息
+    * @date 2021/3/24 11:02
+    */
+    @PostMapping(value = "/securitySupervisoryList")
+    @ApiOperation(value = "治安主管单位信息获取",httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "name", value = "治安主管单位名称"),
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码",required = true),
+            @ApiImplicitParam(name = "pageSize",value = "页面大小",required = true),
+    })
+    Object securitySupervisoryList(@RequestBody(required = false) JSONObject filter,
+                                   @RequestParam Integer pageIndex,
+                                   @RequestParam Integer pageSize) {
+        String name = null;
+        if (filter != null)
+            name = filter.getString("name");
+        IPage iPage = securitySupervisoryService.selectPage(new Page<>(pageIndex, pageSize),name);
+        return success(iPage);
+    }
+
+    /**
+     * @Description: 存储库房
+     * @date 2021/3/25 9:04
+     */
+    @GetMapping(value = "/enterpriseWarehouseList")
+    @ApiOperation(value = "存储库房列表",httpMethod = "GET")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "企业id", required = true),
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码",required = true),
+            @ApiImplicitParam(name = "pageSize",value = "页面大小",required = true),
+    })
+    Object enterpriseWarehouseList(@RequestParam Long id,
+                                   @RequestParam Integer pageIndex,
+                                   @RequestParam Integer pageSize) {
+        IPage iPage = enterpriseWarehouseService.selectPage(new Page<>(pageIndex, pageSize), id);
+        return success(iPage);
+    }
+
+    @PostMapping(value = "/addEnterpriseWarehouse")
+    @ApiOperation(value = "新增库房信息",httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "库房id(不传)"),
+            @ApiImplicitParam(name = "bulidingnumber",value = "栋号"),
+            @ApiImplicitParam(name = "dangerlevel",value = "危险等级"),
+            @ApiImplicitParam(name = "area",value = "面积(m2)"),
+            @ApiImplicitParam(name = "limits",value = "限制人数"),
+            @ApiImplicitParam(name = "safetyperson",value = "安全责任人"),
+            @ApiImplicitParam(name = "imgids", value = "删除图片id的list"),
+            @ApiImplicitParam(name = "holdinventory", value = "可容纳库存(箱)"),
+            @ApiImplicitParam(name = "file", value = "上传的文件"),
+            @ApiImplicitParam(name = "enterpriseid", value = "企业信息id", required = true),
+    })
+    Object addEnterpriseWarehouse(EnterpriseWarehouseVo enterpriseLicenseVo){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        try {
+            enterpriseWarehouseService.checkEnterpriseWarehouse(enterpriseLicenseVo);
+            enterpriseWarehouseService.addEnterpriseWarehouse(enterpriseLicenseVo,getUser());
+        } catch (BusinessException e) {
+            e.printStackTrace();
+            msg.setCode("400");
+            msg.setMessage(e.getMessage());
+        } catch (Exception e) {
+            e.printStackTrace();
+            msg.setCode("400");
+            msg.setMessage("发生错误,请联系管理员");
+        }
+        return msg;
+    }
+
+    @PostMapping(value = "/modEnterpriseWarehouse")
+    @ApiOperation(value = "修改库房信息", httpMethod = "PUT")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "库房id(必传)", required = true),
+            @ApiImplicitParam(name = "bulidingnumber", value = "栋号"),
+            @ApiImplicitParam(name = "dangerlevel", value = "危险等级"),
+            @ApiImplicitParam(name = "area", value = "面积(m2)"),
+            @ApiImplicitParam(name = "limits", value = "限制人数"),
+            @ApiImplicitParam(name = "safetyperson", value = "安全责任人"),
+            @ApiImplicitParam(name = "imgids", value = "删除图片id的list"),
+            @ApiImplicitParam(name = "holdinventory", value = "可容纳库存(箱)"),
+            @ApiImplicitParam(name = "file", value = "上传的文件"),
+            @ApiImplicitParam(name = "enterpriseid", value = "企业信息id", required = true),
+    })
+    Object modEnterpriseWarehouse(EnterpriseWarehouseVo enterpriseLicenseVo) {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        try {
+            enterpriseWarehouseService.checkEnterpriseWarehouse(enterpriseLicenseVo);
+            enterpriseWarehouseService.modEnterpriseWarehouse(enterpriseLicenseVo, getUser());
+        } catch (BusinessException e) {
+            e.printStackTrace();
+            msg.setCode("400");
+            msg.setMessage(e.getMessage());
+        } catch (Exception e) {
+            e.printStackTrace();
+            msg.setCode("400");
+            msg.setMessage("发生错误,请联系管理员");
+        }
+        return msg;
+    }
+
+
+    @PostMapping(value = "/delEnterpriseWarehouse")
+    @ApiOperation(value = "删除库房信息",httpMethod = "DELETE")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "库房id必传", required = true),
+    })
+    Object delEnterpriseWarehouse(@RequestParam Long id) {
+        enterpriseWarehouseService.delEnterpriseWarehouse(id,getUser());
+        return success();
+    }
+
+
+    /**
+     * @Description: 安全生产标准化
+     * @date 2021/3/25 9:58
+     */
+    @GetMapping(value = "/enterpriseStandardizationList")
+    @ApiOperation(value = "安全生产标准化信息", httpMethod = "GET")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "企业id必传", required = true),
+            @ApiImplicitParam(name = "pageIndex", value = "当前页码", required = true),
+            @ApiImplicitParam(name = "pageSize", value = "页面大小", required = true),
+    })
+    Object enterpriseStandardizationList(@RequestParam Long id) {
+
+        EnterpriseStandardization one = enterpriseStandardizationService.getOne(id);
+        return success(one);
+    }
+
+    @PostMapping(value = "/addEnterpriseStandardization")
+    @ApiOperation(value = "新增安全生产标准化信息", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "安全生产标准化信息id(不传)"),
+            @ApiImplicitParam(name = "level", value = "标准化级别"),
+            @ApiImplicitParam(name = "licensenumber", value = "证书编号"),
+            @ApiImplicitParam(name = "reviewunit", value = "评审单位"),
+            @ApiImplicitParam(name = "licensingunit", value = "发牌单位"),
+            @ApiImplicitParam(name = "score", value = "考核得分"),
+            @ApiImplicitParam(name = "imgids", value = "删除图片id的list"),
+            @ApiImplicitParam(name = "validstarttime", value = "有效开始时间"),
+            @ApiImplicitParam(name = "validendtime", value = "validendtime"),
+            @ApiImplicitParam(name = "imgids", value = "删除图片id的list"),
+            @ApiImplicitParam(name = "file", value = "上传的文件"),
+            @ApiImplicitParam(name = "enterpriseid", value = "企业id", required = true),
+    })
+    Object addEnterpriseStandardization(EnterpriseStandardizationVo enterpriseStandardizationVo) {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        try {
+            enterpriseStandardizationService.checkEnterpriseStandardization(enterpriseStandardizationVo);
+            enterpriseStandardizationService.addEnterpriseStandardization(enterpriseStandardizationVo, getUser());
+        } catch (BusinessException e) {
+            e.printStackTrace();
+            msg.setCode("400");
+            msg.setMessage(e.getMessage());
+        } catch (Exception e) {
+            e.printStackTrace();
+            msg.setCode("400");
+            msg.setMessage("发生错误,请联系管理员");
+        }
+        return msg;
+    }
+
+    @PostMapping(value = "/modEnterpriseStandardization")
+    @ApiOperation(value = "修改安全生产标准化信息",httpMethod = "PUT")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "安全生产标准化信息id(必传)",required = true),
+            @ApiImplicitParam(name = "level", value = "标准化级别"),
+            @ApiImplicitParam(name = "licensenumber", value = "证书编号"),
+            @ApiImplicitParam(name = "reviewunit", value = "评审单位"),
+            @ApiImplicitParam(name = "licensingunit", value = "发牌单位"),
+            @ApiImplicitParam(name = "score", value = "考核得分"),
+            @ApiImplicitParam(name = "imgids", value = "删除图片id的list"),
+            @ApiImplicitParam(name = "validstarttime", value = "有效开始时间"),
+            @ApiImplicitParam(name = "validendtime", value = "validendtime"),
+            @ApiImplicitParam(name = "imgids", value = "删除图片id的list"),
+            @ApiImplicitParam(name = "file", value = "上传的文件"),
+            @ApiImplicitParam(name = "enterpriseid", value = "企业id", required = true),
+    })
+    Object modEnterpriseStandardization(EnterpriseStandardizationVo enterpriseStandardizationVo){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        try {
+            enterpriseStandardizationService.checkEnterpriseStandardization(enterpriseStandardizationVo);
+            enterpriseStandardizationService.modEnterpriseStandardization(enterpriseStandardizationVo,getUser());
+        } catch (BusinessException e) {
+            e.printStackTrace();
+            msg.setCode("400");
+            msg.setMessage(e.getMessage());
+        } catch (Exception e) {
+            e.printStackTrace();
+            msg.setCode("400");
+            msg.setMessage("发生错误,请联系管理员");
+        }
+        return msg;
+    }
+
+
+    @PostMapping(value = "/delEnterpriseStandardization")
+    @ApiOperation(value = "删除安全生产标准化信息",httpMethod = "DELETE")
+    @ApiImplicitParam(name = "id", value = "安全生产标准化信息id(必传)", required = true)
+    Object delEnterpriseStandardization(@RequestParam Long id){
+        enterpriseStandardizationService.delEnterpriseStandardization(id,getUser());
+        return success();
+    }
+
+    /**
+     * @Description: 安全人员资格|特种人员资格
+     * @date 2021/3/26 10:57
+     */
+    @GetMapping(value = "/enterprisePerson")
+    @ApiOperation(value = "安全人员资格|特种人员资格信息查询", httpMethod = "GET")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "企业id(必传)", required = true),
+            @ApiImplicitParam(name = "category", value = "人员种类(SECURITY,SPECIAL)", required = true),
+            @ApiImplicitParam(name = "pageIndex", value = "当前页码", required = true),
+            @ApiImplicitParam(name = "pageSize", value = "页面大小", required = true),
+    })
+    Object enterprisePersonList(@RequestParam Long id,
+                                @RequestParam PersonnelCategory category,
+                                @RequestParam Integer pageIndex,
+                                @RequestParam Integer pageSize) {
+
+        IPage page = enterprisePersonService.selectPage(new Page<>(pageIndex, pageSize), id, category);
+        return success(page);
+    }
+
+    @PostMapping(value = "/addenterprisePerson")
+    @ApiOperation(value = "新增人员", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "人员id(不传)"),
+            @ApiImplicitParam(name = "name", value = "姓名", required = true),
+            @ApiImplicitParam(name = "post", value = "职务", required = true),
+            @ApiImplicitParam(name = "number", value = "证书编号", required = true),
+            @ApiImplicitParam(name = "validstarttime", value = "有效开始时间"),
+            @ApiImplicitParam(name = "validendtime", value = "有效结束时间"),
+            @ApiImplicitParam(name = "memo", value = "备注"),
+            @ApiImplicitParam(name = "isreview", value = "是否复检"),
+            @ApiImplicitParam(name = "imgids", value = "删除图片id的list"),
+            @ApiImplicitParam(name = "file", value = "上传的文件"),
+            @ApiImplicitParam(name = "enterpriseid", value = "企业id", required = true),
+    })
+    Object addEnterprisePerson(EnterprisePersonVo enterprisePersonVo) {
+            Msg msg = new Msg();
+            msg.setCode("200");
+        try {
+            enterprisePersonService.checkEnterprisePerson(enterprisePersonVo);
+            enterprisePersonService.addEnterprisePerson(enterprisePersonVo, getUser());
+        } catch (BusinessException e) {
+            e.printStackTrace();
+            msg.setCode("400");
+            msg.setMessage(e.getMessage());
+        } catch (Exception e) {
+            e.printStackTrace();
+            msg.setCode("400");
+            msg.setMessage("发生错误,请联系管理员");
+        }
+        return msg;
+    }
+
+    @PostMapping(value = "/putenterprisePerson")
+    @ApiOperation(value = "修改人员", httpMethod = "PUT")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "人员id(必传)", required = true),
+            @ApiImplicitParam(name = "name", value = "姓名", required = true),
+            @ApiImplicitParam(name = "post", value = "职务", required = true),
+            @ApiImplicitParam(name = "number", value = "证书编号", required = true),
+            @ApiImplicitParam(name = "validstarttime", value = "有效开始时间"),
+            @ApiImplicitParam(name = "validendtime", value = "有效结束时间"),
+            @ApiImplicitParam(name = "memo", value = "备注"),
+            @ApiImplicitParam(name = "isreview", value = "是否复检"),
+            @ApiImplicitParam(name = "imgids", value = "删除图片id的list"),
+            @ApiImplicitParam(name = "file", value = "上传的文件"),
+            @ApiImplicitParam(name = "enterpriseid", value = "企业id", required = true),
+    })
+    Object modEnterprisePerson(EnterprisePersonVo enterprisePersonVo) {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        try {
+            enterprisePersonService.checkEnterprisePerson(enterprisePersonVo);
+            enterprisePersonService.modEnterprisePerson(enterprisePersonVo, getUser());
+        } catch (BusinessException e) {
+            e.printStackTrace();
+            msg.setCode("400");
+            msg.setMessage(e.getMessage());
+        } catch (Exception e) {
+            e.printStackTrace();
+            msg.setCode("400");
+            msg.setMessage("发生错误,请联系管理员");
+        }
+        return msg;
+    }
+
+    @PostMapping(value = "/delenterprisePerson")
+    @ApiOperation(value = "删除人员", httpMethod = "DELETE")
+    @ApiImplicitParam(name = "id", value = "id必传", required = true)
+    Object delEnterprisePerson(@RequestParam Long id) {
+        enterprisePersonService.delEnterprisePerson(id, getUser());
+        return success();
+    }
+
+    /**
+    * @Description: 年度库存
+    * @date 2021/3/26 15:05
+    */
+    @GetMapping(value = "/annual")
+    @ApiOperation(value = "年度库存", httpMethod = "GET")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "企业id必传", required = true),
+            @ApiImplicitParam(name = "pageIndex", value = "当前页码", required = true),
+            @ApiImplicitParam(name = "pageSize", value = "页面大小", required = true),
+    })
+    Object enterprisePersonList(@RequestParam Long id,
+                                @RequestParam Integer pageIndex,
+                                @RequestParam Integer pageSize) {
+        IPage page = enterpriseAnnualService.selectPage(new Page<>(pageIndex, pageSize), id);
+        return success(page);
+    }
+
+    @PostMapping(value = "/addannual")
+    @ApiOperation(value = "新增年度库存", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "year", value = "年度", required = true),
+            @ApiImplicitParam(name = "amount", value = "当前页码", required = true),
+            @ApiImplicitParam(name = "type", value = "类别", required = true),
+    })
+    Object addEnterpriseAnnual(@RequestBody EnterpriseAnnual enterpriseAnnual) {
+        enterpriseAnnualService.checkEnterpriseAnnual(enterpriseAnnual);
+        enterpriseAnnualService.addEnterpriseAnnual(enterpriseAnnual,getUser());
+        return success();
+    }
+
+    @PostMapping(value = "/putannual")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "年度库存id(必传)", required = true),
+            @ApiImplicitParam(name = "year", value = "年度", required = true),
+            @ApiImplicitParam(name = "amount", value = "当前页码", required = true),
+            @ApiImplicitParam(name = "type", value = "类别", required = true),
+    })
+    @ApiOperation(value = "修改年度库存", httpMethod = "PUT")
+    Object modEnterpriseAnnual(@RequestBody EnterpriseAnnual enterpriseAnnual) {
+        enterpriseAnnualService.checkEnterpriseAnnual(enterpriseAnnual);
+        enterpriseAnnualService.modEnterpriseAnnual(enterpriseAnnual,getUser());
+        return success();
+    }
+
+
+    @PostMapping(value = "/delannual")
+    @ApiOperation(value = "删除年度库存", httpMethod = "DELETE")
+    @ApiImplicitParam(name = "id", value = "年度库存id(必传)", required = true)
+    Object delEnterpriseAnnual(@RequestParam Long id) {
+        enterpriseAnnualService.delEnterpriseAnnual(id,getUser());
+        return success();
+    }
+
+
+    /**
+    * @Description: 应急救援预案 | 流向信息管理承诺书
+    * @author celin
+    * @date 2021/3/26 19:08
+    */
+
+    @GetMapping(value = "/document")
+    @ApiOperation(value = "预案|承诺书", httpMethod = "GET")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id",value = "企业id",required = true),
+            @ApiImplicitParam(name = "type",value = "文件种类(RESCUE,FLOW)->救援和流向",required = true),
+            @ApiImplicitParam(name = "pageIndex", value = "当前页码", required = true),
+            @ApiImplicitParam(name = "pageSize", value = "页面大小", required = true),
+    })
+    Object documentList(@RequestParam Long id,
+                        @RequestParam DocumentType type,
+                                @RequestParam Integer pageIndex,
+                                @RequestParam Integer pageSize) {
+
+        IPage page = enterpriseDocumentService.selectPage(new Page<>(pageIndex, pageSize), id,type);
+        return success(page);
+    }
+
+    @PostMapping(value = "/adddocument")
+    @ApiOperation(value = "新增预案|承诺书", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id",value = "预案|承诺书id(不传)"),
+            @ApiImplicitParam(name = "name",value = "文件种类(0,1)->救援和流向",required = true),
+            @ApiImplicitParam(name = "memo",value = "备注"),
+            @ApiImplicitParam(name = "ids", value = "删除文档id的list"),
+            @ApiImplicitParam(name = "file", value = "上传的文件"),
+            @ApiImplicitParam(name = "enterpriseid", value = "企业id", required = true),
+    })
+    Object addDocument( EnterpriseDocumentVo enterpriseDocumentVo) {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        try {
+            enterpriseDocumentService.checkDocument(enterpriseDocumentVo,true);
+            enterpriseDocumentService.addDocument(enterpriseDocumentVo,getUser());
+        } catch (BusinessException e) {
+            e.printStackTrace();
+            msg.setCode("400");
+            msg.setMessage(e.getMessage());
+        } catch (Exception e) {
+            e.printStackTrace();
+            msg.setCode("400");
+            msg.setMessage("发生错误,请联系管理员");
+        }
+        return msg;
+    }
+
+    @PostMapping(value = "/putdocument")
+    @ApiOperation(value = "修改预案|承诺书", httpMethod = "PUT")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id",value = "预案|承诺书id(必传)"),
+            @ApiImplicitParam(name = "name",value = "文件种类(0,1)->救援和流向",required = true),
+            @ApiImplicitParam(name = "memo",value = "备注"),
+            @ApiImplicitParam(name = "ids", value = "删除文档id的list"),
+            @ApiImplicitParam(name = "file", value = "上传的文件"),
+            @ApiImplicitParam(name = "enterpriseid", value = "企业id", required = true),
+    })
+    Object modDocument(EnterpriseDocumentVo enterpriseDocumentVo) {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        try {
+            enterpriseDocumentService.checkDocument(enterpriseDocumentVo,false);
+            enterpriseDocumentService.modDocument(enterpriseDocumentVo,getUser());
+        } catch (BusinessException e) {
+            e.printStackTrace();
+            msg.setCode("400");
+            msg.setMessage(e.getMessage());
+        } catch (Exception e) {
+            e.printStackTrace();
+            msg.setCode("400");
+            msg.setMessage("发生错误,请联系管理员");
+        }
+        return msg;
+    }
+
+    @PostMapping(value = "/deldocument")
+    @ApiOperation(value = "删除预案|承诺书", httpMethod = "DELETE")
+    @ApiImplicitParam(name = "id",value = "预案|承诺书id(必传)")
+    Object delDocument(@RequestParam Long id) {
+        enterpriseDocumentService.delDocument(id,getUser());
+        return success();
+    }
+
+    @GetMapping(value = "/manufacturerTree")
+    public List<Tree> getManufacturerTree() {
+        List<Tree> trees = new ArrayList<>();
+        if (getUser().getCompanyid() != null) {
+            Enterprise enterprise = enterpriseService.selectEnterpriseByCompanyId(getUser().getCompanyid());
+            if (enterprise == null || enterprise.getSafetysupervision().equals(EnterpriseSafetySupervision.PRODUCE.getMsg())) {
+                Tree tree = new Tree();
+                tree.setText(enterprise != null ? enterprise.getEnterprisename() : null);
+                tree.setAttributes(enterprise != null ? enterprise.getEnterprisenumber() : null);
+                trees.add(tree);
+                return trees;
+            }
+        }
+
+        List<Enterprise>enterprises = enterpriseService.selectProduceEnterprise();
+        for (Enterprise enterprise :enterprises){
+            Tree tree = new Tree();
+            tree.setText(enterprise != null ? enterprise.getEnterprisename() : null);
+            tree.setAttributes(enterprise != null ? enterprise.getEnterprisenumber() : null);
+            trees.add(tree);
+        }
+
+        return trees;
+    }
+
+    /**
+     * @Description: 根据企业单位编号获取企业信息和实名登记和自查自改和销售数据
+     * @date 2021/4/14 8:16
+     */
+    @GetMapping(value = "/enterprise-detail")
+    @ApiOperation(value = "根据企业单位编号获取企业信息和实名登记、自查自改和销售数据", httpMethod = "GET")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "enterpriseNumber",value = "企业单位编号"),
+            @ApiImplicitParam(name = "days",value = "时间范围(往前推days天)"),
+            @ApiImplicitParam(name = "starttime",value = "开始时间"),
+            @ApiImplicitParam(name = "endtime",value = "结束时间"),
+    })
+    Object getEnterpriseDetail(@RequestParam String enterpriseNumber,@RequestParam(defaultValue = "90") Integer days,
+                               String starttime, String endtime) {
+        Map result = enterpriseService.getEnterpriseDetail(enterpriseNumber, days, starttime, endtime);
+        return success(result);
+    }
+
+    @GetMapping(value = "/enterprise-saledetail")
+    @ApiOperation(value = "根据企业单位编号时间流向码获取销售明细", httpMethod = "GET")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "enterpriseNumber",value = "企业单位编号"),
+            @ApiImplicitParam(name = "itemcode",value = "产品编码"),
+            @ApiImplicitParam(name = "starttime",value = "开始时间"),
+            @ApiImplicitParam(name = "endtime",value = "结束时间"),
+    })
+    Object getEnterpriseSaleDetail(@RequestParam String enterpriseNumber,String itemcode,
+                               String starttime, String endtime) {
+        List<SaleOrderDetailInfo> result = enterpriseService.getEnterpriseSaleDetail(enterpriseNumber, itemcode, starttime, endtime);
+        return success(result);
+    }
+
+    /**
+     * @Description: 他人信息反馈,或者企业自检
+     * @date 2021/5/11 15:16
+     */
+    @PostMapping(value = "/feedList")
+    @ApiOperation(value = "他人信息反馈,或者企业自检", httpMethod = "GET")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "企业单位id"),
+            @ApiImplicitParam(name = "pageIndex", value = "页码"),
+            @ApiImplicitParam(name = "pageSize", value = "页大小")
+    })
+    Object feedList(@RequestParam Long id,
+                    @RequestParam Integer pageIndex,
+                    @RequestParam Integer pageSize) {
+        IPage page = enterpriseFeedService.selectPages(new Page<>(pageIndex, pageSize), id, getUser());
+        return success(page);
+    }
+
+    /**
+     * @Description: 新增他人信息反馈,或者企业自检
+     * @date 2021/5/11 15:16
+     */
+    @PostMapping(value = "/feed")
+    @ApiOperation(value = "新增他人信息反馈,或者企业自检", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "enterpriseNumber", value = "企业单位编号"),
+            @ApiImplicitParam(name = "days", value = "时间范围(往前推days天)"),
+            @ApiImplicitParam(name = "enterpriseid", value = "企业id必传")
+    })
+    Object addFeed(EnterpriseFeedVo enterpriseFeedVo) {
+        enterpriseFeedService.addFeed(enterpriseFeedVo, getUser());
+        return success();
+    }
+    /**
+    * @Description: 导入
+    * @date 2021/5/13 18:47
+    */
+    @PostMapping(value = "/import/feed/{id}")
+    @ApiOperation(value = "导入他人信息反馈,或者企业自检", httpMethod = "POST")
+    Object importFeed(MultipartFile file,@PathVariable Long id) {
+        enterpriseFeedService.importFeed(file, getUser(),id);
+        return success();
+    }
+
+
+    /**
+     * @Description: 导出单个企业
+     * @date 2021/5/13 18:47
+     */
+    @PostMapping(value = "/exportOne/feed")
+    @ApiOperation(value = "导出他人信息反馈,或者企业自检", httpMethod = "POST")
+    @ApiImplicitParam(name = "id", value = "企业id")
+    Object exportFeedById(@RequestParam Long id) {
+        List<Map> list = enterpriseFeedService.exportFeedById(id);
+        return success(list);
+    }
+
+
+    /**
+     * @Description: 导出
+     * @date 2021/5/13 18:47
+     */
+    @PostMapping(value = "/export/feed")
+    @ApiOperation(value = "导出他人信息反馈,或者企业自检", httpMethod = "POST")
+    Object exportFeed(@RequestBody FilterObject filterObject) {
+        List<Map> list = enterpriseFeedService.exportFeed(filterObject.getFilter(), getUser());
+        return success(list);
+    }
+
+
+    /**
+    * @Description: 信息导出
+    * @date 2021/4/16 17:18
+    */
+
+    /**
+    * @Description: 企业信息导出
+    * @date 2021/4/16 17:35
+    */
+    @PostMapping(value = "/export/enterprise")
+    @ApiOperation(value = "企业基本信息导出", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "filter.safetysupervision", value = "安全监管分类", required = true),
+            @ApiImplicitParam(name = "filter.economicIndustry", value = "国民经济行业分类", required = true),
+            @ApiImplicitParam(name = "filter.enterprisename", value = "企业名称", required = true),
+            @ApiImplicitParam(name = "filter.valid", value = "有效期(0,1)", required = true),
+            @ApiImplicitParam(name = "filter.province", value = "省", required = true),
+            @ApiImplicitParam(name = "filter.city", value = "市", required = true),
+            @ApiImplicitParam(name = "filter.district", value = "区", required = true),
+            @ApiImplicitParam(name = "filter.street", value = "街道", required = true),
+            @ApiImplicitParam(name = "filter.committee", value = "委员会", required = true),
+
+    })
+    Object exportList(@RequestBody FilterObject enterpriseFilter) {
+        List<EnterpriseExportVo> list = enterpriseService.selectExportEnterprise(enterpriseFilter.getFilter(), getUser());
+        return success(list);
+    }
+
+    /**
+    * @Description: 企业信息导入
+    * @date 2021/4/19 8:52
+    */
+    @PostMapping(value = "/import/enterprise")
+    @ApiOperation(value = "企业基本信息导入", httpMethod = "POST")
+    @ApiImplicitParam(name = "file", value = "文件类型", required = true)
+    Object importEnterprise(MultipartFile file) {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        BooleanReason blret = enterpriseService.importEnterprise(file, getUser());
+        if(blret.getValue().equals(false))
+        {
+            msg.setCode("500");
+            msg.setMessage(blret.getResultmsg());
+            return msg;
+        }
+        return msg;
+    }
+
+    /**
+     * @Description: 发送一个请求触发任务
+     * @date 2021/4/19 8:52
+     */
+    @PostMapping(value = "/task/checkEnterprise")
+    void checkEnterprise() {
+        UserInfo userInfo = getUser();
+        UserInfo user = userService.getById(userInfo.getId());
+        new Thread(new CheckEnterpriseTask(user)).start();
+    }
+
+    /**
+     * @Description: 获取未完善企业分页
+     * @date 2021/8/4 8:40
+     */
+    @PostMapping(value = "/undoneList")
+    @ApiOperation(value = "获取未完善企业分页", httpMethod = "POST")
+    public Object undoneList(@RequestBody FilterObject filter) {
+        Integer pageIndex = filter.getPageIndex();
+        Integer pageSize = filter.getPageSize();
+        IPage page = enterpriseService.selectUndoneList(new Page<>(pageIndex, pageSize), filter.getFilter(), getUser());
+        return success(page);
+    }
+
+    /**
+    * @Description: 导出未完善企业
+    * @date 2021/8/4 14:05
+    */
+    @PostMapping(value = "/export/undoneList")
+    @ApiOperation(value = "导出未完善企业", httpMethod = "POST")
+    public Object exportUndoneList(@RequestBody FilterObject filter) {
+        List<Enterprise> exportData= enterpriseService.selectExportUndoneList(filter.getFilter(), getUser());
+        return success(exportData);
+    }
+
+     /**
+      * @Description: 获取已过期的企业
+      * @date 2021/11/12 16:00
+      */
+    @PostMapping(value = "/expiredList")
+    @ApiOperation(value = "获取已过期的企业", httpMethod = "POST")
+    public Object ExpiredList(@RequestBody FilterObject filter) {
+        Integer pageIndex = filter.getPageIndex();
+        Integer pageSize = filter.getPageSize();
+        IPage page = enterpriseService.selectExpiredList(new Page<>(pageIndex, pageSize), filter.getFilter(), getUser());
+        return success(page);
+    }
+
+    /**
+    * @Description: 导出已经过期的企业
+    * @date 2021/11/12 16:00
+    */
+    @PostMapping(value = "/export/expiredList")
+    @ApiOperation(value = "导出已经过期的企业", httpMethod = "POST")
+    public Object exportExpiredList(@RequestBody FilterObject filter) {
+        List<Enterprise> exportData= enterpriseService.selectExportExpiredList(filter.getFilter(), getUser());
+        return success(exportData);
+    }
+
+
+    /**
+     * @Description: 导入丹灵单位代码   根据单位名称匹配丹灵单位代码
+     * @date 2022/1/26 13:58
+     */
+    @PostMapping(value = "/import/dlcompanycode")
+    @ApiOperation(value = "导入丹灵单位代码", httpMethod = "POST")
+    public Msg importDlCompanyCode(MultipartFile file) {
+        BooleanReason booleanReason = enterpriseService.importDlCompanyCode(file, getUser());
+        return success(booleanReason);
+    }
+
+    /**
+    * @Description: 导出表格,导出所有丹灵单位代码不为空的企业信息
+    * @date 2022/1/26 15:21
+    */
+    @PostMapping(value = "/export/dlcompanycode")
+    @ApiOperation(value = "导入丹灵单位代码", httpMethod = "POST")
+    public Msg exportDlCompanyCode() {
+        List<Enterprise> result = enterpriseService.exportDlCompanyCode();
+        return success(result);
+    }
+
+
+      /**
+     * @Description: 注销
+     * @date 2022/2/23 0:57
+     */
+    @PostMapping(value = "/logout")
+    public Msg logout(@RequestBody List<Long> ids) {
+        enterpriseService.logout(ids,getUser());
+        return success();
+    }
+
+
+    /**
+     * @Description: 注销恢复成有效
+     * @date 2022/2/23 0:57
+     */
+    @PostMapping(value = "/recoverLogin")
+    public Msg recoverLogin(@RequestParam Long id) {
+        enterpriseService.recoverLogin(id,getUser());
+        return success();
+    }
+
+
+    /**
+     * @Description: 注销恢复成有效
+     * @date 2022/2/23 0:57
+     */
+    @PostMapping(value = "/recoverLoginBatch")
+    public Msg recoverLoginBatch(@RequestBody List<Long> ids) {
+        enterpriseService.recoverLoginBatch(ids,getUser());
+        return success();
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Controller/EntryController.java b/src/main/java/com/gk/firework/Controller/EntryController.java
new file mode 100644
index 0000000..88ee014
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/EntryController.java
@@ -0,0 +1,237 @@
+package com.gk.firework.Controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Controller.Base.BaseController;
+import com.gk.firework.Domain.EntryOrderInfo;
+import com.gk.firework.Domain.Enum.ErrorCode;
+import com.gk.firework.Domain.Log.JsonParams;
+import com.gk.firework.Domain.SoldNoStockInfo;
+import com.gk.firework.Domain.StockInfo;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.FilterObject;
+import com.gk.firework.Domain.Utils.Msg;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Vo.DirectionDetail;
+import com.gk.firework.Domain.Vo.FireworkDeal;
+import com.gk.firework.Domain.Vo.ProductVo;
+import com.gk.firework.Service.EntryDetailService;
+import com.gk.firework.Service.EntryService;
+import com.gk.firework.Service.ProductService;
+import com.gk.firework.Service.StockService;
+import com.gk.firework.Service.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author : jingjy
+ * @date : 2021/4/9 16:17
+ */
+@Api(tags = "入库接口")
+@RestController
+@RequestMapping("/entry")
+public class EntryController extends BaseController {
+    @Autowired
+    private ProductService productService;
+    @Autowired
+    private EntryService entryService;
+    @Autowired
+    private EntryDetailService entryDetailService;
+    @Autowired
+    private StockService stockService;
+    @Autowired
+    private SoldNoStockService soldNoStockService;
+    @Autowired
+    private UserService userService;
+
+    @GetMapping(value = "/getEntryDetail/directionCode/{directionCode}")
+    public Msg getEntryDetail(@PathVariable String directionCode){
+        Msg msg = new Msg(true);
+        if (FireworkDeal.isNotDirectionCode(directionCode)){
+            msg.setCode(ErrorCode.ERROR_999.getCode());
+            msg.setMessage("流向码不符合规则,请重新输入!");
+            return msg;
+        }
+
+        List<ProductVo>productVoList = new ArrayList<>();
+        if (FireworkDeal.is22Characters(directionCode)){
+            DirectionDetail detail = FireworkDeal.dealDirectionCode(directionCode);
+            ProductVo productVo = productService.selectVoByDirection(directionCode);
+            if (productVo == null){
+                msg.setCode(ErrorCode.ERROR_999.getCode());
+                msg.setMessage("产品不存在,请重新输入!");
+                return msg;
+            }
+            FireworkDeal.getProductVos(directionCode,detail,detail,productVoList,productVo);
+        }else {
+            ProductVo productVo = productService.selectVoByDirection(directionCode);
+            if (productVo == null){
+                msg.setCode(ErrorCode.ERROR_999.getCode());
+                msg.setMessage("产品不存在,请重新输入!");
+                return msg;
+            }
+            productVoList.add(productVo);
+        }
+
+
+        if (productVoList.size() == 0){
+            msg.setCode(ErrorCode.ERROR_999.getCode());
+            msg.setMessage("流向码:"+directionCode+"未找到相应入库信息!");
+            return msg;
+        }
+
+        StringBuilder content = new StringBuilder();
+
+        List<ProductVo>productVos = new ArrayList<>();
+        for (ProductVo productVo1 : productVoList){
+            StockInfo stockInfo = stockService.selectStockByDireAndUser(getUser().getCompanyid(),productVo1.getDirectionCode());
+            if (stockInfo == null || stockInfo.getStatus().equals(StockInfo.STOCK_SOLD)){
+                msg.setCode(ErrorCode.ERROR_999.getCode());
+                content.append(productVo1.getDirectionCode()).append("  未入库或者已经销售了!");
+            }else {
+                productVos.add(productVo1);
+            }
+        }
+
+        msg.setMessage(content.toString());
+        msg.setResult(productVos);
+
+        return msg;
+    }
+
+    @PostMapping("entryPatch")
+    @JsonParams
+    public Msg entryPatch(@RequestBody JSONArray jsonArray){
+        Msg msg = new Msg(true);
+        if (jsonArray.size() == 0){
+            msg.setCode(ErrorCode.ERROR_999.getCode());
+            msg.setMessage(ErrorCode.ERROR_999.getMsg());
+            return msg;
+        }
+        UserInfo userInfo = userService.getById(getUser().getId());
+        String auth = getAuth();
+        auth = StringUtils.isBlank(auth) ? "NOAUTH" : auth;
+        List<SoldNoStockInfo>soldNoStockInfos = new ArrayList<>();
+        for (int i = 0; i < jsonArray.size(); i++){
+            JSONObject object = jsonArray.getJSONObject(i);
+            String directionCode = object.getString("directioncode");
+            SoldNoStockInfo soldNoStockInfo = soldNoStockService.selectSoldNoStockByDire(directionCode);
+            if (soldNoStockInfo == null){
+                msg.setCode(ErrorCode.ERROR_999.getCode());
+                msg.setMessage(ErrorCode.ERROR_999.getMsg());
+                return msg;
+            }
+            soldNoStockInfos.add(soldNoStockInfo);
+        }
+        entryService.entryPatch(soldNoStockInfos,userInfo,auth);
+
+        return msg;
+    }
+
+
+
+    /**
+     * @Description: 入库查询
+     * @date 2021/4/14 16:35
+     */
+    @PostMapping("/inbound-query")
+    @ApiOperation(value = "入库查询", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex", value = "当前页码", required = true),
+            @ApiImplicitParam(name = "pageSize", value = "页大小", required = true),
+            @ApiImplicitParam(name = "filter.province", value = "省"),
+            @ApiImplicitParam(name = "filter.city", value = "市"),
+            @ApiImplicitParam(name = "filter.district", value = "区"),
+            @ApiImplicitParam(name = "filter.street", value = "街道"),
+            @ApiImplicitParam(name = "filter.committee", value = "委员会"),
+            @ApiImplicitParam(name = "filter.starttime", value = "开始时间"),
+            @ApiImplicitParam(name = "filter.endtime", value = "结束时间"),
+            @ApiImplicitParam(name = "filter.transportcert", value = "运输证号码"),
+            @ApiImplicitParam(name = "filter.enterprisename", value = "入库企业名称"),
+            @ApiImplicitParam(name = "filter.safetysupervision", value = "安全监管分类"),
+            @ApiImplicitParam(name = "filter.type", value = "入库类型"),
+            @ApiImplicitParam(name = "filter.code", value = "单号"),
+    })
+    Object getInboundInfo(@RequestBody FilterObject jsonFilter) {
+        Integer pageIndex = jsonFilter.getPageIndex();
+        Integer pageSize = jsonFilter.getPageSize();
+        IPage page = entryService.selectPage(new Page<>(pageIndex, pageSize), jsonFilter.getFilter(), getUser());
+        return success(page);
+    }
+
+    @PostMapping("/stock/inbound-query")
+    @ApiOperation(value = "入库查询", httpMethod = "POST")
+    Object getStockInboundInfo(@RequestBody FilterObject jsonFilter) {
+        Integer pageIndex = jsonFilter.getPageIndex();
+        Integer pageSize = jsonFilter.getPageSize();
+        IPage page = entryService.selectStockPage(new Page<>(pageIndex, pageSize), jsonFilter.getFilter(), getUser());
+        return success(page);
+    }
+
+    /**
+    * @Description: 入库导出
+    * @date 2021/4/19 17:11
+    */
+
+    @PostMapping("/export/inbound")
+    @ApiOperation(value = "入库查询导出", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "filter.province", value = "省"),
+            @ApiImplicitParam(name = "filter.city", value = "市"),
+            @ApiImplicitParam(name = "filter.district", value = "区"),
+            @ApiImplicitParam(name = "filter.street", value = "街道"),
+            @ApiImplicitParam(name = "filter.committee", value = "委员会"),
+            @ApiImplicitParam(name = "filter.starttime", value = "开始时间"),
+            @ApiImplicitParam(name = "filter.endtime", value = "结束时间"),
+            @ApiImplicitParam(name = "filter.transportcert", value = "运输证号码"),
+            @ApiImplicitParam(name = "filter.enterprisename", value = "入库企业名称"),
+    })
+    Object exportInbound(@RequestBody FilterObject jsonFilter) {
+        List<EntryOrderInfo> list = entryService.selectExportInBound(jsonFilter.getFilter(), getUser());
+        return success(list);
+    }
+
+    /**
+    * @Description: 根据{入库单code}查询入库明细
+    * @date 2021/4/15 11:09
+    */
+    @PostMapping("/inbound-detail")
+    @ApiOperation(value = "入库单明细", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex", value = "当前页码", required = true),
+            @ApiImplicitParam(name = "pageSize", value = "页大小", required = true),
+            @ApiImplicitParam(name = "filter.code", value = "入库单号code"),
+    })
+    Object getInboundDetail(@RequestBody FilterObject jsonFilter) {
+        Integer pageIndex = jsonFilter.getPageIndex();
+        Integer pageSize = jsonFilter.getPageSize();
+        IPage page = entryService.selectDetailPage(new Page<>(pageIndex,pageSize),jsonFilter.getFilter());
+        return success(page);
+    }
+
+
+    /**
+     * @Description: 根据{入库单code}查询入库明细并导出
+     * @date 2021/4/15 11:09
+     */
+    @GetMapping("/export/inbound-detail")
+    @ApiOperation(value = "入库单明细导出", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "code", value = "入库单号code"),
+    })
+    Object getInboundDetail(@RequestParam String code) {
+         List<Map> detailExport = entryDetailService.selectDetailExport(code);
+        return success(detailExport);
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Controller/FlowController.java b/src/main/java/com/gk/firework/Controller/FlowController.java
new file mode 100644
index 0000000..8a93765
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/FlowController.java
@@ -0,0 +1,56 @@
+package com.gk.firework.Controller;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Controller.Base.BaseController;
+import com.gk.firework.Domain.ProductInfo;
+import com.gk.firework.Domain.ProductLocusInfo;
+import com.gk.firework.Domain.Utils.FilterObject;
+import com.gk.firework.Domain.Vo.PageInfoExtension;
+import com.gk.firework.Domain.Vo.ProductLocusVo;
+import com.gk.firework.Domain.Vo.ProductVo;
+import com.gk.firework.Service.ProductLocusService;
+import com.gk.firework.Service.StockService;
+import io.swagger.annotations.Api;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@Api(tags = "流向查询")
+@RestController
+@RequestMapping("/flow")
+public class FlowController extends BaseController {
+
+    @Autowired
+    private ProductLocusService productLocusService;
+    @Autowired
+    private StockService stockService;
+
+    /**
+    * @Description: 根据流向码获取流向记录
+    * @date 2021/4/14 16:03
+    */
+    @GetMapping("/direction")
+    Object getFlow(@RequestParam String directionCode) {
+        List<ProductLocusVo> flow = productLocusService.getFlow(directionCode);
+        return success(flow);
+    }
+
+    /**
+    * @Description: 22位查询箱内所有挂当前状态,19位查询单挂当前状态
+    * @date 2021/11/5 16:10
+    */
+    @PostMapping("/direction/fire-status")
+    Object getFireCurrentStatus(@RequestBody FilterObject filter){
+        Integer pageIndex = filter.getPageIndex();
+        Integer pageSize = filter.getPageSize();
+        PageInfoExtension<ProductVo> page = stockService.selectCurrentFireStatus(pageIndex,pageSize, filter.getFilter(), getUser());
+        return success(page);
+
+    }
+
+
+
+}
diff --git a/src/main/java/com/gk/firework/Controller/HiddenDangerController.java b/src/main/java/com/gk/firework/Controller/HiddenDangerController.java
new file mode 100644
index 0000000..c08e943
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/HiddenDangerController.java
@@ -0,0 +1,145 @@
+package com.gk.firework.Controller;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Controller.Base.BaseController;
+import com.gk.firework.Domain.HiddenDangerCheckContent;
+import com.gk.firework.Domain.HiddenDangerMenu;
+import com.gk.firework.Domain.HiddenDangerReport;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.FilterObject;
+import com.gk.firework.Domain.Vo.CheckReportVo;
+import com.gk.firework.Domain.Vo.HiddenDangerTableRow;
+import com.gk.firework.Service.HiddenDangerCheckService;
+import com.gk.firework.Service.HiddenDangerMenuService;
+import com.gk.firework.Service.HiddenDangerReportService;
+import com.gk.firework.Service.UserService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.Map;
+
+@Api(tags = "隐患排查治理接口")
+@RequestMapping("/hiddenDanger")
+@RestController
+public class HiddenDangerController extends BaseController {
+
+    @Autowired
+    private HiddenDangerMenuService hiddenDangerMenuService;
+    @Autowired
+    private HiddenDangerCheckService hiddenDangerCheckService;
+    @Autowired
+    private HiddenDangerReportService hiddenDangerReportService;
+    @Autowired
+    private UserService userService;
+
+    @GetMapping(value = "/menu")
+    @ApiOperation(value = "菜单",httpMethod="GET")
+    Object menu() {
+        List<HiddenDangerMenu> list = hiddenDangerMenuService.selectMenu();
+        return success(list);
+    }
+
+    @GetMapping(value = "/checkList")
+    @ApiOperation(value = "检查列表",httpMethod="GET")
+    @ApiImplicitParams({
+         @ApiImplicitParam(name = "id",value = "菜单id"),
+         @ApiImplicitParam(name = "level",value = "菜单等级"),
+    })
+    Object checkList(@RequestParam Long id,@RequestParam String level) {
+        List<HiddenDangerTableRow> list = hiddenDangerCheckService.selectRowList(id,level);
+        return success(list);
+    }
+
+
+    @PostMapping(value = "/upload")
+    @ApiOperation(value = "自检报告上传",httpMethod="POST")
+    Object addCheck(MultipartFile file) {
+        String url = hiddenDangerReportService.upload(file);
+        return success(url);
+    }
+
+    @PostMapping(value = "/check")
+    @ApiOperation(value = "新增自检",httpMethod="POST")
+    @ApiImplicitParams({})
+    Object addCheck(CheckReportVo checkReportVo) {
+        UserInfo user = userService.getById(getUser().getId());
+        hiddenDangerReportService.checkAdd(checkReportVo, user);
+        hiddenDangerReportService.addCheck(checkReportVo, user);
+        return success();
+    }
+
+    @PostMapping(value = "/report")
+    @ApiOperation(value = "自检报告统计分页", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex", value = "当前页码"),
+            @ApiImplicitParam(name = "pageSize", value = "页大小"),
+            @ApiImplicitParam(name = "filter", value = "筛选条件"),
+    })
+    Object reportList(@RequestBody FilterObject reportFilter) {
+        Integer pageIndex = reportFilter.getPageIndex();
+        Integer pageSize = reportFilter.getPageSize();
+        IPage page =  hiddenDangerReportService.reportList(new Page<>(pageIndex,pageSize),reportFilter.getFilter(),getUser());
+        return success(page);
+    }
+
+
+    @GetMapping(value = "/report")
+    @ApiOperation(value = "获取自检报告", httpMethod = "GET")
+    @ApiImplicitParam(name = "code", value = "报告code")
+    Object getReport(@RequestParam String code) {
+        List<HiddenDangerTableRow> table = hiddenDangerReportService.getReport(code);
+        return success(table);
+    }
+
+
+    @PostMapping(value = "/putreport")
+    @ApiOperation(value = "修改自检", httpMethod = "PUT")
+    @ApiImplicitParams({
+
+    })
+    Object modReport(CheckReportVo checkReportVo) {
+        hiddenDangerReportService.checkMod(checkReportVo);
+        hiddenDangerReportService.modReport(checkReportVo,getUser());
+        return success();
+    }
+
+
+    @GetMapping(value = "/viewReport")
+    @ApiOperation(value = "查看", httpMethod = "GET")
+    @ApiImplicitParam(name = "code", value = "报告code")
+    Object viewReport(@RequestParam String code) {
+        List<HiddenDangerTableRow> table = hiddenDangerReportService.viewReport(code);
+        return success(table);
+    }
+
+    @GetMapping(value = "/commit")
+    @ApiOperation(value = "提交报告单", httpMethod = "GET")
+    @ApiImplicitParam(name = "code", value = "报告code")
+    Object commitReport(@RequestParam String code) {
+        hiddenDangerReportService.checkCommit(code);
+        hiddenDangerReportService.commitReport(code);
+        return success();
+    }
+
+
+    @PostMapping("/export/report")
+    @ApiOperation(value = "导出报告单", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex", value = "当前页码"),
+            @ApiImplicitParam(name = "pageSize", value = "页大小"),
+            @ApiImplicitParam(name = "filter", value = "筛选条件"),
+    })
+    Object exportReport(@RequestBody FilterObject filterObject) {
+        List<Map> list = hiddenDangerReportService.selectExportReport(filterObject.getFilter(), getUser());
+        return success(list);
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Controller/LicenseController.java b/src/main/java/com/gk/firework/Controller/LicenseController.java
new file mode 100644
index 0000000..feaa871
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/LicenseController.java
@@ -0,0 +1,611 @@
+package com.gk.firework.Controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.gk.firework.Controller.Base.BaseController;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.Enum.ErrorCode;
+import com.gk.firework.Domain.Enum.LicenseStatus;
+import com.gk.firework.Domain.Enum.ProvinceCode;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.Utils.Base64Encrypt;
+import com.gk.firework.Domain.Utils.Msg;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Vo.LicenseVo;
+import com.gk.firework.Service.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.FieldError;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @author : jingjy
+ * @date : 2021/5/11 16:48
+ */
+@Api(tags = "许可证")
+@RequestMapping("/license")
+@RestController
+public class LicenseController extends BaseController {
+
+    private static final Byte ADD_OPTION = 1;
+    private static final Byte EDIT_OPTION = 2;
+    private static final Byte DEL_OPTION = 3;
+
+    private static final Byte LICENSE_PF = 2;
+    private static final Byte LICENSE_LS = 3;
+
+    private static final int LICENSE_CODE_LENGTH = 16;
+
+    /**
+     * 未审核:0;等待审核:1;已审核:2;拒绝审核:3;
+     **/
+    private static final Byte STATUS_NOT_REVIEW = 0;
+    private static final Byte STATUS_WAIT_REVIEW = 1;
+    private static final Byte STATUS_REVIEWED = 2;
+    private static final Byte STATUS_REJECT_REVIEW = 3;
+
+
+    @Autowired
+    private LicenseService licenseService;
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private LicenseStorageService licenseStorageService;
+    @Autowired
+    private EnterpriseService enterpriseService;
+    @Autowired
+    private EnterpriseLicenseService enterpriseLicenseService;
+
+
+    @ApiOperation(value = "许可证信息", notes = "分页查询", httpMethod = "GET")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex", value = "当前页面索引", required = true),
+            @ApiImplicitParam(name = "pageSize", value = "页面个数", required = true),
+            @ApiImplicitParam(name = "sort", value = "排序字段", required = true),
+            @ApiImplicitParam(name = "order", value = "排序方法(ASC/DESC)", required = true),
+            @ApiImplicitParam(name = "name", value = "单位名称"),
+            @ApiImplicitParam(name = "type", value = "1.生产;2.批发;3.零售 (传String类型的数字)"),
+            @ApiImplicitParam(name = "effectdate", value = "生效日期(传String类型日期)"),
+            @ApiImplicitParam(name = "noeffectdate", value = "失效日期(传String类型日期)"),
+            @ApiImplicitParam(name = "status", value = "状态(1.有效;2.注销)(传String类型的数字)"),
+            @ApiImplicitParam(name = "issuingunit", value = "发证机关"),
+            @ApiImplicitParam(name = "reviewer", value = "发证人"),
+            @ApiImplicitParam(name = "province", value = "省"),
+            @ApiImplicitParam(name = "city", value = "市"),
+            @ApiImplicitParam(name = "district", value = "区"),
+
+    })
+    @GetMapping("/info")
+    public Msg getLicenseInfo(@RequestParam(value = "name", required = false) String name,
+                              @RequestParam(value = "type", required = false) String type,
+                              @RequestParam(value = "effectdate", required = false) String effectdate,
+                              @RequestParam(value = "noeffectdate", required = false) String noeffectdate,
+                              @RequestParam(value = "status", required = false) String status,
+                              @RequestParam(value = "issuingunit", required = false) String issuingunit,
+                              @RequestParam(value = "reviewer", required = false) String reviewer,
+                              @RequestParam(value = "province", required = false) String province,
+                              @RequestParam(value = "city", required = false) String city,
+                              @RequestParam(value = "district", required = false) String district,
+                              @RequestParam(value = "starttime1", required = false)String starttime1,
+                              @RequestParam(value = "endtime1", required = false) String  endtime1,
+                              @RequestParam(value = "starttime2", required = false)String starttime2,
+                              @RequestParam(value = "endtime2", required = false)String endtime2,
+                              @RequestParam(value = "reviewstatus", required = false)Integer reviewstatus,
+                              @RequestParam(value = "validstatus", required = false)Byte validstatus,
+                              @RequestParam(value = "licensecode", required = false)String licensecode,
+                              @RequestParam(defaultValue = "0") Integer pageIndex,
+                              @RequestParam(defaultValue = "10") Integer pageSize,
+                              String sort, String order) {
+        Msg msg = new Msg(true);
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize, sort, order);
+        Map<String, Object> condition = new HashMap<>(16);
+
+        if (StringUtils.isNotBlank(type)) {
+            condition.put("type", type);
+        }
+        if (StringUtils.isNotBlank(effectdate)) {
+            condition.put("effectdate", effectdate);
+        }
+        if (StringUtils.isNotBlank(noeffectdate)) {
+            condition.put("noeffectdate", noeffectdate);
+        }
+        if (StringUtils.isNotBlank(status)) {
+            condition.put("status", status);
+        }
+        if (StringUtils.isNotBlank(issuingunit)) {
+            condition.put("issuingunit", issuingunit);
+        }
+        if (StringUtils.isNotBlank(reviewer)) {
+            condition.put("reviewer", reviewer);
+        }
+        condition.put("filterProvince", province);
+        condition.put("filterCity", city);
+        condition.put("filterDistrict", district);
+        condition.put("starttime1", starttime1);
+        condition.put("endtime1", endtime1);
+        condition.put("starttime2", starttime2);
+        condition.put("endtime2", endtime2);
+        condition.put("licensestatus", LicenseStatus.parse(licensecode));
+        condition.put("validstatus", validstatus);
+        condition.put("reviewstatus", reviewstatus);
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (userInfo.getCompanyid() != null) {
+            condition.put("name", userInfo.getCompany());
+        } else if (userInfo.getType() == 3) {
+            if (StringUtils.isNotBlank(name)) {
+                condition.put("name", name);
+            }
+            if (StringUtils.isNotBlank(userInfo.getProvince())) {
+                condition.put("province", userInfo.getProvince());
+            }
+            if (StringUtils.isNotBlank(userInfo.getCity())) {
+                condition.put("city", userInfo.getCity());
+            }
+            if (StringUtils.isNotBlank(userInfo.getArea())) {
+                condition.put("district", userInfo.getArea());
+            }
+        }else {
+            if (StringUtils.isNotBlank(name)) {
+                condition.put("name", name);
+            }
+        }
+
+        pageInfo.setCondition(condition);
+        licenseService.selectDataGrid(pageInfo);
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    @GetMapping("/export")
+    Msg exportLicense(@RequestParam(value = "name", required = false) String name,
+                      @RequestParam(value = "type", required = false) String type,
+                      @RequestParam(value = "status", required = false) String status,
+                      @RequestParam(value = "issuingunit", required = false) String issuingunit,
+                      @RequestParam(value = "reviewer", required = false) String reviewer,
+                      @RequestParam(value = "province", required = false) String province,
+                      @RequestParam(value = "city", required = false) String city,
+                      @RequestParam(value = "district", required = false) String district,
+                      @RequestParam(value = "starttime1", required = false) String starttime1,
+                      @RequestParam(value = "endtime1", required = false) String endtime1,
+                      @RequestParam(value = "starttime2", required = false) String starttime2,
+                      @RequestParam(value = "endtime2", required = false) String endtime2,
+                      @RequestParam(value = "reviewstatus", required = false) Integer reviewstatus,
+                      String sort, String order) {
+        Map<String,Object> condition = new HashMap<>();
+        condition.put("type", type);
+       condition.put("status", status);
+       condition.put("issuingunit", issuingunit);
+        condition.put("reviewer", reviewer);
+        condition.put("filterProvince", province);
+        condition.put("filterCity", city);
+        condition.put("filterDistrict", district);
+        condition.put("starttime1", starttime1);
+        condition.put("endtime1", endtime1);
+        condition.put("starttime2", starttime2);
+        condition.put("endtime2", endtime2);
+        condition.put("reviewstatus", reviewstatus);
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (userInfo.getCompanyid() != null) {
+            condition.put("name", userInfo.getCompany());
+        } else if (userInfo.getType() == 3) {
+            if (StringUtils.isNotBlank(name)) {
+                condition.put("name", name);
+            }
+            if (StringUtils.isNotBlank(userInfo.getProvince())) {
+                condition.put("province", userInfo.getProvince());
+            }
+            if (StringUtils.isNotBlank(userInfo.getCity())) {
+                condition.put("city", userInfo.getCity());
+            }
+            if (StringUtils.isNotBlank(userInfo.getArea())) {
+                condition.put("district", userInfo.getArea());
+            }
+        }else {
+            if (StringUtils.isNotBlank(name)) {
+                condition.put("name", name);
+            }
+        }
+
+        List<LicenseVo> licenseVos = licenseService.exportLicense(condition);
+        return success(licenseVos);
+    }
+
+    @PostMapping("/addLicense")
+    public Msg addLicense(@Validated @RequestBody LicenseVo licenseVo, BindingResult bindingResult) {
+        Msg msg = new Msg(true);
+        if (bindingResult.hasErrors()) {
+            StringBuilder stringBuilder = new StringBuilder();
+            for (String s : bindingResult.getFieldErrors().stream()
+                    .map(FieldError::getDefaultMessage).collect(Collectors.toList())) {
+                stringBuilder.append(s);
+                stringBuilder.append(",");
+            }
+            msg.setCode("999");
+            msg.setMessage(stringBuilder.toString());
+            return msg;
+        }
+        Msg checkMsg = checkLicense(licenseVo, ADD_OPTION);
+        if (!checkMsg.getCode().equals(ErrorCode.SUCCESS.getCode())) {
+            return checkMsg;
+        }
+        LicenseInfo licenseInfo1 = licenseService.getLastOne();
+        Integer sn = licenseInfo1.getSn();
+        sn++;
+        licenseVo.setSn(sn);
+        String abbr = "";
+        String typeCode = "";
+        for (ProvinceCode code : ProvinceCode.values()) {
+            if (licenseVo.getProvince().equals(code.getName())) {
+                abbr = code.getAbbr();
+            }
+        }
+        if (StringUtils.isBlank(abbr)) {
+            msg.setCode("200");
+            msg.setMessage("省份对应错误,生成许可证编号失败!");
+            return msg;
+        }
+        if (licenseVo.getType().equals(LICENSE_PF)) {
+            typeCode = "PF";
+        } else if (licenseVo.getType().equals(LICENSE_LS)) {
+            typeCode = "LS";
+        }
+        Calendar cal = Calendar.getInstance();
+        int year = cal.get(Calendar.YEAR);
+
+        String licenseCode = "(" + abbr + ")" + typeCode + "〔" + year + "〕" + String.format("%05d", sn);
+        if (licenseCode.length() != LICENSE_CODE_LENGTH) {
+            msg.setCode("999");
+            msg.setMessage("错误,生成许可证编号失败!");
+            return msg;
+        }
+        licenseVo.setLicensecode(licenseCode);
+        JSONArray jsonArray = JSONArray.parseArray(licenseVo.getLicenseStorage());
+        List<LicenseStorage> licenseStorageList = jsonArray.toJavaList(LicenseStorage.class);
+        for (LicenseStorage licenseStorage : licenseStorageList) {
+            licenseStorage.setLicensecode(licenseCode);
+        }
+        licenseStorageService.saveBatch(licenseStorageList);
+        licenseVo.setCreatedat(new Date());
+        licenseVo.setCreatedby(getUser().getUsername());
+        licenseVo.setLicensestatus(LicenseStatus.NEW);
+        licenseVo.setValidstatus((byte) 1);
+        licenseService.save(licenseVo);
+        return msg;
+    }
+
+    @PostMapping("/editLicense")
+    public Msg editLicense(@Validated @RequestBody LicenseVo licenseVo, BindingResult bindingResult) {
+        Msg msg = new Msg(true);
+        if (bindingResult.hasErrors()) {
+            StringBuilder stringBuilder = new StringBuilder();
+            for (String s : bindingResult.getFieldErrors().stream()
+                    .map(FieldError::getDefaultMessage).collect(Collectors.toList())) {
+                stringBuilder.append(s);
+                stringBuilder.append(",");
+            }
+            msg.setCode("999");
+            msg.setMessage(stringBuilder.toString());
+            return msg;
+        }
+        Msg checkMsg = checkLicense(licenseVo, EDIT_OPTION);
+        //控制许可证相关信息是否更新在企业信息中
+        boolean flag = false;
+        if (!checkMsg.getCode().equals(ErrorCode.SUCCESS.getCode())) {
+            return checkMsg;
+        }
+        UserInfo userInfo = userService.getById(getUser().getId());
+        JSONArray jsonArray = JSONArray.parseArray(licenseVo.getLicenseStorage());
+        List<LicenseStorage> licenseStorages = jsonArray.toJavaList(LicenseStorage.class);
+        for (LicenseStorage licenseStorage : licenseStorages) {
+            licenseStorage.setLicensecode(licenseVo.getLicensecode());
+        }
+
+        LicenseInfo licenseInfo = licenseService.getLicenseById(licenseVo.getId());
+        Byte reviewStatus = licenseVo.getReviewstatus();
+        if (licenseInfo == null) {
+            msg.setCode(ErrorCode.ERROR_999.getMsg());
+            msg.setMessage("未找到对应的许可证信息,审核失败!");
+            return msg;
+        }
+        if (licenseInfo.getReviewstatus().equals(STATUS_REVIEWED)){
+            msg.setCode(ErrorCode.ERROR_999.getMsg());
+            msg.setMessage("许可证信息已审核,无法修改!");
+            return msg;
+        }
+
+        if (userInfo.getCompanyid() == null) {
+            // 审核需要判断用户角色权限
+            if (!reviewStatus.equals(STATUS_REVIEWED) && !reviewStatus.equals(STATUS_REJECT_REVIEW)) {
+                msg.setCode(ErrorCode.ERROR_999.getMsg());
+                msg.setMessage("权限错误,审核失败!");
+                return msg;
+            }
+
+            if (licenseInfo.getReviewstatus().equals(STATUS_NOT_REVIEW) && !reviewStatus.equals(STATUS_WAIT_REVIEW)) {
+                msg.setCode(ErrorCode.ERROR_999.getMsg());
+                msg.setMessage("当前许可证未提交审核,操作失败!");
+                return msg;
+            }
+
+            if (licenseInfo.getReviewstatus().equals(STATUS_WAIT_REVIEW)) {
+                if (!reviewStatus.equals(STATUS_REVIEWED) && !reviewStatus.equals(STATUS_REJECT_REVIEW)) {
+                    msg.setCode(ErrorCode.ERROR_999.getMsg());
+                    msg.setMessage("当前许可证为待审核,操作失败!");
+                    return msg;
+                }
+            }
+
+            if (licenseInfo.getReviewstatus().equals(STATUS_REVIEWED)) {
+                msg.setCode(ErrorCode.ERROR_999.getMsg());
+                msg.setMessage("当前许可证已审核完毕,操作失败!");
+                return msg;
+            }
+
+            //判断是否能够审核
+            if (reviewStatus.equals(STATUS_REVIEWED)){
+                if (!reviewStatus.equals(licenseInfo.getReviewstatus())) {
+                    if (licenseVo.getEffectdate() == null || licenseVo.getNoeffectdate() == null) {
+                        msg.setCode(ErrorCode.ERROR_999.getMsg());
+                        msg.setMessage("有效期不能为空");
+                        return msg;
+                    }
+
+                    if (StringUtils.isBlank(licenseVo.getIssuingunit()) || licenseVo.getIssuingdate() == null) {
+                        msg.setCode(ErrorCode.ERROR_999.getMsg());
+                        msg.setMessage("发证机关和发证日期不能为空");
+                        return msg;
+                    }
+                }
+                licenseVo.setReviewer(getUser().getUsername());
+                licenseVo.setReviewat(new Date());
+                flag = true;
+            }
+        }else{
+            if (licenseInfo.getReviewstatus().equals(STATUS_WAIT_REVIEW)){
+                msg.setCode(ErrorCode.ERROR_999.getMsg());
+                msg.setMessage("许可证信息等待审核中,无法修改!");
+                return msg;
+            }
+        }
+
+
+        licenseStorageService.updateBatchById(licenseStorages);
+        licenseVo.setModifiedat(new Date());
+        licenseVo.setModifiedby(getUser().getUsername());
+        licenseService.updateById(licenseVo);
+        if (flag){
+            Enterprise enterprise = enterpriseService.selectEnterpriseByName(licenseInfo.getName());
+            enterprise.setValidstarttime(licenseVo.getEffectdate());
+            enterprise.setValidendtime(licenseVo.getNoeffectdate());
+            enterpriseService.updateById(enterprise);
+            EnterpriseLicense enterpriseLicense = new EnterpriseLicense();
+            if (licenseVo.getType().equals(LICENSE_PF)){
+                enterpriseLicense.setLicensename("烟花爆竹经营(批发)许可证");
+            }else if (licenseVo.getType().equals(LICENSE_LS)){
+                enterpriseLicense.setLicensename("烟花爆竹经营(零售)许可证");
+            }
+            enterpriseLicense.setLicensenumber(licenseVo.getLicensecode());
+            enterpriseLicense.setEnterpriseid(enterprise.getId());
+            enterpriseLicense.setAuthority(licenseVo.getIssuingunit());
+            enterpriseLicense.setRanges(licenseService.dealDealingRange(licenseVo.getDealingrange()).toString());
+            enterpriseLicense.setValidendtime(licenseVo.getReviewat());
+            enterpriseLicense.setValidstarttime(licenseVo.getEffectdate());
+            enterpriseLicense.setValidflag(true);
+            enterpriseLicense.setCreatetime(new Date());
+            enterpriseLicense.setCreateby(getUser().getId());
+            enterpriseLicense.setCreatebyname(getUser().getUsername());
+            enterpriseLicenseService.save(enterpriseLicense);
+            //issale = 1 修改 截止有效期
+            List<UserInfo> userList = userService.selectByCompanyId(enterprise.getId(),0);
+            if (userList.size() != 2) {
+                throw new BusinessException("发生错误,请联系管理员");
+            }
+            for (UserInfo info : userList) {
+                //修改许可证 同时修改issale=1的用户有效期
+                if (info.getIssale() == (byte) 1) {
+                    Date validendtime = enterprise.getValidendtime();
+                    Calendar instance = Calendar.getInstance();
+                    instance.setTime(validendtime);
+                    instance.set(Calendar.HOUR_OF_DAY, 23);
+                    instance.set(Calendar.MINUTE, 59);
+                    instance.set(Calendar.SECOND, 59);
+                    info.setExpiredate(instance.getTime());
+                    userService.updateById(info);
+                }
+            }
+        }
+        return msg;
+    }
+
+    @ApiOperation(value = "许可证审核", httpMethod = "PUT")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "审核许可证ID", required = true),
+            @ApiImplicitParam(name = "reviewstatus", value = "审核状态(0.未审核;1.等待审核;2.已审核;3.审核驳回) 数字类型", required = true),})
+    @PostMapping("/review")
+    private Msg reviewLicense(@RequestParam(value = "id") Long id,
+                              @RequestParam(value = "reviewstatus") Byte reviewstatus) {
+        Msg msg = new Msg(true);
+
+        LicenseInfo licenseInfo = licenseService.getLicenseById(id);
+        if (licenseInfo == null) {
+            msg.setCode(ErrorCode.ERROR_999.getMsg());
+            msg.setMessage("未找到对应的许可证信息,审核失败!");
+            return msg;
+        }
+
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (userInfo.getCompanyid() == null) {
+            if (!reviewstatus.equals(STATUS_NOT_REVIEW) || !reviewstatus.equals(STATUS_WAIT_REVIEW)) {
+                msg.setCode(ErrorCode.ERROR_999.getMsg());
+                msg.setMessage("权限错误,审核失败!");
+                return msg;
+            }
+        }
+
+
+        if (licenseInfo.getReviewstatus().equals(STATUS_NOT_REVIEW) && !reviewstatus.equals(STATUS_WAIT_REVIEW)) {
+            msg.setCode(ErrorCode.ERROR_999.getMsg());
+            msg.setMessage("当前许可证未提交审核,操作失败!");
+            return msg;
+        }
+
+        if (licenseInfo.getReviewstatus().equals(STATUS_WAIT_REVIEW)) {
+            if (!reviewstatus.equals(STATUS_REVIEWED) && !reviewstatus.equals(STATUS_REJECT_REVIEW)) {
+                msg.setCode(ErrorCode.ERROR_999.getMsg());
+                msg.setMessage("当前许可证为待审核,操作失败!");
+                return msg;
+            }
+        }
+        if (licenseInfo.getReviewstatus().equals(STATUS_REVIEWED)) {
+            msg.setCode(ErrorCode.ERROR_999.getMsg());
+            msg.setMessage("当前许可证已审核完毕,操作失败!");
+            return msg;
+        }
+        licenseInfo.setReviewstatus(reviewstatus);
+        licenseService.updateById(licenseInfo);
+
+        return msg;
+    }
+
+
+    @ApiOperation(value = "许可证删除", httpMethod = "PUT")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "许可证ID", required = true)})
+    @PostMapping("/delete")
+    private Msg delLicense(@RequestParam(value = "id") Long id) {
+        Msg msg = new Msg(true);
+
+        LicenseInfo licenseInfo = licenseService.getLicenseById(id);
+        if (licenseInfo == null) {
+            msg.setCode(ErrorCode.ERROR_999.getMsg());
+            msg.setMessage("未找到对应的许可证信息,审核失败!");
+            return msg;
+        }
+
+        if (licenseInfo.getReviewstatus().equals(STATUS_REVIEWED)) {
+            msg.setCode(ErrorCode.ERROR_999.getCode());
+            msg.setMessage("当前许可证已审核完毕,无法删除!");
+            return msg;
+        }
+
+        licenseInfo.setFlag((byte) 1);
+        licenseService.updateById(licenseInfo);
+
+        return msg;
+    }
+
+
+    @ApiOperation(value = "许可证驳回", httpMethod = "PUT")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "许可证ID", required = true)})
+    @PostMapping("/reject")
+    private Msg rejectLicense(@RequestBody JSONObject data) {
+        licenseService.rejectLicense(data,getUser());
+        return success();
+    }
+
+    private Msg checkLicense(LicenseVo licenseVo, Byte option) {
+        Msg msg = new Msg(false);
+        if (licenseVo == null) {
+            msg.setMessage("操作失败:未找到对应的许可证信息");
+            return msg;
+        }
+        if (option.equals(EDIT_OPTION)) {
+            if (licenseVo.getId() == null) {
+                msg.setMessage("操作失败:未找到对应的许可证信息");
+                return msg;
+            }
+        }
+        if (licenseVo.getType() == null) {
+            msg.setMessage("类型不能为空");
+            return msg;
+        }
+
+        if (licenseVo.getName() == null) {
+            msg.setMessage("类别名称不能为空");
+            return msg;
+        }
+        if (licenseVo.getCode() == null) {
+            msg.setMessage("统一社会信用代码不能为空");
+            return msg;
+        }
+        if (StringUtils.isBlank(licenseVo.getMainpersonname())
+                || StringUtils.isBlank(licenseVo.getMainpersonidcardnum())
+                || StringUtils.isBlank(licenseVo.getMainpersontel())) {
+            msg.setMessage("主要负责人信息不能为空");
+            return msg;
+        }
+        if (StringUtils.isBlank(licenseVo.getSafetypersonname())
+                || StringUtils.isBlank(licenseVo.getSafetypersonidcardnum())
+                || StringUtils.isBlank(licenseVo.getSafetypersontel())) {
+            msg.setMessage("安全负责人信息不能为空");
+            return msg;
+        }
+        if (StringUtils.isBlank(licenseVo.getProvince()) || StringUtils.isBlank(licenseVo.getCity())
+                || StringUtils.isBlank(licenseVo.getDistrict()) || StringUtils.isBlank(licenseVo.getAddress())) {
+            msg.setMessage("单位地址/注册地址不能为空");
+            return msg;
+        }
+
+        if (licenseVo.getType().equals(LICENSE_PF) || licenseVo.getType().equals(LICENSE_LS)) {
+            if (StringUtils.isBlank(licenseVo.getLicenseStorage())) {
+                msg.setMessage("批发企业和生产企业仓库信息不能为空");
+                return msg;
+            }
+        }
+        msg.setCode("200");
+        return msg;
+    }
+
+
+    @PostMapping("/delay")
+    public Msg delay(@RequestBody JSONObject jso) {
+        Long id = jso.getLong("id");
+        String issuingunit = jso.getString("issuingunit");
+        Date issuingdate = jso.getDate("issuingdate");
+        Date validstarttime = jso.getDate("validstarttime");
+        Date validendtime = jso.getDate("validendtime");
+        licenseService.delayLicense(id, issuingunit, issuingdate, validstarttime, validendtime,getUser());
+        return success();
+    }
+
+    @PostMapping("/mod")
+    public Msg mod(@Validated @RequestBody LicenseVo licenseVo, BindingResult bindingResult) {
+        //判断
+        Msg msg = new Msg(true);
+        if (bindingResult.hasErrors()) {
+            StringBuilder stringBuilder = new StringBuilder();
+            for (String s : bindingResult.getFieldErrors().stream()
+                    .map(FieldError::getDefaultMessage).collect(Collectors.toList())) {
+                stringBuilder.append(s);
+                stringBuilder.append(",");
+            }
+            msg.setCode("999");
+            msg.setMessage(stringBuilder.toString());
+        }
+        Msg checkMsg = checkLicense(licenseVo, EDIT_OPTION);
+        if (!checkMsg.getCode().equals(ErrorCode.SUCCESS.getCode())) {
+            return checkMsg;
+        }
+
+        licenseService.generateLicenseDetail(licenseVo);
+        JSONArray jsonArray = JSONArray.parseArray(licenseVo.getLicenseStorage());
+        List<LicenseStorage> licenseStorageList = jsonArray.toJavaList(LicenseStorage.class);
+        for (LicenseStorage licenseStorage : licenseStorageList) {
+            licenseStorage.setLicensecode(licenseVo.getLicensecode());
+        }
+        licenseService.modLicense(licenseVo, licenseStorageList, getUser());
+        return success();
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Controller/LoginController.java b/src/main/java/com/gk/firework/Controller/LoginController.java
new file mode 100644
index 0000000..e232d6b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/LoginController.java
@@ -0,0 +1,442 @@
+package com.gk.firework.Controller;
+
+import cn.hutool.core.lang.Dict;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpRequest;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.gk.firework.Config.Oauth2.IRedisService;
+import com.gk.firework.Config.Oauth2.OauthRole;
+import com.gk.firework.Config.Oauth2.RedisKeyEnum;
+import com.gk.firework.Domain.AuthorizationInfo;
+import com.gk.firework.Domain.Log.JsonParams;
+import com.gk.firework.Domain.Utils.CommonUtil;
+import com.gk.firework.Domain.Utils.Msg;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Vo.UserVo;
+import com.gk.firework.Service.AuthorizationService;
+import com.gk.firework.Service.EnterpriseService;
+import com.gk.firework.Service.UserService;
+import com.google.common.base.Strings;
+import com.google.common.net.HttpHeaders;
+import io.jsonwebtoken.Claims;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.apache.commons.collections4.map.SingletonMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.servlet.http.HttpServletRequest;
+import java.nio.charset.StandardCharsets;
+import java.util.*;
+
+@Api(tags = "登录登出接口")
+@RequestMapping("/auth")
+@RestController
+public class LoginController {
+    @Autowired
+    IRedisService redisService;
+    @Autowired
+    UserService userService;
+    @Autowired
+    AuthorizationService authorizationService;
+    @Autowired
+    EnterpriseService enterpriseService;
+    @Value("${host}")
+    private String host;
+    /**
+     * login  produces = "application/json"
+     *
+     * @param jsonParam {"username":"用户名","password":"密码"}
+     * @return User
+     */
+    @PostMapping("/login")
+    @JsonParams
+    @ApiOperation(value = "管理端登录授权", notes = "登录授权接口,获取token")
+    public Msg login(@ApiParam(value = "username,password") @RequestParam String encryptStr) {
+        String jsonStr = new String(Base64.getDecoder().decode(encryptStr), StandardCharsets.UTF_8);
+        JSONObject jsonParam = JSON.parseObject(jsonStr);
+
+        String username = jsonParam.getString("username");
+        String password = jsonParam.getString("password");
+
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        try {
+            //query user
+            UserVo user = userService.selectUserVoByName(username);
+            if (null == user) {
+                msg.setCode("100");
+                msg.setMessage("用户不存在");
+                return msg;
+            }
+
+            if (user.getIssale() == 1) {
+                msg.setCode("100");
+                msg.setMessage("用户不存在");
+                return msg;
+            }
+
+            if (StringUtils.isNotBlank(user.getCompanynumber()) && enterpriseService.isLogOut(user.getCompanynumber())) {
+                msg.setCode("166");
+                msg.setMessage("用户已注销");
+                return msg;
+            }
+            // 疆外日期判断
+            Date now = new Date();
+            if (user.getDeadline() != null) {
+                if (user.getDeadline().before(now)){
+                    // 当前已经疆外用户已经超期使用 需要缴费
+                    msg.setCode("200");
+                    msg.setMessage("疆外用户已过期,请及时联系续期");
+                    msg.setResult(new SingletonMap<>("deadline",user.getDeadline()));
+                    return msg;
+                }
+
+            }
+
+
+            //Call login interface
+            String rs = HttpRequest.post( host + "/oauth/token")
+                    .setConnectionTimeout(10000)
+                    .setReadTimeout(10000)
+                    .header("Authorization", "Basic dWFhLXNlcnZpY2U6MTIzNDU2")
+                    .form(Dict.create()
+                            .set("username", username)
+                            .set("password", password)
+                            .set("grant_type", "password")
+                            .set("auth_type", "")
+                    ).execute().body();
+            Map map = JSON.parseObject(rs, Map.class);
+            Object access_token = map.get("access_token");
+            //Verify that the access_token is empty
+            if (ObjectUtil.isNull(access_token)) {
+                msg.setCode("103");
+                msg.setMessage("密码不正确");
+                return msg;
+            }
+            user.setToken("Bearer "+access_token);
+            //add redis
+            String token_key = StrUtil.format(RedisKeyEnum.AUTH_TOKEN.getKey(), map.get("jti"));
+            redisService.set(token_key, user, 60L*60L*18L);
+
+            user.setTokenexpired(60L*60L*18L);
+            /** 登录成功刷新用户 */
+            List<OauthRole> roleByUser = userService.selectRoleByUser(1);
+            if (null != user.getType()&& user.getType() == 1){
+                OauthRole oauthRole = new OauthRole("","超级管理员","super_admin","");
+                roleByUser.add(oauthRole);
+                user.setRoles(roleByUser);
+            }else {
+                roleByUser = userService.selectRoleByUser(user.getId().intValue());
+                user.setRoles(roleByUser);
+            }
+            user.setPassword(null);
+            msg.setResult(user);
+        } catch (Exception e) {
+            e.printStackTrace();
+            msg.setCode("102");
+            msg.setMessage("登录失败请稍后重试");
+        }
+        return msg;
+    }
+
+    @PostMapping("/salelogin")
+    @ApiOperation(value = "销售端登录授权", notes = "登录授权接口,获取token")
+    public Msg Salelogin(@ApiParam(value = "username,password") @RequestBody JSONObject jsonParam) {
+        String username = jsonParam.getString("username");
+        String password = jsonParam.getString("password");
+
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        try {
+            //query user
+            UserVo user = userService.selectUserVoByName(username);
+            if (null == user) {
+                msg.setCode("100");
+                msg.setMessage("用户不存在");
+                return msg;
+            }
+
+            if (user.getIssale() == 0) {
+                msg.setCode("100");
+                msg.setMessage("用户不存在");
+                return msg;
+            }
+
+            if (user.getStatus()!=null && user.getStatus() != 1){
+                msg.setCode("100");
+                msg.setMessage("用户已失效");
+                return msg;
+            }
+
+            if (user.getExpiredate() != null && user.getExpiredate().getTime() < System.currentTimeMillis()){
+                msg.setCode("100");
+                msg.setMessage("用户已失效");
+                return msg;
+            }
+
+            // 疆外日期判断
+            Date now = new Date();
+            if (user.getDeadline() != null) {
+                if (user.getDeadline().before(now)) {
+                    // 当前已经疆外用户已经超期使用 需要缴费
+                    msg.setCode("166");
+                    msg.setMessage("疆外用户已过期,请及时联系续期");
+                    return msg;
+                }
+
+            }
+            //Call login interface
+            String rs = HttpRequest.post( host + "/oauth/token")
+                    .setConnectionTimeout(10000)
+                    .setReadTimeout(10000)
+                    .header("Authorization", "Basic dWFhLXNlcnZpY2U6MTIzNDU2")
+                    .form(Dict.create()
+                            .set("username", username)
+                            .set("password", password)
+                            .set("grant_type", "password")
+                            .set("auth_type", "")
+                    ).execute().body();
+            Map map = JSON.parseObject(rs, Map.class);
+            Object access_token = map.get("access_token");
+            //Verify that the access_token is empty
+            if (ObjectUtil.isNull(access_token)) {
+                msg.setCode("103");
+                msg.setMessage("密码不正确");
+                return msg;
+            }
+            user.setToken("Bearer "+access_token);
+            //add redis
+            String token_key = StrUtil.format(RedisKeyEnum.AUTH_TOKEN.getKey(), map.get("jti"));
+            redisService.set(token_key, user, 60L*60L*18L);
+            user.setTokenexpired(60L*60L*18L);
+            user.setPassword(null);
+            msg.setResult(user);
+        } catch (Exception e) {
+            msg.setCode("102");
+            msg.setMessage("登录失败请稍后重试");
+        }
+        return msg;
+    }
+
+    @GetMapping("/verify")
+    @ApiOperation(value = "登录验证", notes = "登录验证:flag【true 成功】,【false 失败】", response = Msg.class)
+    public Msg verifyLogin(@ApiIgnore HttpServletRequest request) {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        UserVo userVo = new UserVo();
+        String token = request.getHeader(HttpHeaders.AUTHORIZATION);
+        //解析token
+        Claims claims = CommonUtil.parseJWT(token);
+        if (null != claims){
+            String tokenKey = StrUtil.format(RedisKeyEnum.AUTH_TOKEN.getKey(), claims.getId());
+            Object userInfo = redisService.get(tokenKey);
+            if (null != userInfo){
+                Map map = JSON.parseObject(userInfo.toString(), Map.class);
+
+                userVo = userService.selectUserVoByName(map.get("username").toString());
+                if (null == userVo) {
+                    msg.setCode("100");
+                    msg.setMessage("用户不存在");
+                    return msg;
+                }
+
+                if (userVo.getIssale() == 1){
+                    if (userVo.getStatus()!=null && userVo.getStatus() != 1){
+                        msg.setCode("100");
+                        msg.setMessage("用户已失效");
+                        return msg;
+                    }
+
+                    if (userVo.getExpiredate() != null && userVo.getExpiredate().getTime() < System.currentTimeMillis()){
+                        msg.setCode("100");
+                        msg.setMessage("用户已失效");
+                        return msg;
+                    }
+
+                    Object loginObj =  map.get("logintime");
+                    Object authObj =  map.get("auth");
+                    if (loginObj != null && authObj != null){
+                        //通过auth查询授权码最后登录时间
+                        AuthorizationInfo authInfo = authorizationService.selectByUser(userVo.getCompanynumber(),authObj.toString());
+                        if (authInfo == null){
+                            msg.setCode("100");
+                            msg.setMessage("授权码无效");
+                            return msg;
+                        }
+
+                        if (authInfo.getLasttime().getTime() > Long.parseLong(loginObj.toString())){
+                            redisService.set(tokenKey, userInfo, 0L);
+                            msg.setCode("100");
+                            msg.setMessage("登录失效,请重新登录");
+                            return msg;
+                        }
+                    }
+                    userVo.setAuth(map.get("auth").toString());
+                }
+                else {
+                    /** 登录成功刷新用户 */
+                    List<OauthRole> roleByUser = userService.selectRoleByUser(1);
+                    if (null != userVo.getType()&& userVo.getType() == 1){
+                        OauthRole oauthRole = new OauthRole("","超级管理员","super_admin","");
+                        roleByUser.add(oauthRole);
+                        userVo.setRoles(roleByUser);
+                    }else {
+                        roleByUser = userService.selectRoleByUser(userVo.getId().intValue());
+                        userVo.setRoles(roleByUser);
+                    }
+                }
+                userVo.setToken(map.get("token").toString());
+                userVo.setTokenexpired(60L*60L*18L);
+                userVo.setPassword(null);
+                //更新登录超时时间
+                redisService.set(tokenKey, userInfo, 60L*60L*18L);
+            }else {
+                msg.setCode("100");
+                msg.setMessage("登录失效,请重新登录");
+                return msg;
+            }
+        }
+        msg.setResult(userVo);
+        return msg;
+    }
+
+    /**
+     * logout
+     *
+     * @return
+     */
+    @PostMapping("/logout")
+    @ApiOperation(value = "退出登录", notes = "退出登录接口", produces = "application/json", response = Msg.class)
+    public Msg logout(@ApiIgnore HttpServletRequest request) {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        /** 解析token */
+        String header = request.getHeader(HttpHeaders.AUTHORIZATION);
+        if (header != null && !header.equals("undefined")) {
+            Claims claims = CommonUtil.parseJWT(header);
+            Optional.ofNullable(claims).ifPresent(cl -> {
+                String token_key = "auth:token:" + cl.getId();
+                redisService.remove(token_key);
+            });
+        }
+        return msg;
+    }
+
+    @PostMapping("/saleauthlogin")
+    @JsonParams
+    @ApiOperation(value = "销售端授权码登录授权", notes = "登录授权接口,获取token")
+    public Msg SaleAuthlogin(@ApiParam(value = "username,password,authcode") @RequestParam String encryptStr) {
+//        System.out.println("BASE64明文: "+encryptStr);
+        String jsonStr = new String(Base64.getDecoder().decode(encryptStr), StandardCharsets.UTF_8);
+//        System.out.println("解密后参数: "+jsonStr);
+        JSONObject jsonParam = JSON.parseObject(jsonStr);
+        String username = jsonParam.getString("username");
+        String password = jsonParam.getString("password");
+        String auth = jsonParam.getString("authcode");
+
+//        System.out.println("name: "+username+" ,pwd: "+password+" ,auth:"+auth);
+
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        try {
+            //query user
+            UserVo user = userService.selectUserVoByName(username);
+            if (null == user) {
+                msg.setCode("100");
+                msg.setMessage("用户不存在");
+                return msg;
+            }
+
+            if (user.getIssale() == 0) {
+                msg.setCode("100");
+                msg.setMessage("用户不存在");
+                return msg;
+            }
+
+            if (user.getStatus()!=null && user.getStatus() != 1){
+                msg.setCode("100");
+                msg.setMessage("用户已失效");
+                return msg;
+            }
+
+            if (user.getExpiredate() == null ||(user.getExpiredate() != null && user.getExpiredate().getTime() < System.currentTimeMillis())){
+                msg.setCode("100");
+                msg.setMessage("用户已失效");
+                return msg;
+            }
+
+            // 疆外日期判断
+            Date now = new Date();
+            if (user.getDeadline() != null) {
+                if (user.getDeadline().before(now)) {
+                    // 当前已经疆外用户已经超期使用 需要缴费
+                    msg.setCode("166");
+                    msg.setMessage("疆外用户已过期,请及时联系续期");
+                    return msg;
+                }
+
+            }
+
+            //验证auth是否存在
+            AuthorizationInfo authInfo = authorizationService.selectByUser(user.getCompanynumber(),auth);
+            if (authInfo == null){
+                msg.setCode("100");
+                msg.setMessage("授权码无效");
+                return msg;
+            }
+
+            Date logintime = new Date();
+            //Call login interface
+            String rs = HttpRequest.post( host + "/oauth/token")
+                    .setConnectionTimeout(10000)
+                    .setReadTimeout(10000)
+                    .header("Authorization", "Basic dWFhLXNlcnZpY2U6MTIzNDU2")
+                    .form(Dict.create()
+                            .set("username", username)
+                            .set("password", password)
+                            .set("auth", auth)
+                            .set("grant_type", "password")
+                            .set("auth_type", "")
+                    )
+                    .execute()
+                    .body();
+            Map map = JSON.parseObject(rs, Map.class);
+            Object access_token = map.get("access_token");
+            //Verify that the access_token is empty
+            if (ObjectUtil.isNull(access_token)) {
+                msg.setCode("103");
+                msg.setMessage("密码不正确");
+                return msg;
+            }
+            user.setToken("Bearer "+access_token);
+            user.setAuth(auth);
+            user.setLogintime(logintime.getTime());
+            //add redis
+            String token_key = StrUtil.format(RedisKeyEnum.AUTH_TOKEN.getKey(), map.get("jti"));
+            redisService.set(token_key, user, 60L*60L*18L);
+            user.setTokenexpired(60L*60L*18L);
+            user.setPassword(null);
+            msg.setResult(user);
+
+            //更新auth最后登录时间
+            authInfo.setLasttime(logintime);
+            authorizationService.updateById(authInfo);
+        } catch (Exception e) {
+            msg.setCode("102");
+            msg.setMessage("登录失败请稍后重试");
+        }
+        return msg;
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Controller/PatrolController.java b/src/main/java/com/gk/firework/Controller/PatrolController.java
new file mode 100644
index 0000000..11aaff0
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/PatrolController.java
@@ -0,0 +1,593 @@
+package com.gk.firework.Controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.gk.firework.Controller.Base.BaseController;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.Utils.*;
+import com.gk.firework.Domain.Vo.EnterpriseVo;
+import com.gk.firework.Domain.Vo.PatrolOrderVo;
+import com.gk.firework.Service.*;
+import com.sun.org.apache.xpath.internal.operations.Bool;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+
+
+@Api(tags = "安全巡检接口")
+@RestController
+public class PatrolController extends BaseController{
+    @Value("${patrolPath}")
+    private String patrolPath; //配置文件配置的物理保存地址
+    @Value("${patrolUrl}")
+    private String patrolUrl; //配置文件配置的url
+
+    @Autowired
+    PatrolOrderService patrolOrderService;
+    @Autowired
+    PatrolDetailService patrolDetailService;
+    @Autowired
+    SelfCheckService selfCheckService;
+    @Autowired
+    EnterpriseService enterpriseService;
+    @Autowired
+    UserService userService;
+    @Autowired
+    ExcelExportService excelExportService;
+
+    @GetMapping("/getEnterpriseVo")
+    @ApiOperation(value = "根据企业编号获取巡检企业信息",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "enterprisenumber",value = "单位编号"),
+    })
+    public Msg getEnterpriseVo(EnterpriseVo enterpriseVo){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        EnterpriseVo enterprise = enterpriseService.selctSimpleByNumber(enterpriseVo.getEnterprisenumber());
+        List<PatrolOrderVo> patrolOrderVos = patrolOrderService.selectListByEnterprise(enterprise.getEnterprisename(),getUser().getUsername());
+        enterprise.setPatrolOrderVos(patrolOrderVos);
+        if (enterprise != null) {
+            msg.setResult(enterprise);
+            return msg;
+        }else {
+            msg.setCode("999");
+            msg.setMessage("未找到该企业");
+            return msg;
+        }
+    }
+
+    @GetMapping("/getSelfCheck")
+    @ApiOperation(value = "根据企业类型获取检查内容",response = Msg.class)
+    public Msg getSelfCheck(SelfCheckInfo selfCheck){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        List<SelfCheckInfo> selfChecks = selfCheckService.selctByType(selfCheck.getType());
+        if (selfChecks.size() > 0) {
+            msg.setResult(selfChecks);
+            return msg;
+        }else {
+            msg.setCode("999");
+            msg.setMessage("未找到该检查内容");
+            return msg;
+        }
+    }
+
+    @ApiOperation(value = "上传图片",notes = "上传图片")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType="query",name = "files",value = "文件"),
+    })
+    @PostMapping("/uploadPic")
+    @ResponseBody
+    public Msg uploadPic(StandardMultipartHttpServletRequest req){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        MultiValueMap<String, MultipartFile> multipartFiles = req.getMultiFileMap();
+        MultipartFile  picFile = multipartFiles.get("files").get(0);
+        if (null == picFile){
+            msg.setCode("404");
+            msg.setMessage("上传文件为空");
+        }else {
+            try {
+                String picmame = UploadUtil.uploadFile(picFile,patrolPath);
+                msg.setResult(patrolUrl+picmame);
+            }catch (Exception e){
+                e.printStackTrace();
+                msg.setCode("500");
+                msg.setMessage("上传失败");
+            }
+        }
+        return msg;
+    }
+
+    @ApiOperation(value = "提交检查内容",notes = "提交检查内容")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "enterpriseId",value = "企业id"),
+            @ApiImplicitParam(name = "userId",value = "用户id"),
+            @ApiImplicitParam(name = "createdby",value = "用户名"),
+            @ApiImplicitParam(name = "checkcontent",value = "检查内容"),
+            @ApiImplicitParam(name = "content",value = "检查内容"),
+            @ApiImplicitParam(name = "standard",value = "参考判断"),
+            @ApiImplicitParam(name = "choose",value = "选项"),
+            @ApiImplicitParam(name = "reason",value = "理由"),
+            @ApiImplicitParam(name = "baforepath",value = "整改前图片"),
+            @ApiImplicitParam(name = "ismend",value = "是否整改"),
+    })
+    @PostMapping("/submitPatrol")
+    @ResponseBody
+    public Msg submitPatrol(@RequestBody JSONObject jsonObject){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        Long enterpriseId = jsonObject.getLong("enterpriseId");
+        Long userId = jsonObject.getLong("userId");
+        String createdby = jsonObject.getString("createdby");
+        JSONArray jsonArray = jsonObject.getJSONArray("checkcontent");
+
+        PatrolOrderInfo patrolOrderInfo = new PatrolOrderInfo();
+        patrolOrderInfo.setUserid(userId);
+        patrolOrderInfo.setCompanyid(enterpriseId);
+        patrolOrderInfo.setCreatedby(createdby);
+        patrolOrderInfo.setCreateddate(new Date());
+        patrolOrderInfo.setModifiedby(createdby);
+        patrolOrderInfo.setModifieddate(new Date());
+        patrolOrderService.save(patrolOrderInfo);
+
+        List<PatrolDetailInfo> patrolDetailInfoList = new ArrayList<>();
+        Byte ismend = 1;
+        for (int i = 0; i < jsonArray.size(); i++){
+            JSONObject patrolDetail = jsonArray.getJSONObject(i);
+            PatrolDetailInfo patrolDetailInfo = new PatrolDetailInfo();
+            patrolDetailInfo.setOrderid(patrolOrderInfo.getId());
+            patrolDetailInfo.setContent(patrolDetail.getString("content"));
+            patrolDetailInfo.setStandard(patrolDetail.getString("standard"));
+            patrolDetailInfo.setChoose(patrolDetail.getString("choose"));
+            patrolDetailInfo.setReason(patrolDetail.getString("reason"));
+            patrolDetailInfo.setBeforepath(patrolDetail.getString("baforepath"));
+            patrolDetailInfo.setIsmend(patrolDetail.getByte("ismend"));
+            patrolDetailInfo.setCreatedby(createdby);
+            patrolDetailInfo.setCreateddate(new Date());
+            patrolDetailInfo.setModifiedby(createdby);
+            patrolDetailInfo.setModifieddate(new Date());
+            if (patrolDetailInfo.getIsmend() == 0){
+                ismend = 0;
+            }
+            patrolDetailInfoList.add(patrolDetailInfo);
+        }
+        patrolDetailService.saveBatch(patrolDetailInfoList);
+        patrolOrderInfo.setIsmend(ismend);
+        patrolOrderService.updateById(patrolOrderInfo);
+
+        return msg;
+    }
+
+    @GetMapping("/selfCheck")
+    @ApiOperation(value = "获取自定义检查内容",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码"),
+            @ApiImplicitParam(name = "pageSize",value = "每页行数"),
+            @ApiImplicitParam(name = "sort",value = "排序规则"),
+            @ApiImplicitParam(name = "order",value = "排序字段"),
+            @ApiImplicitParam(name = "type",value = "检查类型"),
+            @ApiImplicitParam(name = "content",value = "检查内容"),
+    })
+    public Msg getSelfCheckList(@RequestParam(defaultValue = "0") Integer pageIndex, @RequestParam(defaultValue = "10") Integer pageSize, String sort, String order,
+                            String type, String content){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        HashMap<String, Object> condition = new HashMap<String, Object>();
+
+        if (StringUtils.isNotBlank(type)) {
+            condition.put("type", type.trim());
+        }
+
+        if (StringUtils.isNotBlank(content)) {
+            condition.put("content", content.trim());
+        }
+
+        pageInfo.setCondition(condition);
+        selfCheckService.selectDataGrid(pageInfo);
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    @PostMapping("/selfCheck")
+    @ApiOperation(value = "添加自定义检查内容",response = Msg.class)
+    public Msg addSelfCheckList(@RequestBody SelfCheckInfo selfCheckInfo){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        if (StringUtils.isBlank(selfCheckInfo.getType())){
+            msg.setCode("999");
+            msg.setMessage("检查类型不能为空");
+            return msg;
+        }else if (StringUtils.isBlank(selfCheckInfo.getContent())){
+            msg.setCode("999");
+            msg.setMessage("检查内容不能为空");
+            return msg;
+        }else if (StringUtils.isBlank(selfCheckInfo.getStandard())){
+            msg.setCode("999");
+            msg.setMessage("参考判断不能为空");
+            return msg;
+        }
+        selfCheckInfo.setCreatedby(getUser().getUsername());
+        selfCheckInfo.setModifiedby(getUser().getUsername());
+        selfCheckInfo.setCreateddate(new Date());
+        selfCheckInfo.setModifieddate(new Date());
+        selfCheckInfo.setIsdel((byte)0);
+        selfCheckService.save(selfCheckInfo);
+        return msg;
+    }
+
+    @PostMapping("/putselfCheck")
+    @ApiOperation(value = "修改自定义检查内容",response = Msg.class)
+    public Msg editSelfCheckList(@RequestBody SelfCheckInfo selfCheckInfo){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        if (StringUtils.isBlank(selfCheckInfo.getType())){
+            msg.setCode("999");
+            msg.setMessage("检查类型不能为空");
+            return msg;
+        }else if (StringUtils.isBlank(selfCheckInfo.getContent())){
+            msg.setCode("999");
+            msg.setMessage("检查内容不能为空");
+            return msg;
+        }else if (StringUtils.isBlank(selfCheckInfo.getStandard())){
+            msg.setCode("999");
+            msg.setMessage("参考判断不能为空");
+            return msg;
+        }
+        selfCheckInfo.setModifiedby(getUser().getUsername());
+        selfCheckInfo.setModifieddate(new Date());
+        selfCheckService.updateById(selfCheckInfo);
+        return msg;
+    }
+
+    @PostMapping("/delselfCheck")
+    @ApiOperation(value = "删除自定义检查内容",response = Msg.class)
+    public Msg delSelfCheckList(@RequestBody JSONObject jsonObject){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        Long id = jsonObject.getLong("id");
+        SelfCheckInfo selfCheckInfo = selfCheckService.getById(id);
+        if (selfCheckInfo != null){
+            selfCheckInfo.setIsdel((byte)1);
+            selfCheckInfo.setModifiedby(getUser().getUsername());
+            selfCheckInfo.setModifieddate(new Date());
+            selfCheckService.updateById(selfCheckInfo);
+            return msg;
+        }else {
+            msg.setCode("999");
+            msg.setMessage("未找到检查内容");
+            return msg;
+        }
+    }
+
+    @PostMapping("/selfChecks")
+    @ApiOperation(value = "删除自定义检查内容",response = Msg.class)
+    public Msg bashDelSelfCheckList(@RequestBody JSONObject jsonObject){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        JSONArray ids = jsonObject.getJSONArray("ids");
+        List<Long> idList = ids.toJavaList(Long.class);
+        List<SelfCheckInfo> selfCheckInfoList = selfCheckService.selectByIds(idList);
+        if (selfCheckInfoList != null && selfCheckInfoList.size() > 0){
+            for (SelfCheckInfo selfCheckInfo : selfCheckInfoList) {
+                selfCheckInfo.setIsdel((byte)1);
+                selfCheckInfo.setModifiedby(getUser().getUsername());
+                selfCheckInfo.setModifieddate(new Date());
+                selfCheckService.updateById(selfCheckInfo);
+            }
+            return msg;
+        }else {
+            msg.setCode("999");
+            msg.setMessage("未找到检查内容");
+            return msg;
+        }
+    }
+
+    @PostMapping("/importSelfCheck")
+    @ApiOperation(value = "导入自定义检查内容",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "file",value = "文件",required = true),
+    })
+    public Msg addSelfCheckList(MultipartFile file){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        String filesave ="";
+        try {
+            SimpleDateFormat sdf = new SimpleDateFormat( "yyyyMMddHHmmssSSS" );
+            if (file == null)
+            {
+                msg.setCode("404");
+                msg.setMessage("未找到上传文件");
+                return msg;
+            }
+
+            long size = file.getSize();
+            if(0 == size)
+            {
+                msg.setCode("404");
+                msg.setMessage("上传文件大小为空");
+                return msg;
+            }
+
+            if(!FileOptUtils.isDirExists(patrolPath)){
+                msg.setCode("500");
+                msg.setMessage("发生错误或不为目录");
+                return msg;
+            }
+
+            filesave = patrolPath + getUser().getUsername() + "_" + sdf.format(new Date()) +".xlsx";
+
+            file.transferTo(new File(filesave));
+            InputStream in = new FileInputStream(filesave);
+            String name = file.getOriginalFilename();
+            Boolean isExcel2007 = name.substring(name.lastIndexOf(".") + 1).endsWith("xlsx")? true:false;
+            BooleanReason blret = excelExportService.imporSelfCheckExcel(in,getUser().getUsername(),isExcel2007);
+            if(blret.getValue().equals(false))
+            {
+                msg.setCode("500");
+                msg.setMessage(blret.getResultmsg());
+                return msg;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            msg.setCode("500");
+            msg.setMessage("导入发生错误");
+            return msg;
+        }
+
+        return msg;
+    }
+
+    @GetMapping("/patrolOrder")
+    @ApiOperation(value = "获取安全巡检记录",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码"),
+            @ApiImplicitParam(name = "pageSize",value = "每页行数"),
+            @ApiImplicitParam(name = "sort",value = "排序规则"),
+            @ApiImplicitParam(name = "order",value = "排序字段"),
+
+            @ApiImplicitParam(name = "starttime",value = "开始时间"),
+            @ApiImplicitParam(name = "endtime",value = "结束时间"),
+            @ApiImplicitParam(name = "enterprisetype",value = "企业类型"),
+            @ApiImplicitParam(name = "enterprisename",value = "企业名称"),
+            @ApiImplicitParam(name = "checkname",value = "检查人"),
+
+            @ApiImplicitParam(name = "ismend",value = "是否整改"),
+            @ApiImplicitParam(name = "province",value = "省份"),
+            @ApiImplicitParam(name = "city",value = "城市"),
+            @ApiImplicitParam(name = "area",value = "区县"),
+            @ApiImplicitParam(name = "town",value = "乡镇"),
+            @ApiImplicitParam(name = "community",value = "社区"),
+    })
+    public Msg getPatrolOrderList(@RequestParam(defaultValue = "0") Integer pageIndex, @RequestParam(defaultValue = "10") Integer pageSize, String sort, String order,
+                                String starttime, String endtime, String enterprisename, String checkname, String enterprisetype,
+                                  String province, String city, String area, String town, String community, Byte ismend){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        HashMap<String, Object> condition = new HashMap<String, Object>();
+
+        if (StringUtils.isNotBlank(starttime)) {
+            condition.put("starttime", starttime.trim());
+        }
+
+        if (StringUtils.isNotBlank(endtime)) {
+            condition.put("endtime", endtime.trim());
+        }
+
+        if (StringUtils.isNotBlank(enterprisename)) {
+            condition.put("enterprisename", enterprisename.trim());
+        }
+
+        if (StringUtils.isNotBlank(checkname)) {
+            condition.put("checkname", checkname.trim());
+        }
+
+        if (StringUtils.isNotBlank(enterprisetype)) {
+            condition.put("enterprisetype", enterprisetype.trim());
+        }
+
+        if (ismend != null){
+            condition.put("ismend",ismend);
+        }
+
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (userInfo.getCompanyid() != null){
+            Enterprise enterprise = enterpriseService.getById(userInfo.getCompanyid());
+            condition.put("enterprisename", enterprise.getEnterprisename());
+        }else if (userInfo.getType() == 3){
+            condition.put("province",userInfo.getProvince());
+            condition.put("city",userInfo.getCity());
+            condition.put("area",userInfo.getArea());
+            condition.put("town",userInfo.getTown());
+            condition.put("community",userInfo.getCommunity());
+        }
+
+        if (StringUtils.isNotBlank(province) && condition.get("province") == null) {
+            condition.put("province", province.trim());
+            if (StringUtils.isNotBlank(city)) {
+                condition.put("city", city.trim());
+            }
+
+            if (StringUtils.isNotBlank(area)) {
+                condition.put("area", area.trim());
+            }
+
+            if (StringUtils.isNotBlank(town)) {
+                condition.put("town", town.trim());
+            }
+
+            if (StringUtils.isNotBlank(community)) {
+                condition.put("community", community.trim());
+            }
+        }
+
+        pageInfo.setCondition(condition);
+
+        patrolOrderService.selectDataGrid(pageInfo);
+
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    @GetMapping("/patrolDetail")
+    @ApiOperation(value = "获取安全巡检明细",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码"),
+            @ApiImplicitParam(name = "pageSize",value = "每页行数"),
+            @ApiImplicitParam(name = "sort",value = "排序规则"),
+            @ApiImplicitParam(name = "order",value = "排序字段"),
+            @ApiImplicitParam(name = "orderid",value = "订单id"),
+            @ApiImplicitParam(name = "ismend",value = "是否整改"),
+    })
+    public Msg getpatrolDetailList(@RequestParam(defaultValue = "0") Integer pageIndex, @RequestParam(defaultValue = "10") Integer pageSize, String sort, String order,
+                                  Long orderid, Byte ismend){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        HashMap<String, Object> condition = new HashMap<String, Object>();
+
+        if (orderid != null) {
+            condition.put("orderid", orderid);
+        }
+
+        if (ismend != null) {
+            condition.put("ismend", ismend);
+        }
+
+        pageInfo.setCondition(condition);
+
+        patrolDetailService.selectDataGrid(pageInfo);
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    @PostMapping("/mendPatrol")
+    @ApiOperation(value = "上报整改",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id",value = "单据id"),
+            @ApiImplicitParam(name = "file",value = "整改后图片文件"),
+            @ApiImplicitParam(name = "ismend",value = "是否整改"),
+    })
+    public Msg mendPatrol(Long id, MultipartFile file, Byte ismend) throws Exception {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        if (id == null){
+            msg.setCode("999");
+            msg.setMessage("单据id不能为空");
+            return msg;
+        }
+        PatrolDetailInfo patrolDetailInfo = patrolDetailService.getById(id);
+        if (patrolDetailInfo == null){
+            msg.setCode("999");
+            msg.setMessage("未找到单据");
+            return msg;
+        }
+        if (file != null){
+            String origincontract = UploadUtil.uploadFile(file,patrolPath);
+            patrolDetailInfo.setAfterpath(patrolUrl+origincontract);
+        }
+        if (ismend != null){
+            patrolDetailInfo.setIsmend(ismend);
+        }
+        patrolDetailService.updateById(patrolDetailInfo);
+
+        //查看所有detail 全为已整改 则修改order为已整改
+        int isNotMend = patrolDetailService.selectIsNotMend(patrolDetailInfo.getOrderid());
+        if (isNotMend == 0){
+            PatrolOrderInfo patrolOrderInfo = patrolOrderService.getById(patrolDetailInfo.getOrderid());
+            if (patrolOrderInfo != null){
+                patrolOrderInfo.setIsmend((byte)1);
+                patrolOrderService.updateById(patrolOrderInfo);
+            }
+        }
+
+        return msg;
+    }
+
+    @PostMapping("/appMendPatrol")
+    @ApiOperation(value = "APP上报整改",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id",value = "单据id"),
+            @ApiImplicitParam(name = "afterpath",value = "整改后图片文件"),
+            @ApiImplicitParam(name = "ismend",value = "是否整改"),
+    })
+    public Msg mendPatrol(Long id, String afterpath, Byte ismend) throws Exception {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        if (id == null){
+            msg.setCode("999");
+            msg.setMessage("单据id不能为空");
+            return msg;
+        }
+        PatrolDetailInfo patrolDetailInfo = patrolDetailService.getById(id);
+        if (patrolDetailInfo == null){
+            msg.setCode("999");
+            msg.setMessage("未找到单据");
+            return msg;
+        }
+
+        patrolDetailInfo.setAfterpath(afterpath);
+
+        if (ismend != null){
+            patrolDetailInfo.setIsmend(ismend);
+        }
+        patrolDetailService.updateById(patrolDetailInfo);
+
+        //查看所有detail 全为已整改 则修改order为已整改
+        int isNotMend = patrolDetailService.selectIsNotMend(patrolDetailInfo.getOrderid());
+        if (isNotMend == 0){
+            PatrolOrderInfo patrolOrderInfo = patrolOrderService.getById(patrolDetailInfo.getOrderid());
+            if (patrolOrderInfo != null){
+                patrolOrderInfo.setIsmend((byte)1);
+                patrolOrderService.updateById(patrolOrderInfo);
+            }
+        }
+
+        return msg;
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Controller/PermissionController.java b/src/main/java/com/gk/firework/Controller/PermissionController.java
new file mode 100644
index 0000000..340adc2
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/PermissionController.java
@@ -0,0 +1,147 @@
+package com.gk.firework.Controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.gk.firework.Domain.PermissionInfo;
+import com.gk.firework.Domain.Utils.Msg;
+import com.gk.firework.Domain.Vo.Menu;
+import com.gk.firework.Service.PermissionService;
+import io.swagger.annotations.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Date;
+import java.util.List;
+
+@Api(tags = "菜单接口")
+@RestController
+public class PermissionController {
+    @Autowired
+    PermissionService permissionService;
+
+    @GetMapping("/permissions")
+    @ApiOperation(value = "获取菜单数据", notes = "获取菜单数据", response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType="query",name = "userId",value = "用户id",required = true)})
+    public Msg getPermission(@RequestParam String userId){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        List<Menu> menus = permissionService.selectByUserId(userId);
+        msg.setResult(menus);
+
+        return msg;
+    }
+
+    @PostMapping("/addpermissions")
+    @ApiOperation(value = "添加菜单", notes = "添加菜单", response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType="query",name = "component",value = "接口路径"),
+            @ApiImplicitParam(paramType="query",name = "icon",value = "图标"),
+            @ApiImplicitParam(paramType="query",name = "level",value = "第几级菜单",required = true),
+            @ApiImplicitParam(paramType="query",name = "name",value = "名称",required = true),
+            @ApiImplicitParam(paramType="query",name = "parentidId",value = "父级id"),
+            @ApiImplicitParam(paramType="query",name = "path",value = "路径"),
+            @ApiImplicitParam(paramType="query",name = "sortorder",value = "排序",required = true),
+            @ApiImplicitParam(paramType="query",name = "status",value = "状态",required = true),
+            @ApiImplicitParam(paramType="query",name = "title",value = "标题"),
+            @ApiImplicitParam(paramType="query",name = "type",value = "类型",required = true),
+            @ApiImplicitParam(paramType="query",name = "operator",value = "操作人"),
+
+    })
+    public Msg addPermission(@ApiParam(value = "component,icon,level,name,parentidId,path,sortorder,status,title,type,operator")
+            @RequestBody JSONObject jsonObject){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        PermissionInfo permissionInfo = new PermissionInfo();
+        permissionInfo.setName(jsonObject.getString("name"));
+        permissionInfo.setLevel(jsonObject.getInteger("level"));
+        permissionInfo.setTitle(jsonObject.getString("title"));
+        permissionInfo.setPath(jsonObject.getString("path"));
+        permissionInfo.setComponent(jsonObject.getString("component"));
+        permissionInfo.setIcon(jsonObject.getString("icon"));
+        permissionInfo.setStatus(jsonObject.getInteger("status"));
+        permissionInfo.setSortorder(jsonObject.getDouble("sortorder"));
+        permissionInfo.setType(jsonObject.getInteger("type"));
+        permissionInfo.setExpand(true);
+        permissionInfo.setChecked(false);
+        permissionInfo.setSelected(false);
+        permissionInfo.setCreatedby(jsonObject.getString("operator"));
+        permissionInfo.setCreateddate(new Date());
+        permissionInfo.setLastmodifiedby(jsonObject.getString("operator"));
+        permissionInfo.setLastmodifieddate(new Date());
+        permissionInfo.setParentid(jsonObject.getInteger("parentid"));
+
+        if (permissionInfo.getParentid() != null) {
+            PermissionInfo parentPermission = permissionService.getById(permissionInfo.getParentid());
+            permissionInfo.setLevel(parentPermission.getLevel()+1);
+        }
+
+        permissionService.save(permissionInfo);
+        return msg;
+    }
+
+    @PostMapping("/putpermissions")
+    @ApiOperation(value = "修改菜单", notes = "修改菜单", response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType="query",name = "id",value = "id",required = true),
+            @ApiImplicitParam(paramType="body",name = "component",value = "接口路径"),
+            @ApiImplicitParam(paramType="body",name = "icon",value = "图标"),
+            @ApiImplicitParam(paramType="body",name = "level",value = "第几级菜单",required = true),
+            @ApiImplicitParam(paramType="body",name = "name",value = "名称",required = true),
+            @ApiImplicitParam(paramType="body",name = "parentidId",value = "父级id"),
+            @ApiImplicitParam(paramType="body",name = "path",value = "路径"),
+            @ApiImplicitParam(paramType="body",name = "sortorder",value = "排序",required = true),
+            @ApiImplicitParam(paramType="body",name = "status",value = "状态",required = true),
+            @ApiImplicitParam(paramType="body",name = "title",value = "标题"),
+            @ApiImplicitParam(paramType="body",name = "type",value = "类型",required = true),
+            @ApiImplicitParam(paramType="body",name = "operator",value = "操作人"),
+
+    })
+    public Msg editPermission(@ApiParam(value = "component,icon,level,name,parentidId,path,sortorder,status,title,type,operator")
+                             @RequestBody JSONObject jsonObject){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        PermissionInfo permissionInfo = new PermissionInfo();
+        permissionInfo.setId(jsonObject.getInteger("id"));
+        permissionInfo.setName(jsonObject.getString("name"));
+        permissionInfo.setLevel(jsonObject.getInteger("level"));
+        permissionInfo.setTitle(jsonObject.getString("title"));
+        permissionInfo.setPath(jsonObject.getString("path"));
+        permissionInfo.setComponent(jsonObject.getString("component"));
+        permissionInfo.setIcon(jsonObject.getString("icon"));
+        permissionInfo.setStatus(jsonObject.getInteger("status"));
+        permissionInfo.setSortorder(jsonObject.getDouble("sortorder"));
+        permissionInfo.setType(jsonObject.getInteger("type"));
+        permissionInfo.setExpand(true);
+        permissionInfo.setChecked(false);
+        permissionInfo.setSelected(false);
+        permissionInfo.setCreatedby(jsonObject.getString("operator"));
+        permissionInfo.setLastmodifiedby(jsonObject.getString("operator"));
+        permissionInfo.setLastmodifieddate(new Date());
+        permissionInfo.setParentid(jsonObject.getInteger("parentid"));
+        permissionService.updateById(permissionInfo);
+        return msg;
+    }
+
+    @PostMapping("/delpermissions")
+    @ApiOperation(value = "删除菜单", notes = "删除菜单", response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType="query",name = "id",value = "id",required = true),
+            @ApiImplicitParam(paramType="body",name = "operator",value = "操作人"),
+
+    })
+    public Msg delPermission(@ApiParam(value = "id,operator")
+                              @RequestBody JSONObject jsonObject){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        PermissionInfo permissionInfo = permissionService.getById(jsonObject.getInteger("id"));
+        permissionInfo.setStatus(0);
+        permissionService.updateById(permissionInfo);
+        return msg;
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Controller/ProductController.java b/src/main/java/com/gk/firework/Controller/ProductController.java
new file mode 100644
index 0000000..e87648d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/ProductController.java
@@ -0,0 +1,879 @@
+package com.gk.firework.Controller;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.gk.firework.Controller.Base.BaseController;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.Enum.Element;
+import com.gk.firework.Domain.Enum.EnterpriseSafetySupervision;
+import com.gk.firework.Domain.Enum.ErrorCode;
+import com.gk.firework.Domain.Utils.*;
+import com.gk.firework.Domain.Vo.DirectionDetail;
+import com.gk.firework.Domain.Vo.FireworkDeal;
+import com.gk.firework.Domain.Vo.ProductThresholdVo;
+import com.gk.firework.Domain.Vo.ProductVo;
+import com.gk.firework.Service.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.FieldError;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @author jingjy
+ */
+@Api(tags = "产品信息接口")
+@RequestMapping("/product")
+@RestController
+public class ProductController extends BaseController {
+    @Value("${productPath}")
+    private String productPath; //配置文件配置的物理保存地址
+    private ProductService productService;
+    private StockService stockService;
+    private UserService userService;
+    private EnterpriseService enterpriseService;
+    private ProductThresholdService productThresholdService;
+    private ProductCategoryService productCategoryService;
+    private ProductPriceService productPriceService;
+    private ExcelExportService excelExportService;
+
+    private static final Byte ADD_OPTION = 1;
+    private static final Byte EDIT_OPTION = 2;
+    private static final Byte DEL_OPTION = 3;
+    @Autowired
+    public ProductController(ProductService productService,StockService stockService, UserService userService,
+                             EnterpriseService enterpriseService,ProductThresholdService productThresholdService,
+                             ProductCategoryService productCategoryService,ProductPriceService productPriceService,
+                             ExcelExportService excelExportService ) {
+        this.productService = productService;
+        this.stockService = stockService;
+        this.userService = userService;
+        this.enterpriseService = enterpriseService;
+        this.productThresholdService = productThresholdService;
+        this.productCategoryService = productCategoryService;
+        this.productPriceService = productPriceService;
+        this.excelExportService = excelExportService;
+    }
+
+    /**
+     * 查询全部的产品信息
+     *
+     * @param name          产品名;
+     * @param directionCode :流向码(十位);
+     * @param manufacturer  :生产厂家
+     * @return List<ProductInfo> 产品信息的集合
+     */
+    @GetMapping("/info")
+    public Msg getProductInfo(@RequestParam(value = "name", required = false) String name,
+                              @RequestParam(value = "directionCode", required = false) String directionCode,
+                              @RequestParam(value = "manufacturer", required = false) String manufacturer,
+                              @RequestParam(value = "type", required = false) String type,
+                              @RequestParam(value = "secondaryType", required = false) String secondaryType,
+                              @RequestParam(value = "isOld", required = false) String isOld,
+                              @RequestParam(defaultValue = "0") Integer pageIndex,
+                              @RequestParam(defaultValue = "10") Integer pageSize,
+                              String sort, String order) {
+        Msg msg = new Msg(true);
+
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        Map<String, Object> condition = new HashMap<>(4);
+        if (StringUtils.isNotBlank(name)) {
+            condition.put("name", name);
+        }
+        if (StringUtils.isNotBlank(directionCode)) {
+            condition.put("directionCode", directionCode);
+        }
+        if (StringUtils.isNotBlank(manufacturer)) {
+            condition.put("manufacturer", manufacturer);
+        }
+        if (StringUtils.isNotBlank(type)) {
+            condition.put("type", type);
+        }
+        if (StringUtils.isNotBlank(secondaryType)) {
+            condition.put("secondaryType", secondaryType);
+        }
+        if (StringUtils.isNotBlank(isOld)) {
+            condition.put("isOld", isOld);
+        }
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (userInfo.getCompanyid() != null){
+            Enterprise enterprise = enterpriseService.getById(userInfo.getCompanyid());
+            if (enterprise.getSafetysupervision().equals(EnterpriseSafetySupervision.PRODUCE.getMsg())){
+                condition.put("manufacturer", enterprise.getEnterprisename());
+            }else {
+                condition.put("companynumber", enterprise.getEnterprisenumber());
+            }
+        }
+
+        pageInfo.setCondition(condition);
+        productService.selectDataGrid(pageInfo);
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    /**
+     * 查询全部的产品信息编码
+     *
+     * @return List<String> 产品编码的集合
+     */
+    @GetMapping("/codes")
+    public Msg getProductCodes(){
+        List<String>list = productService.getAllProductCodes();
+        return success(list);
+    }
+
+    /**
+     * 查询全部的产品信息
+     *
+     * @param name          产品名;
+     * @param directionCode :流向码(十位);
+     * @param manufacturer  :生产厂家
+     * @return List<ProductInfo> 产品信息的集合
+     */
+    @GetMapping("/exportInfo")
+    public Msg exportProduct(@RequestParam(value = "name", required = false) String name,
+                              @RequestParam(value = "directionCode", required = false) String directionCode,
+                              @RequestParam(value = "manufacturer", required = false) String manufacturer,
+                              @RequestParam(value = "type", required = false) String type,
+                              @RequestParam(value = "secondaryType", required = false) String secondaryType) {
+        Msg msg = new Msg(true);
+        Map<String, Object> condition = new HashMap<>(4);
+        if (StringUtils.isNotBlank(name)) {
+            condition.put("name", name);
+        }
+        if (StringUtils.isNotBlank(directionCode)) {
+            condition.put("directionCode", directionCode);
+        }
+        if (StringUtils.isNotBlank(manufacturer)) {
+            condition.put("manufacturer", manufacturer);
+        }
+        if (StringUtils.isNotBlank(type)) {
+            condition.put("type", type);
+        }
+        if (StringUtils.isNotBlank(secondaryType)) {
+            condition.put("secondaryType", secondaryType);
+        }
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (userInfo.getCompanyid() != null){
+            Enterprise enterprise = enterpriseService.getById(userInfo.getCompanyid());
+            if (enterprise.getSafetysupervision().equals(EnterpriseSafetySupervision.PRODUCE.getMsg())){
+                condition.put("manufacturer", enterprise.getEnterprisename());
+            }else {
+                condition.put("companynumber", enterprise.getEnterprisenumber());
+            }
+        }
+
+        List<ProductInfo> productInfos = productService.selectProductInfo(condition);
+        msg.setResult(productInfos);
+        return msg;
+    }
+
+    @PostMapping("/updatePrice")
+    public Msg updatePrice( @RequestBody ProductInfo productInfo) {
+        Msg msg = new Msg(true);
+        if (productInfo == null || StringUtils.isBlank(productInfo.getDirectionCode())
+                || productInfo.getDirectionCode().length() < FireworkDeal.DIRECTION_ITEM){
+            msg.setCode("999");
+            msg.setMessage("流向码异常,修改失败");
+            return msg;
+        }
+        ProductInfo productInfoExist = productService.selectByDirection(productInfo.getDirectionCode());
+        if (productInfoExist == null) {
+            msg.setCode("999");
+            msg.setMessage("产品信息流向码不存在,修改失败!");
+            return msg;
+        }
+
+        String companynumber = "";
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (userInfo.getCompanyid() != null){
+            Enterprise enterprise = enterpriseService.getById(userInfo.getCompanyid());
+            if (!enterprise.getSafetysupervision().equals(EnterpriseSafetySupervision.PRODUCE.getMsg())){
+                companynumber = enterprise.getEnterprisenumber();
+            }
+        }
+        if (StringUtils.isBlank(companynumber)){
+            msg.setCode("999");
+            msg.setMessage("非经营企业无法修改价格!");
+            return msg;
+        }
+
+        ProductPriceInfo productPriceInfo = productPriceService.selectByCode(companynumber,productInfo.getDirectionCode());
+        if (productPriceInfo != null){
+            productPriceInfo.setPrice(productInfo.getSalePrice());
+            productPriceInfo.setUpdated(new Date());
+            productPriceInfo.setUpdator(userInfo.getUsername());
+            productPriceService.updateById(productPriceInfo);
+        }else {
+            ProductPriceInfo productPrice = new ProductPriceInfo();
+            productPrice.setCompanynumber(companynumber);
+            productPrice.setItemcode(productInfo.getDirectionCode());
+            productPrice.setPrice(productInfo.getSalePrice());
+            productPrice.setUpdated(new Date());
+            productPrice.setUpdator(userInfo.getUsername());
+            productPriceService.save(productPrice);
+        }
+        return msg;
+    }
+
+    @PostMapping("/importEditPrice")
+    @ApiOperation(value = "导入修改价格",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "file",value = "文件",required = true),
+    })
+    public Msg addSelfCheckList(MultipartFile file){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        String filesave ="";
+        try {
+            SimpleDateFormat sdf = new SimpleDateFormat( "yyyyMMddHHmmssSSS" );
+            if (file == null)
+            {
+                msg.setCode("404");
+                msg.setMessage("未找到上传文件");
+                return msg;
+            }
+
+            long size = file.getSize();
+            if(0 == size)
+            {
+                msg.setCode("404");
+                msg.setMessage("上传文件大小为空");
+                return msg;
+            }
+
+            if(!FileOptUtils.isDirExists(productPath)){
+                msg.setCode("500");
+                msg.setMessage("发生错误或不为目录");
+                return msg;
+            }
+
+            String companynumber = "";
+            UserInfo userInfo = userService.getById(getUser().getId());
+            if (userInfo.getCompanyid() != null){
+                Enterprise enterprise = enterpriseService.getById(userInfo.getCompanyid());
+                if (!enterprise.getSafetysupervision().equals(EnterpriseSafetySupervision.PRODUCE.getMsg())){
+                    companynumber = enterprise.getEnterprisenumber();
+                }
+            }
+            if (StringUtils.isBlank(companynumber)){
+                msg.setCode("999");
+                msg.setMessage("非经营企业无法修改价格!");
+                return msg;
+            }
+
+            filesave = productPath + getUser().getUsername() + "_" + sdf.format(new Date()) +".xlsx";
+
+            file.transferTo(new File(filesave));
+            InputStream in = new FileInputStream(filesave);
+            String name = file.getOriginalFilename();
+            Boolean isExcel2007 = name.substring(name.lastIndexOf(".") + 1).endsWith("xlsx")? true:false;
+            BooleanReason blret = excelExportService.imporEditPriceExcel(in,companynumber,getUser().getUsername(),isExcel2007);
+            if(blret.getValue().equals(false))
+            {
+                msg.setCode("500");
+                msg.setMessage(blret.getResultmsg());
+                return msg;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            msg.setCode("500");
+            msg.setMessage("导入发生错误");
+            return msg;
+        }
+
+        return msg;
+    }
+
+    @PostMapping("/add")
+    public Msg addProduct(@Validated @RequestBody ProductInfo productInfo, BindingResult bindingResult) {
+        if (bindingResult.hasErrors()) {
+            StringBuilder stringBuilder = new StringBuilder();
+            for (String s : bindingResult.getFieldErrors().stream()
+                    .map(FieldError::getDefaultMessage).collect(Collectors.toList())) {
+                stringBuilder.append(s).append(",");
+            }
+            return new Msg(ErrorCode.ERROR_10002,stringBuilder.toString());
+        }
+
+        if (StringUtils.isBlank(productInfo.getDirectionCode()) || productInfo.getDirectionCode().length() != 10){
+            return new Msg(ErrorCode.ERROR_10004,"流向码格式错误,新增失败!");
+        }
+
+        List<ProductInfo> productInfosExist = productService.selectByProduct(productInfo);
+        if (productInfosExist != null && productInfosExist.size() != 0) {
+            return new Msg(ErrorCode.ERROR_50003,"新增产品信息流向码已存在,无法添加!");
+        }
+
+        Enterprise enterprise = enterpriseService.selectEnterpriseByNumber(productInfo.getManufacturer());
+        if (enterprise == null || !enterprise.getSafetysupervision().equals(EnterpriseSafetySupervision.PRODUCE.getMsg())){
+            return new Msg(ErrorCode.ERROR_50002,"企业信息不存在 或 该企业不为生产企业!");
+        }
+
+        Byte isOld = 1;
+        productInfo.setCompanyNumber(enterprise.getEnterprisenumber());
+        productInfo.setManufacturer(enterprise.getEnterprisename());
+        productInfo.setCreatedDate(new Date());
+        productInfo.setCreatedBy(getUser().getUsername());
+        productInfo.setIsOld(isOld);
+        Msg thresholdMsg = isFitThreshold(productInfo);
+        if (!thresholdMsg.getCode().equals(ErrorCode.SUCCESS.getCode())){
+            return thresholdMsg;
+        }
+        boolean i = productService.save(productInfo);
+
+        if (!i) {
+            return new Msg(ErrorCode.ERROR_40001,"新增失败,请重新新增!");
+        }
+
+        return success();
+    }
+    @PostMapping("/addNew")
+    public Msg addNewProduct(@Validated @RequestBody ProductInfo productInfo, BindingResult bindingResult) {
+        Msg msg = new Msg(true);
+
+        if (bindingResult.hasErrors()) {
+            StringBuilder stringBuilder = new StringBuilder();
+            for (String s : bindingResult.getFieldErrors().stream()
+                    .map(FieldError::getDefaultMessage).collect(Collectors.toList())) {
+                stringBuilder.append(s);
+                stringBuilder.append(",");
+            }
+            msg.setCode("999");
+            msg.setMessage(stringBuilder.toString());
+            return msg;
+        }
+
+
+        Enterprise enterprise = enterpriseService.selectEnterpriseByNumber(productInfo.getManufacturer());
+        if (enterprise == null || !enterprise.getSafetysupervision().equals(EnterpriseSafetySupervision.PRODUCE.getMsg())){
+            msg.setCode("999");
+            msg.setMessage("企业信息不存在 或 该企业不为生产企业!");
+            return msg;
+        }
+
+        //生成十位流向码
+        String itemCode = "";
+        ProductCategory productCategory = productCategoryService.selectCategoryByLevelAndName(productInfo.getLevel(),
+                productInfo.getSecondaryType());
+
+        if (productCategory == null || StringUtils.isBlank(productCategory.getBitcode())){
+            msg.setCode("999");
+            msg.setMessage("产品类别错误,新增失败!");
+            return msg;
+        }
+
+        int explosiveContent = productInfo.getExplosiveContent().setScale(0,BigDecimal.ROUND_UP).intValue();
+        String explosive = "FFF";
+        if (explosiveContent <= 4095){
+            explosive = String.format("%03x",explosiveContent);
+        }
+
+        String randomStr = Element.random(Element.class).getValue().toString()+Element.random(Element.class).getValue().toString()
+                +Element.random(Element.class).getValue().toString()+Element.random(Element.class).getValue().toString();
+
+        if (StringUtils.isBlank(enterprise.getTwobitcode())){
+            msg.setCode("999");
+            msg.setMessage("两位企业编码为空,请联系管理员添加!");
+            return msg;
+        }
+        itemCode = productCategory.getBitcode() + explosive + enterprise.getTwobitcode() + randomStr;
+        productInfo.setDirectionCode(itemCode.toUpperCase());
+
+        List<ProductInfo> productInfosExist = productService.selectByProduct(productInfo);
+        if (productInfosExist != null && productInfosExist.size() != 0) {
+            msg.setCode("999");
+            msg.setMessage("新增产品信息流向码已存在,无法添加!");
+            return msg;
+        }
+
+        BigDecimal totalExplosive = new BigDecimal(productInfo.getSpecification()).
+                multiply(productInfo.getExplosiveContent());
+
+        Msg thresholdMsg = isFitThreshold(productInfo);
+        if (!thresholdMsg.getCode().equals(ErrorCode.SUCCESS.getCode())){
+            return thresholdMsg;
+        }
+
+        productInfo.setExplosiveContent(totalExplosive);
+        productInfo.setCompanyNumber(enterprise.getEnterprisenumber());
+        productInfo.setManufacturer(enterprise.getEnterprisename());
+        productInfo.setCreatedDate(new Date());
+        productInfo.setCreatedBy(getUser().getUsername());
+
+
+        boolean i = productService.save(productInfo);
+
+        if (!i) {
+            msg.setCode("999");
+            msg.setMessage("新增失败,请重新新增!");
+            return msg;
+        }
+
+        return msg;
+    }
+
+    @PostMapping("/update")
+    public Msg updateProduct( @RequestBody ProductInfo productInfo) {
+        Msg msg = new Msg(true);
+        if (productInfo == null || StringUtils.isBlank(productInfo.getDirectionCode())
+                || productInfo.getDirectionCode().length() < FireworkDeal.DIRECTION_ITEM){
+            msg.setCode("999");
+            msg.setMessage("流向码异常,删除失败");
+            return msg;
+        }
+        ProductInfo productInfoExist = productService.selectByDirection(productInfo.getDirectionCode());
+        if (productInfoExist == null) {
+            msg.setCode("999");
+            msg.setMessage("产品信息流向码不存在,修改失败!");
+            return msg;
+        }
+        ProductInfo productInfoNew = new ProductInfo();
+        productInfoNew.setId(productInfoExist.getId());
+        productInfoNew.setPurchasePrice(productInfo.getPurchasePrice());
+        productInfoNew.setSalePrice(productInfo.getSalePrice());
+        productInfoNew.setModifiedDate(new Date());
+        productInfoNew.setModifiedBy(getUser().getUsername());
+
+        boolean i = productService.updateById(productInfoNew);
+
+        if (!i) {
+            msg.setCode("999");
+            msg.setMessage("修改失败,请重新修改!");
+            return msg;
+        }
+        return msg;
+    }
+
+    @PostMapping("/delete")
+    public Msg deleteProduct(@RequestBody ProductInfo productInfo) {
+        if (productInfo == null || StringUtils.isBlank(productInfo.getDirectionCode())
+                || productInfo.getDirectionCode().length() < FireworkDeal.DIRECTION_ITEM){
+            return new Msg(ErrorCode.ERROR_10004,"流向码异常,删除失败");
+        }
+
+        ProductInfo productInfoExist = productService.selectByDirection(productInfo.getDirectionCode());
+        if (productInfoExist == null) {
+            return new Msg(ErrorCode.ERROR_50001,"产品信息流向码不存在,删除失败");
+        }
+        boolean flag = productService.isProductUsed(productInfoExist.getId());
+        if (flag){
+            return new Msg(ErrorCode.ERROR_999,"当前产品已经签订合同或已经入库,无法删除");
+        }
+        ProductInfo productInfoNew = new ProductInfo();
+        productInfoNew.setId(productInfoExist.getId());
+        productInfoNew.setModifiedDate(new Date());
+        productInfoNew.setModifiedBy(getUser().getUsername());
+        productInfoNew.setIsDel((byte) 1);
+        boolean i = productService.updateById(productInfoNew);
+
+        if (!i) {
+            return new Msg(ErrorCode.ERROR_40001,"删除失败,请重新删除");
+        }
+
+        return success();
+    }
+
+    @GetMapping("/get")
+    public Msg getProductByCode(@RequestParam(value = "directionCode") String directionCode) {
+        Msg msg = new Msg(true);
+
+        if (StringUtils.isBlank(directionCode)) {
+            msg.setCode("999");
+            msg.setMessage("流向码为空,无法查询相关信息!");
+            return msg;
+        }
+
+        DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(directionCode);
+        if (directionDetail == null) {
+            msg.setCode("999");
+            msg.setMessage("流向码不符合规则,请重新输入!");
+            return msg;
+        }
+
+        ProductInfo productInfo = new ProductInfo();
+        productInfo.setDirectionCode(directionDetail.getItemCode());
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (userInfo.getCompanyid() != null){
+            Enterprise enterprise = enterpriseService.getById(userInfo.getCompanyid());
+            if (!enterprise.getSafetysupervision().equals(EnterpriseSafetySupervision.PRODUCE.getMsg())){
+                productInfo.setCompanyNumber(enterprise.getEnterprisenumber());
+            }
+        }
+        List<ProductInfo> productInfos = productService.selectByProduct(productInfo);
+
+        if (productInfos == null || productInfos.size() == 0) {
+            msg.setCode("999");
+            msg.setMessage("未找到相应的产品信息!");
+            return msg;
+        }
+
+        if (productInfos.size() > 1) {
+            msg.setCode("999");
+            msg.setMessage("错误:存在多个对应的产品信息!");
+            return msg;
+        }
+
+        ProductVo productVo = BeanUtils.copy(productInfos.get(0), ProductVo.class);
+        productVo.setDirectionCode(directionCode);
+        productVo.setItemCode(directionDetail.getItemCode());
+        productVo.setDateCode(directionDetail.getDateCode());
+        productVo.setSerialNo(directionDetail.getSerialNo());
+        List<ProductVo> productVos = new ArrayList<>();
+        if (directionDetail.getBoxNo() != null) {
+            productVo.setBoxNo(directionDetail.getBoxNo());
+            FireworkDeal.getProductVos(directionCode, directionDetail, directionDetail, productVos, productVo);
+        } else {
+            productVos.add(productVo);
+        }
+
+        msg.setResult(productVos);
+        return msg;
+    }
+
+    @GetMapping("/gets")
+    public Msg getProductsByCodes(@RequestParam String directionCode,@RequestParam String endCode){
+        Msg msg = new Msg(true);
+        if (StringUtils.isBlank(directionCode)|| StringUtils.isBlank(endCode)) {
+            msg.setCode("999");
+            msg.setMessage("流向码为空,无法查询相关信息!");
+            return msg;
+        }
+        if (directionCode.length()!= 19 || endCode.length() != 5) {
+            msg.setCode("999");
+            msg.setMessage("流向码不符合规则,请重新输入!");
+            return msg;
+        }
+        /*DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(directionCode);
+        DirectionDetail directionDetail2 = FireworkDeal.dealDirectionCode(directionCode.substring(0,14)+endCode);*/
+
+        List<ProductVo>productVos = new ArrayList<>();
+        ProductVo productVo = productService.selectVoByDirection(directionCode);
+        try {
+            Integer first = Integer.parseInt(directionCode.substring(14,19));
+            Integer last = Integer.parseInt(endCode);
+            if (first > last){
+                Integer temp = first;
+                first = last;
+                last = temp;
+            }
+            for (int i = first; i <= last; i++){
+                ProductVo productVoCopy = BeanUtils.copy(productVo, ProductVo.class);
+                productVoCopy.setDirectionCode(directionCode.substring(0, 14) + String.format("%05d", i));
+                productVos.add(productVoCopy);
+            }
+        }catch (Exception e){
+            msg.setCode("999");
+            msg.setMessage("流向码不符合规则,请重新输入!");
+            return msg;
+        }
+
+        return success(productVos);
+    }
+
+    @GetMapping("/getSingle")
+    public Msg getSingleProductByCode(@RequestParam(value = "directionCode") String directionCode) {
+        Msg msg = new Msg(true);
+
+        if (StringUtils.isBlank(directionCode)) {
+            msg.setCode("999");
+            msg.setMessage("流向码为空,无法查询相关信息!");
+            return msg;
+        }
+
+        DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(directionCode);
+        if (directionDetail == null) {
+            msg.setCode("999");
+            msg.setMessage("流向码不符合规则,请重新输入!");
+            return msg;
+        }
+
+        ProductInfo productInfo = new ProductInfo();
+        productInfo.setDirectionCode(directionDetail.getItemCode());
+        List<ProductInfo> productInfos = productService.selectByProduct(productInfo);
+
+        if (productInfos == null || productInfos.size() == 0) {
+            msg.setCode("999");
+            msg.setMessage("未找到相应的产品信息!");
+            return msg;
+        }
+
+        if (productInfos.size() > 1) {
+            msg.setCode("999");
+            msg.setMessage("错误:存在多个对应的产品信息!");
+            return msg;
+        }
+
+        ProductVo productVo = BeanUtils.copy(productInfos.get(0), ProductVo.class);
+        productVo.setDirectionCode(directionCode);
+        productVo.setItemCode(directionDetail.getItemCode());
+        productVo.setDateCode(directionDetail.getDateCode());
+        productVo.setSerialNo(directionDetail.getSerialNo());
+
+        msg.setResult(productVo);
+        return msg;
+    }
+
+    @PostMapping("/explain")
+    public Msg getProductListByCodes(@RequestBody JSONObject object) {
+        Msg msg = new Msg(true);
+        JSONArray jsonArray = object.getJSONArray("data");
+        String userName = object.getString("userName");
+        List<ProductVo>productVos = new ArrayList<>();
+        for (int i = 0; i < jsonArray.size(); i++) {
+            // 遍历 jsonArray 数组,把每一个对象转成 json 对象
+            JSONObject jsonObject = jsonArray.getJSONObject(i);
+            String directionCode = jsonObject.getString("directionCode");
+            DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(directionCode);
+            if (FireworkDeal.is22Characters(directionCode)){
+                ProductVo productVo = productService.selectVoByDirection(directionCode);
+                FireworkDeal.getProductVos(directionCode, directionDetail, directionDetail, productVos,productVo);
+            }else if (FireworkDeal.is19Characters(directionCode)){
+                ProductVo productVo = productService.selectVoByDirection(directionCode);
+                productVos.add(productVo);
+            }
+        }
+        UserInfo userInfo = userService.selectByUser(userName);
+        if (userInfo == null){
+            msg.setCode("999");
+            msg.setMessage("未找到用户信息!");
+            return msg;
+        }
+
+        //移除重复元素
+        List<ProductVo> productVoList = ProductVo.removeListDuplicateObject(productVos);
+        stockService.setProductEntryStatus(productVoList,userInfo);
+        msg.setResult(productVoList);
+
+        return msg;
+    }
+
+    @PostMapping("/removeDuplicate")
+    public Msg removeDuplicateListElement(@RequestBody JSONArray array) {
+        Msg msg = new Msg(true);
+        List<ProductVo>productVos = new ArrayList<>();
+        for (int i = 0; i < array.size(); i++) {
+            // 遍历 jsonArray 数组,把每一个对象转成 json 对象
+            JSONObject jsonObject = array.getJSONObject(i);
+            String directionCode = jsonObject.getString("directionCode");
+            DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(directionCode);
+            if (FireworkDeal.is22Characters(directionCode)){
+                ProductVo productVo = productService.selectVoByDirection(directionCode);
+                FireworkDeal.getProductVos(directionCode, directionDetail, directionDetail, productVos,productVo);
+            }else if (FireworkDeal.is19Characters(directionCode)){
+                ProductVo productVo = productService.selectVoByDirection(directionCode);
+                productVos.add(productVo);
+            }
+        }
+        //移除重复元素
+        List<ProductVo> productVoList = ProductVo.removeListDuplicateObject(productVos);
+        msg.setResult(productVoList);
+
+        return msg;
+    }
+
+    @GetMapping(value = "getThreshold")
+    public Msg getProductThreshold(){
+        Msg msg = new Msg(true);
+        ProductThresholdInfo productThresholdInfo = productThresholdService.getOne(new LambdaQueryWrapper<>());
+        if (productThresholdInfo == null){
+            msg.setCode(ErrorCode.ERROR_999.getCode());
+            msg.setMessage("未找到产品阈值设置");
+            return msg;
+        }
+        String levels = productThresholdInfo.getLevel();
+        List<String>list = StringUtils.toList(levels);
+        ProductThresholdVo productThresholdVo = BeanUtils.copy(productThresholdInfo, ProductThresholdVo.class);
+        productThresholdVo.setLevels(list);
+        msg.setResult(productThresholdVo);
+        return msg;
+    }
+
+    @PostMapping(value = "setThreshold")
+    public Msg setProductThreshold(@RequestBody JSONObject jsonObject){
+        Msg msg = new Msg(true);
+        ProductThresholdInfo productThresholdInfo = productThresholdService.getOne(new LambdaQueryWrapper<>());
+        String explosiveContent = jsonObject.getString("explosiveContent") == null?"1000":jsonObject.getString("explosiveContent");
+        String boxNumber = jsonObject.getString("boxNumber") == null?"999":jsonObject.getString("boxNumber");
+        String levels = jsonObject.getString("levels") == null?"":jsonObject.getString("levels");
+        productThresholdInfo.setExplosivecontent(new BigDecimal(explosiveContent));
+        productThresholdInfo.setBoxnumber(Integer.parseInt(boxNumber));
+        productThresholdInfo.setLevel(levels);
+        boolean i = productThresholdService.updateById(productThresholdInfo);
+        return msg;
+    }
+
+    @GetMapping("/categorise")
+    public Msg getProductCategories(@RequestParam("name")String name){
+        Msg msg = new Msg(true);
+        List<ProductCategory> categories = productCategoryService.selectAllOrByName(name);
+        msg.setResult(categories);
+        return msg;
+    }
+
+    @PostMapping("/addCategory")
+    public Msg addCategory(@RequestBody ProductCategory category){
+        Msg msg = new Msg(true);
+        Msg checkMsg = checkCategory(category,ADD_OPTION);
+        if(!checkMsg.getCode().equals(ErrorCode.SUCCESS.getCode())){
+            return checkMsg;
+        }
+        productCategoryService.save(category);
+        return msg;
+    }
+
+    @PostMapping("/editCategory")
+    public Msg editCategory(@RequestBody ProductCategory category){
+        Msg msg = new Msg(true);
+        Msg checkMsg = checkCategory(category,EDIT_OPTION);
+        if(!checkMsg.getCode().equals(ErrorCode.SUCCESS.getCode())){
+            return checkMsg;
+        }
+        productCategoryService.updateById(category);
+        return msg;
+    }
+
+    @PostMapping("/delCategory")
+    public Msg deleteCategory(@RequestBody ProductCategory category){
+        Msg msg = new Msg(true);
+        Msg checkMsg = checkCategory(category,DEL_OPTION);
+        if(!checkMsg.getCode().equals(ErrorCode.SUCCESS.getCode())){
+            return checkMsg;
+        }
+        productCategoryService.removeById(category.getId());
+        return msg;
+    }
+
+    @GetMapping("/majorTree")
+    public List<Tree> majorTree(){
+        List<Tree> trees = new ArrayList<>();
+        byte type = 1;
+        List<ProductCategory> categories = productCategoryService.selectCategoryByType(type);
+        for (ProductCategory category :categories) {
+            Tree tree = new Tree();
+            tree.setText(category != null ? category.getName() : null);
+            tree.setAttributes(category != null ? category.getName() : null);
+            trees.add(tree);
+        }
+        return trees;
+    }
+
+    @GetMapping("/secondaryTree")
+    public List<Tree> secondaryTree(@RequestParam("major")String major){
+        List<Tree> trees = new ArrayList<>();
+        if (StringUtils.isBlank(major)){
+            return trees;
+        }
+        List<ProductCategory> categories = productCategoryService.selectCategoryByMajorType(major);
+        for (ProductCategory category :categories) {
+            Tree tree = new Tree();
+            tree.setText(category != null ? category.getName() : null);
+            tree.setAttributes(category != null ? category.getName() : null);
+            trees.add(tree);
+        }
+        return trees;
+    }
+
+    @GetMapping("/permitLevelTree")
+    public List<Tree> permitLevelTree(@RequestParam("secondary")String secondary){
+        List<Tree> trees = new ArrayList<>();
+        if (StringUtils.isBlank(secondary)){
+            return trees;
+        }
+        ProductCategory productCategory = new ProductCategory();
+        productCategory.setType((byte)2);
+        productCategory.setName(secondary);
+        List<ProductCategory> categories = productCategoryService.selectCategoryByTypeAndName(productCategory);
+        if (categories == null ){
+            return trees;
+        }
+        for (ProductCategory category : categories){
+            Tree tree = new Tree();
+            tree.setText(category.getLevel());
+            tree.setAttributes(category.getLevel());
+            trees.add(tree);
+        }
+        return trees;
+    }
+
+    private Msg checkCategory(ProductCategory category,Byte option){
+        Msg msg = new Msg("999","");
+        if (category == null){
+            msg.setMessage("操作失败:未找到对应的类别信息");
+            return msg;
+        }
+        if (category.getName() == null){
+            msg.setMessage("类别名称不能未空");
+            return msg;
+        }
+        if (category.getType() == null){
+            msg.setMessage("类型不能未空");
+            return msg;
+        }
+        if (category.getType() == 2 && StringUtils.isBlank(category.getParentname())){
+            msg.setMessage("选择小类对应大类不能未空");
+            return msg;
+        }
+        if (option.equals(ADD_OPTION)){
+            List<ProductCategory> categoryExist = productCategoryService.selectCategoryByTypeAndName(category);
+            if (categoryExist != null && categoryExist.size()>0){
+                msg.setMessage("当前类别名称已存在");
+                return msg;
+            }
+        }else {
+            List<ProductCategory> categoryExist = productCategoryService.selectCategoryByTypeAndName(category);
+            if (categoryExist == null || categoryExist.size() == 0){
+                msg.setMessage("未找到当前类别名称");
+                return msg;
+            }
+        }
+        msg.setCode("200");
+        return msg;
+    }
+
+    private Msg isFitThreshold(ProductInfo productInfo) {
+        Msg msg = new Msg(ErrorCode.ERROR_999.getCode(),"");
+        ProductThresholdInfo productThresholdInfo = productThresholdService.getOne(new LambdaQueryWrapper<>());
+        if (productInfo.getExplosiveContent().compareTo(productThresholdInfo.getExplosivecontent()) > 0){
+            msg.setMessage("含药量最大为:"+productThresholdInfo.getExplosivecontent()+",超过限制,录入失败!");
+            return msg;
+        }
+        if (productInfo.getBoxNumber() > productThresholdInfo.getBoxnumber()){
+            msg.setMessage("箱数最大为:"+productThresholdInfo.getBoxnumber()+"超过限制,录入失败!");
+            return msg;
+        }
+        if (productThresholdInfo.getLevel().contains(productInfo.getLevel())){
+            msg.setMessage("当前产品级别为限制录入级别,录入失败!");
+            return msg;
+        }
+        msg.setCode(ErrorCode.SUCCESS.getCode());
+        return msg;
+    }
+
+
+    @PostMapping("/import/old-system")
+    public Msg importDataByExcel(MultipartFile file) {
+        productService.importDataByExcel(file, getUser());
+        return success();
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Controller/RegisterController.java b/src/main/java/com/gk/firework/Controller/RegisterController.java
new file mode 100644
index 0000000..f226f29
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/RegisterController.java
@@ -0,0 +1,258 @@
+package com.gk.firework.Controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.gk.firework.Controller.Base.BaseController;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.Enum.EnterpriseSafetySupervision;
+import com.gk.firework.Domain.Enum.ErrorCode;
+import com.gk.firework.Domain.Utils.*;
+import com.gk.firework.Domain.Utils.Properties;
+import com.gk.firework.Domain.Vo.RegisterVo;
+import com.gk.firework.Service.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.FieldError;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.gk.firework.Domain.Enum.ErrorCode.ERROR_10001;
+
+/**
+ * @author : jingjy
+ * @date : 2021/6/24 16:52
+ */
+@Api(tags = "注册信息")
+@RequestMapping("/register")
+@RestController
+public class RegisterController extends BaseController {
+
+    /** 未审核 **/
+    private final Byte REVIEW_INCOMPLETE = 0;
+    /** 审核通过 **/
+    private final Byte REVIEW_APPROVE = 1;
+    /** 审核拒绝 **/
+    private final Byte REVIEW_REJECTION = 2;
+
+    @Autowired
+    private RegisterService registerService;
+    @Autowired
+    private EnterpriseResourceService enterpriseResourceService;
+    @Autowired
+    private EnterpriseService enterpriseService;
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private BlackListService blackListService;
+
+    @PostMapping("/add")
+    public Msg addRegisterInfo(@Validated RegisterVo registerVo, BindingResult bindingResult){
+        if (registerVo == null){
+            return new Msg(ErrorCode.ERROR_10001);
+        }
+
+        if (bindingResult.hasErrors()) {
+            StringBuilder stringBuilder = new StringBuilder();
+            for (String s : bindingResult.getFieldErrors().stream()
+                    .map(FieldError::getDefaultMessage).collect(Collectors.toList())) {
+                stringBuilder.append(s);
+                stringBuilder.append(",");
+            }
+            return new Msg(ErrorCode.ERROR_10002,stringBuilder.toString());
+        }
+
+        boolean isSupervision = false;
+        for (EnterpriseSafetySupervision e : EnterpriseSafetySupervision.values()){
+            if (registerVo.getType().equals(e.getMsg())){
+                isSupervision = true;
+            }
+        }
+
+        if (!isSupervision){
+            return new Msg(ErrorCode.ERROR_10004,"企业类型无效");
+        }
+
+        if ((boolean)isEnterpriseNameExist(registerVo.getEnterprisename()).getResult()){
+            return new Msg(ErrorCode.ERROR_10004,"企业名称已存在");
+        }
+
+        if ((boolean)isEnterpriseNumberExist(registerVo.getEnterprisenumber()).getResult()){
+            return new Msg(ErrorCode.ERROR_10004,"企业编码已存在");
+        }
+
+        RegisterInfo registerInfo = BeanUtils.copy(registerVo,RegisterInfo.class);
+        registerInfo.setCreatedat(new Date());
+
+        registerService.save(registerInfo);
+
+        Map<String,MultipartFile[]> map = new HashMap<>(8);
+        map.put(RegisterVo.BUSINESS,registerVo.getBusinessLicense());
+        map.put(RegisterVo.ID_CARD,registerVo.getIdCard());
+        map.put(RegisterVo.LEGAL_PERSON,registerVo.getLegalPersonFile());
+        map.put(RegisterVo.OPERATION,registerVo.getOperationQualification());
+        map.put(RegisterVo.ESCORT_COMPANY,registerVo.getEscortCompany());
+        map.put(RegisterVo.INSURANCE,registerVo.getInsurance());
+        map.put(RegisterVo.PRODUCTION,registerVo.getSafetyProduction());
+        Msg msg = uploadFiles(map,registerInfo);
+        if (!msg.getCode().equals(ErrorCode.SUCCESS.getMsg())){
+            return msg;
+        }
+
+        return success();
+    }
+
+    @ApiOperation(value = "注册信息审核", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "注册信息id",required = true),
+            @ApiImplicitParam(name = "reviewResult",value = "审核结果(1.审核通过;2.审核驳回)",required = true),
+            @ApiImplicitParam(name = "reviewContent",value = "审核意见"),
+    })
+    @PostMapping("/review")
+    public Msg reviewRegister(@RequestBody JSONObject object){
+        Long id = object.getLong("id");
+        Byte reviewResult = object.getByte("reviewResult");
+        String reviewContent = object.getString("reviewContent").trim();
+        if (id == null || reviewResult == null){
+            return new Msg(ErrorCode.ERROR_10001);
+        }
+        if (reviewResult.equals(REVIEW_INCOMPLETE)){
+            return new Msg(ErrorCode.ERROR_10004);
+        }else if (!(reviewResult.equals(REVIEW_REJECTION)||reviewResult.equals(REVIEW_APPROVE))){
+            return new Msg(ErrorCode.ERROR_10004);
+        }
+
+        UserInfo userInfo = userService.getById(getUser().getId());
+        //普通用户
+        int normalUser = 3;
+        if (userInfo.getType() == normalUser){
+            return new Msg(ErrorCode.ERROR_70001);
+        }
+        RegisterInfo registerInfo = registerService.getById(id);
+        if (registerInfo == null){
+            return new Msg(ErrorCode.ERROR_50001);
+        }
+        if ((boolean)isEnterpriseNameExist(registerInfo.getEnterprisename()).getResult()){
+            return new Msg(ErrorCode.ERROR_10004,"企业名称已存在");
+        }
+
+        if ((boolean)isEnterpriseNumberExist(registerInfo.getEnterprisenumber()).getResult()){
+            return new Msg(ErrorCode.ERROR_10004,"企业编码已存在");
+        }
+
+        registerInfo.setReviewresult(reviewResult);
+        registerInfo.setReviewat(new Date());
+        registerInfo.setReviewer(getUser().getId().toString());
+        registerInfo.setReviewcontent(reviewContent);
+        registerService.updateById(registerInfo);
+        if (reviewResult.equals(REVIEW_APPROVE)){
+            //创建企业账户
+            enterpriseService.addEnterpriseByRegister(registerInfo,userInfo);
+        }
+        return success();
+    }
+
+    /**
+     * @Description: 根据企业名称判断企业是否存在
+     */
+    @GetMapping("/isNameExist")
+    @ApiOperation(value = "企业名称是否存在", httpMethod = "GET")
+    @ApiImplicitParam(name = "enterpriseName", value = "企业名称", required = true)
+    public Msg isEnterpriseNameExist(@RequestParam("enterpriseName")String enterpriseName){
+        if (StringUtils.isBlank(enterpriseName.trim())){
+            return new Msg(ERROR_10001);
+        }
+        boolean flag = true;
+        Enterprise enterprise = enterpriseService.selectEnterpriseByName(enterpriseName);
+        if (enterprise == null){
+            flag = false;
+            return success(flag);
+        }
+        BlackList blackList = blackListService.getByEnterprisenumber(enterprise.getEnterprisenumber());
+        if (blackList != null) flag = false;
+        return success(flag);
+
+    }
+
+    /**
+     * @Description: 根据企业编码判断企业是否存在
+     */
+    @GetMapping("/isNumberExist")
+    @ApiOperation(value = "企业编码是否存在", httpMethod = "GET")
+    @ApiImplicitParam(name = "enterpriseNumber", value = "企业编码", required = true)
+    public Msg isEnterpriseNumberExist(@RequestParam("enterpriseNumber")String enterpriseNumber){
+        if (StringUtils.isBlank(enterpriseNumber.trim())){
+            return new Msg(ERROR_10001);
+        }
+        boolean flag = true;
+        Enterprise enterprise = enterpriseService.selectEnterpriseByNumber(enterpriseNumber);
+        if (enterprise == null){
+            flag = false;
+        }
+        return success(flag);
+    }
+
+    @GetMapping("/review")
+    public Msg getWaitReviewData(@RequestParam(value = "name", required = false) String name,
+                                  @RequestParam(value = "type", required = false) String type,
+                                  @RequestParam(value = "reviewResult", required = false) Integer reviewResult,
+                                  @RequestParam(defaultValue = "0") Integer pageIndex,
+                                  @RequestParam(defaultValue = "10") Integer pageSize,
+                                  String sort, String order){
+        Msg msg = new Msg(true);
+
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        Map<String, Object> condition = new HashMap<>(4);
+        if (StringUtils.isNotBlank(name)) {
+            condition.put("name", name);
+        }
+        if (StringUtils.isNotBlank(type)) {
+            condition.put("type", type);
+        }
+        if (reviewResult != null ){
+            condition.put("reviewResult", reviewResult);
+        }
+        UserInfo userInfo = userService.getById(getUser().getId());
+
+        pageInfo.setCondition(condition);
+        registerService.selectDataGrid(pageInfo);
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    private Msg uploadFiles(Map<String, MultipartFile[]> map, RegisterInfo registerInfo) {
+        List<EnterpriseResource> adds = new ArrayList<>();
+        try {
+            for (Map.Entry<String, MultipartFile[]>entry : map.entrySet()){
+                MultipartFile[] files = entry.getValue();
+                if (files != null && files.length > 0) {
+                    for (MultipartFile file : files) {
+                        String name = UploadUtil.uploadFile(file, Properties.enterprisePath);
+                        EnterpriseResource er = new EnterpriseResource();
+                        er.setTabletype(entry.getKey());
+                        er.setFilename(file.getOriginalFilename());
+                        er.setUrl(Properties.enterprise + name);
+                        er.setCreatetime(new Date());
+                        er.setCreatebyname(registerInfo.getEnterprisename());
+                        er.setBelongid(registerInfo.getId());
+                        er.setValidflag(true);
+                        adds.add(er);
+                    }
+                }
+            }
+            //执行
+            enterpriseResourceService.saveBatch(adds);
+            return success();
+
+        } catch (Exception e) {
+            return new Msg(ErrorCode.ERROR_40001,"文件上传失败");
+        }
+
+    }
+}
diff --git a/src/main/java/com/gk/firework/Controller/RoleController.java b/src/main/java/com/gk/firework/Controller/RoleController.java
new file mode 100644
index 0000000..c8308c2
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/RoleController.java
@@ -0,0 +1,183 @@
+package com.gk.firework.Controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.gk.firework.Domain.DistrictInfo;
+import com.gk.firework.Domain.RoleInfo;
+import com.gk.firework.Domain.RolePermissionsInfo;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.*;
+import com.gk.firework.Domain.Vo.Menu;
+import com.gk.firework.Service.*;
+import io.swagger.annotations.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.management.relation.Role;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@Api(tags = "角色管理数据接口")
+@RestController
+public class RoleController {
+
+    @Autowired
+    UserService userService;
+    @Autowired
+    RoleService roleService;
+    @Autowired
+    UserRolesService userRolesService;
+    @Autowired
+    RolePermissionsService rolePermissionsService;
+    @Autowired
+    ExcelExportService excelExportService;
+
+    @GetMapping("/role")
+    @ApiOperation(value = "获取角色数据",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "name",value = "角色名"),
+    })
+    public Msg getRoleInfo(String name){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        List<RoleInfo> roleInfos = roleService.selectList(name);
+        msg.setResult(roleInfos);
+        return msg;
+    }
+
+    @GetMapping("/rolepermissions")
+    @ApiOperation(value = "获取角色菜单数据",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "roleId",value = "角色id"),
+    })
+    public Msg getRolePermissions(String roleId){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        List<Menu> roleInfos = rolePermissionsService.selectMenuList(roleId);
+        msg.setResult(roleInfos);
+        return msg;
+    }
+
+    @PostMapping("/addrole")
+    @ApiOperation(value = "添加角色数据",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "name",value = "角色名",required = true),
+            @ApiImplicitParam(name = "operator",value = "操作人"),
+            @ApiImplicitParam(name = "btnaccess",value = "按钮权限"),
+    })
+    public Msg addRoleInfo(@RequestBody JSONObject jsonObject){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        String name = jsonObject.getString("name");
+        String operator = jsonObject.getString("operator");
+        String btnaccess = jsonObject.getString("btnaccess");
+        RoleInfo roleInfo = new RoleInfo();
+        roleInfo.setName(name);
+        RoleInfo roleInfoExist = roleService.selectRoleByName(roleInfo);
+        if (roleInfoExist != null){
+            msg.setCode("500");
+            msg.setMessage("角色名重复");
+            return msg;
+        }else {
+            roleInfo.setBtnaccess(btnaccess);
+            roleInfo.setCreatedby(operator);
+            roleInfo.setCreateddate(new Date());
+            roleInfo.setLastmodifiedby(operator);
+            roleInfo.setLastmodifieddate(new Date());
+            roleInfo.setIsdel((byte)0);
+            roleService.save(roleInfo);
+            return msg;
+        }
+    }
+
+    @PostMapping("/putrole")
+    @ApiOperation(value = "修改角色数据",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id",value = "角色id",required = true),
+            @ApiImplicitParam(name = "name",value = "角色名",required = true),
+            @ApiImplicitParam(name = "btnaccess",value = "按钮权限"),
+            @ApiImplicitParam(name = "operator",value = "操作人"),
+    })
+    public Msg putRoleInfo(@RequestBody JSONObject jsonObject){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        String name = jsonObject.getString("name");
+        String operator = jsonObject.getString("operator");
+        String btnaccess = jsonObject.getString("btnaccess");
+        Long id = jsonObject.getLong("id");
+        List<RoleInfo> roleInfoExist = roleService.selectExistRole(id,name);
+        if (roleInfoExist.size() > 0){
+            msg.setCode("500");
+            msg.setMessage("角色名重复");
+            return msg;
+        }else {
+            RoleInfo roleInfo = new RoleInfo();
+            roleInfo.setId(id);
+            roleInfo.setName(name);
+            roleInfo.setBtnaccess(btnaccess);
+            roleInfo.setLastmodifiedby(operator);
+            roleInfo.setLastmodifieddate(new Date());
+            roleService.updateById(roleInfo);
+            return msg;
+        }
+    }
+
+    @PostMapping("/rolepermissions")
+    @ApiOperation(value = "获取角色菜单数据",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id",value = "角色id"),
+    })
+    public Msg putRolePermissions(@ApiParam(value = "permissionIds,id")
+                                      @RequestBody JSONObject jsonObject){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        JSONArray permissionId = jsonObject.getJSONArray("permissionIds");
+        Long roleid = jsonObject.getLong("id");
+        rolePermissionsService.delRolePermissionByRoleId(roleid);
+        for (int i = 0; i < permissionId.size(); i++) {
+            RolePermissionsInfo rolePermissionsInfo = new RolePermissionsInfo();
+            rolePermissionsInfo.setRoleid(roleid);
+            rolePermissionsInfo.setPermissionid(Long.parseLong(permissionId.get(i).toString()));
+            rolePermissionsService.save(rolePermissionsInfo);
+        }
+        return msg;
+    }
+
+    @PostMapping("/delrole")
+    @ApiOperation(value = "删除角色数据", response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType="query",name = "id",value = "id",required = true),
+            @ApiImplicitParam(paramType="body",name = "operator",value = "更新人"),
+
+    })
+    public Msg delRoleInfo(@ApiParam(value = "id,operator")
+                             @RequestBody JSONObject jsonObject){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        Long id = jsonObject.getLong("id");
+        if (id == 1 || id == 2 || id == 3){
+            msg.setCode("999");
+            msg.setMessage("内置角色不允许删除");
+            return msg;
+        }
+        RoleInfo roleInfo = new RoleInfo();
+        roleInfo.setId(jsonObject.getLong("id"));
+        roleInfo.setLastmodifiedby(jsonObject.getString("operator"));
+        roleInfo.setLastmodifieddate(new Date());
+        roleInfo.setIsdel((byte)1);
+        roleService.updateById(roleInfo);
+        return msg;
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Controller/SaleOrderController.java b/src/main/java/com/gk/firework/Controller/SaleOrderController.java
new file mode 100644
index 0000000..609a9a4
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/SaleOrderController.java
@@ -0,0 +1,1016 @@
+package com.gk.firework.Controller;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.gk.firework.Controller.Base.BaseController;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.BO.DirectionProductBO;
+import com.gk.firework.Domain.BO.SaleOrderDetailInfoBO;
+import com.gk.firework.Domain.DO.ProductDO;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.Log.JsonParams;
+import com.gk.firework.Domain.SaleOrderDetailInfo;
+import com.gk.firework.Domain.Utils.*;
+import com.gk.firework.Domain.Vo.*;
+import com.gk.firework.Service.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.math.BigDecimal;
+import java.nio.charset.StandardCharsets;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.gk.firework.Domain.Enum.ErrorCode.*;
+
+
+/**
+ * @author : jingjy
+ * @date : 2021/3/31 8:53
+ */
+@Api(tags = "订单信息")
+@RequestMapping("/order")
+@RestController
+public class SaleOrderController extends BaseController {
+    @Value("${productPath}")
+    private String productPath; //配置文件配置的物理保存地址
+    @Autowired
+    private CustomerService customerService;
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private SaleOrderService saleOrderService;
+    @Autowired
+    private SaleOrderDetailService saleOrderDetailService;
+    @Autowired
+    private ProductService productService;
+    @Autowired
+    private ProductPriceService productPriceService;
+    @Autowired
+    private StockService stockService;
+    @Autowired
+    private EntryService entryService;
+    @Autowired
+    private EntryDetailService entryDetailService;
+    @Autowired
+    private SoldNoStockService soldNoStockService;
+    @Autowired
+    private ExcelExportService excelExportService;
+
+    @PostMapping("/create")
+    @JsonParams
+    public Msg createOrder(@RequestParam String encryptStr) {
+
+        String jsonStr = new String(Base64.getDecoder().decode(encryptStr.replaceAll(" +","+")),
+                StandardCharsets.UTF_8);
+
+        JSONObject jsonObject = JSON.parseObject(jsonStr);
+
+        Msg msg = new Msg(true);
+        JSONObject customer = jsonObject.getJSONObject("customer");
+        JSONObject order = jsonObject.getJSONObject("order");
+        JSONArray detailObject = jsonObject.getJSONArray("detailInfos");
+        String userId = jsonObject.getString("operator");
+        Integer num = order.getInteger("boxNum");
+        String total = order.getString("total");
+        String pay = order.getString("pay");
+        String change = order.getString("change");
+        String type = jsonObject.getString("type");
+        Date salesTime = new Date();
+        if (customer == null || detailObject == null || detailObject.isEmpty()) {
+            msg.setCode(ERROR_10001.getCode());
+            msg.setMessage(ERROR_10001.getMsg());
+            return msg;
+        }
+
+        if (userId == null) {
+            msg.setCode(ERROR_10004.getCode());
+            msg.setMessage(ERROR_10004.getMsg()+":用户信息错误");
+            return msg;
+        }
+        UserInfo userInfo = userService.getById(userId);
+        if (userInfo == null) {
+            msg.setCode(ERROR_10004.getCode());
+            msg.setMessage(ERROR_10004.getMsg()+":用户信息错误");
+            return msg;
+        }
+
+
+
+        // 优化1 单独校验数据
+//        List<String> directionCodes = new ArrayList<>(detailObject.size());
+        Set<String> direction10Codes = new HashSet<>();
+        for (int i = 0; i < detailObject.size(); i++) {
+            JSONObject object = detailObject.getJSONObject(i);
+            String directionCodeStr = object.getString("directionCode");
+            if (FireworkDeal.isNotDirectionCode(directionCodeStr)) {
+                msg.setCode(ERROR_10004.getCode());
+                msg.setMessage(ERROR_10004.getMsg()+":流向码:" + directionCodeStr + "错误");
+                return msg;
+            }
+//            directionCodes.add(directionCodeStr);
+            // 10位码
+            direction10Codes.add(directionCodeStr.substring(0, 10));
+        }
+        List<String> direction10CodesList = new ArrayList<>(direction10Codes);
+        // 获取所有流向码的
+        List<ProductDO> productDos = productService.selectDoByDirections(direction10CodesList);
+        // 10位 -> 产品 映射
+        Map<String, ProductDO> productDOMap = new HashMap<>(productDos.size());
+        for (ProductDO p : productDos) {
+            productDOMap.put(p.getDirectionCode(), p);
+        }
+        // 校验哪个产品不存在
+        for (String directionCode : direction10CodesList) {
+            if (!productDOMap.containsKey(directionCode)) {
+                msg.setCode(ERROR_10004.getCode());
+                msg.setMessage(ERROR_10004.getMsg()+":流向码:" + directionCode + "不存在");
+                return msg;
+            }
+        }
+        // 产品对应价格
+        List<ProductPriceInfo> productPriceInfos = productPriceService.selectByCodes(userInfo.getCompanynumber(), direction10CodesList);
+        // 10位 -> 产品价格 映射
+        Map<String, BigDecimal> productPriceMap = new HashMap<>(productPriceInfos.size());
+        for (ProductPriceInfo productPriceInfo : productPriceInfos) {
+            BigDecimal price = BigDecimal.ZERO;
+            if (productPriceInfo.getPrice() != null) {
+                price = productPriceInfo.getPrice();
+            }
+            productPriceMap.put(productPriceInfo.getItemcode(), price);
+        }
+
+//        for (String directionCode : direction10CodesList) {
+//            if (!productPriceMap.containsKey(directionCode)) {
+//                msg.setCode(ERROR_10004.getCode());
+//                msg.setMessage(ERROR_10004.getMsg()+":流向码:" + directionCode + "价格不存在");
+//                return msg;
+//            }
+//        }
+
+
+//        List<DirectionProductBO> directionProductBOS = new ArrayList<>(detailObject.size());
+//        DirectionProductBO directionProductBO;
+//        for (int i = 0; i < detailObject.size(); i++) {
+//            directionProductBO = new DirectionProductBO();
+//            JSONObject object = detailObject.getJSONObject(i);
+//            String directionCodeStr = object.getString("directionCode");
+//            directionProductBO.setDirectionCode(directionCodeStr);
+//            directionProductBO.setItemCode(directionCodeStr.substring(0,10));
+//            directionProductBO.setSlice(productDOMap.get(directionProductBO.getItemCode()).getSlice());
+//            directionProductBOS.add(directionProductBO);
+//        }
+
+//        List<StockInfo> stockInfos = stockService.selectStockByDirectionsAndSlices(directionProductBOS);
+
+
+//        Map<String, StockInfo> stockInfoMap = new HashMap<>();
+        List<SaleOrderDetailInfoBO> detailInfoList = new ArrayList<>();
+        for (int i = 0; i < detailObject.size(); i++) {
+            // 遍历 jsonArray 数组,把每一个对象转成 json 对象
+            JSONObject object = detailObject.getJSONObject(i);
+            String directionCodeStr = object.getString("directionCode");
+            ProductDO productDO = productDOMap.get(directionCodeStr.substring(0, 10));
+
+            if (productDO == null || productDO.getSlice() == null) {
+                msg.setCode(ERROR_10004.getCode());
+                msg.setMessage(ERROR_10004.getMsg()+":流向码:" + directionCodeStr + "错误");
+                return msg;
+            }
+            String slice = productDO.getSlice();
+            ProductInfo productInfo = BeanUtils.copy(productDO, ProductInfo.class);
+            // 需要分表查询暂不优化
+            StockInfo stockInfo = stockService.selectStockByDirectionAndSlice(directionCodeStr, slice);
+//            StockInfo stockInfo = stockService.selectStockByDirection(directionCodeStr);
+            if (stockInfo == null) {
+                msg.setCode(ERROR_50001.getCode());
+                msg.setMessage(ERROR_50001.getMsg()+":流向码为:" + directionCodeStr + " 未入库,销售失败");
+                return msg;
+            }
+
+            if (stockInfo.getStatus() != null && stockInfo.getStatus().equals(StockInfo.STOCK_SOLD)) {
+                msg.setCode(ERROR_50002.getCode());
+                msg.setMessage(ERROR_50002.getMsg()+":流向码为:" + directionCodeStr + " 已售出,销售失败");
+                return msg;
+            }
+
+            if (FireworkDeal.is22Characters(directionCodeStr)){
+                List<ProductVo>productVoList = new ArrayList<>();
+                DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(directionCodeStr);
+                ProductVo productVo = BeanUtils.copy(productInfo, ProductVo.class);
+                productVo.setDirectionCode(directionCodeStr);
+                productVo.setItemCode(directionDetail.getItemCode());
+                productVo.setDateCode(directionDetail.getDateCode());
+                productVo.setSerialNo(directionDetail.getSerialNo());
+                FireworkDeal.getProductVos(directionCodeStr,directionDetail,directionDetail,productVoList,productVo);
+                for (ProductVo productVo1 : productVoList){
+                    SaleOrderDetailInfoBO detailInfo = new SaleOrderDetailInfoBO();
+                    detailInfo.setItemcode(productInfo.getDirectionCode());
+                    detailInfo.setDirectioncode(productVo1.getDirectionCode());
+                    detailInfo.setItemname(productVo1.getName());
+                    detailInfo.setPrice(productPriceMap.get(detailInfo.getDirectioncode()));
+                    if (detailInfo.getPrice() == null) {
+                        detailInfo.setPrice(BigDecimal.ZERO);
+                    }
+                    detailInfo.setSpecification(productVo1.getSpecification());
+                    detailInfo.setProductDO(productDOMap.get(detailInfo.getItemcode()));
+                    detailInfoList.add(detailInfo);
+                }
+                num = productVoList.size();
+            }else {
+                SaleOrderDetailInfoBO detailInfo = new SaleOrderDetailInfoBO();
+                detailInfo.setItemcode(productInfo.getDirectionCode());
+                detailInfo.setDirectioncode(directionCodeStr);
+                detailInfo.setItemname(productInfo.getName());
+                detailInfo.setPrice(productPriceMap.get(detailInfo.getDirectioncode()));
+                if (detailInfo.getPrice() == null) {
+                    detailInfo.setPrice(BigDecimal.ZERO);
+                }
+                detailInfo.setProductDO(productDOMap.get(detailInfo.getItemcode()));
+                detailInfo.setSpecification(productInfo.getSpecification());
+                detailInfoList.add(detailInfo);
+                num = 1;
+            }
+        }
+        String idCardNum = customer.getString("idCardNumber");
+        String workerName = customer.getString("workerName");
+        if (StringUtils.isBlank(idCardNum) || StringUtils.isBlank(workerName)) {
+            msg.setCode(ERROR_50001.getCode());
+            msg.setMessage(ERROR_50001.getMsg()+":身份信息有误");
+            return msg;
+        }
+
+        String auth = getAuth();
+        auth = StringUtils.isBlank(auth) ? "NOAUTH" : auth;
+
+        msg = saleOrderService.doSalesProcess(customer, num, idCardNum, userInfo, detailInfoList, type, salesTime, pay, total, change, auth);
+
+        return msg;
+    }
+
+    @GetMapping(value = {"/get/idCardNum/{idCardNum}/pageIndex/{pageIndex}/pageSize/{pageSize}/directionCode/{directionCode}",
+            "/get/idCardNum/{idCardNum}/pageIndex/{pageIndex}/pageSize/{pageSize}"})
+    public Msg getOrderListByIdCardNum(@PathVariable String idCardNum,
+                                       @PathVariable Integer pageIndex,
+                                       @PathVariable Integer pageSize,
+                                       String sort, String order,
+                                       @PathVariable(required = false) String directionCode) {
+        Msg msg = new Msg(true);
+        if (StringUtils.isBlank(idCardNum)) {
+            msg.setCode(ERROR_10001.getCode());
+            msg.setMessage(ERROR_10001.getMsg()+":身份证号为空,查询失败!");
+            return msg;
+        }
+        if (pageIndex == null){
+            pageIndex = 0;
+        }
+        if (pageSize == null || pageSize == 0){
+            pageSize = 10;
+        }
+
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        Map<String, Object> condition = new HashMap<>(4);
+        condition.put("idCardNum",idCardNum);
+        if (StringUtils.isNotBlank(directionCode)) {
+            condition.put("directionCode", directionCode);
+        }
+        pageInfo.setCondition(condition);
+        saleOrderService.selectReturnDataGrid(pageInfo);
+
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    @PostMapping("/saleDetailList")
+    public Msg getSaleOneDetail(@RequestBody JSONObject jsonObject) {
+        String directionCode = jsonObject.getString("directionCode");
+        String userId = jsonObject.getString("userId");
+
+        if (StringUtils.isBlank(userId)) {
+            throw new BusinessException("操作员信息为空");
+        }
+        List<SaleDetailVo> details = saleOrderDetailService.getDetailList(directionCode);
+        return success(details);
+    }
+
+    @PostMapping("/return2storage")
+    @JsonParams
+    public Msg returnProduct2(@RequestBody JSONObject jsonObject) {
+        String userId = jsonObject.getString("userId");
+        String directionCode = jsonObject.getString("directionCode");
+        String auth = getAuth();
+        auth = StringUtils.isBlank(auth) ? "NOAUTH" : auth;
+        saleOrderDetailService.returnAndStorage(directionCode,userId,auth);
+        return success();
+    }
+
+    @PostMapping("/return")
+    @JsonParams
+    public Msg returnProduct(@RequestBody JSONObject object) {
+        Msg msg = new Msg(true);
+        JSONArray directionCodes = object.getJSONArray("directionCodes");
+        StringBuilder message = new StringBuilder();
+        for (Object dire : directionCodes){
+            if (dire == null){
+                message.append("流向码:").append("为空退货失败!");
+                continue;
+            }
+            String directionCode = dire.toString();
+            if (StringUtils.isBlank(directionCode) || FireworkDeal.isNotDirectionCode(directionCode)) {
+                message.append("流向码:").append(directionCode).append("不符合规则,退货失败!");
+                continue;
+            }
+
+            UserInfo userInfo = userService.getById(getUser().getId());
+            String auth = getAuth();
+            auth = StringUtils.isBlank(auth) ? "NOAUTH" : auth;
+            StockInfo stockInfo = stockService.selectStockByDirection(directionCode);
+            if (stockInfo == null) {
+                message.append("流向码:+").append(directionCode).append("库存状态异常,退货失败!");
+                continue;
+            }
+            ProductInfo productInfo = productService.selectByDirection(directionCode.substring(0, 10));
+
+            // 创建入库单,type为2,创建入库明细,修改stock
+            EntryOrderInfo entryOrderInfo = entryService.generateEntryOrderInfo(EntryUtils.TH_ENTRY, userInfo, new Date(), "", auth);
+            EntryDetailInfo entryDetailInfo = new EntryDetailInfo(entryOrderInfo.getCode(), directionCode, productInfo.getDirectionCode(),
+                    productInfo.getName(), productInfo.getManufacturer(), new Date(),userInfo.getCompanynumber());
+            entryOrderInfo.setNum(1);
+            entryDetailInfo.setNum(1);
+
+            SaleOrderDetailInfo detailInfo = saleOrderService.selectOrderByDirectionReturnflag(directionCode,(byte) 0, null);
+            if (detailInfo == null){
+                msg = new Msg(ERROR_50001,"没有找到销售订单详情或该商品已退货");
+                break;
+            }
+            CustomerInfo customerInfo = customerService.getCustomerBySaleOrder(detailInfo.getOrdercode());
+            Byte flag = 1;
+            detailInfo.setReturnflag(flag);
+            saleOrderDetailService.updateById(detailInfo);
+
+            int i = stockService.doReturn(stockInfo,userInfo,customerInfo, new Date());
+
+            if (i != 1){
+                message.append("流向码:+").append(directionCode).append("库存更新失败!");
+            }else {
+                entryService.save(entryOrderInfo);
+                entryDetailService.save(entryDetailInfo);
+            }
+        }
+
+        if (StringUtils.isNotBlank(message)){
+            msg.setCode(ERROR_999.getCode());
+            msg.setMessage(message.toString());
+        }
+        return msg;
+    }
+
+    @PostMapping("/returnBatch")
+    @JsonParams
+    public List<Msg> returnBatch(@RequestBody JSONArray jsonArray){
+        if (jsonArray.size() < 1){
+            return null;
+        }
+        List<Msg>msgList = new ArrayList<>();
+        for (int i =0 ; i<jsonArray.size(); i++){
+            Msg msg = new Msg(true);
+            JSONObject object = jsonArray.getJSONObject(i);
+            String userId = object.getString("userId");
+            String datetime = object.getString("datetime");
+            String directionCode = object.getString("directionCode");
+            Date date;
+            DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            try {
+                date = dateFormat.parse(datetime);
+            } catch (ParseException e) {
+                msg = new Msg(ERROR_10003, "日期类型错误!");
+                msgList.add(msg);
+                continue;
+            }
+            UserInfo userInfo = userService.getById(userId);
+            String auth = getAuth();
+            auth = StringUtils.isBlank(auth) ? "NOAUTH" : auth;
+            EntryOrderInfo entryOrderInfo = entryService.generateEntryOrderInfo(EntryUtils.TH_ENTRY, userInfo, new Date(), "", auth);
+            List<ProductVo>productVos = new ArrayList<>();
+            if (StringUtils.isBlank(directionCode) || FireworkDeal.isNotDirectionCode(directionCode)) {
+                msg = new Msg(ERROR_10004,"流向码无效");
+                msgList.add(msg);
+                continue;
+            }
+            ProductVo productVo = productService.selectVoByDirection(directionCode);
+            if (FireworkDeal.is22Characters(directionCode)) {
+                DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(directionCode);
+                FireworkDeal.getProductVos(directionCode,directionDetail,directionDetail,productVos,productVo);
+            }else {
+                productVos.add(productVo);
+            }
+
+            // 创建入库单,type为2,创建入库明细,修改stock
+            EntryDetailInfo entryDetailInfo = new EntryDetailInfo(entryOrderInfo.getCode(), directionCode, productVo.getDirectionCode(),
+                    productVo.getName(), productVo.getManufacturer(), new Date(),userInfo.getCompanynumber());
+            entryOrderInfo.setNum(1);
+            entryDetailInfo.setNum(1);
+
+            //先行校验是否存在不能退货的商品
+            boolean doReturnFlag = true;
+            for (ProductVo productVo1 : productVos){
+                StockInfo stockInfo = stockService.selectStockByDirection(productVo1.getDirectionCode());
+                SaleOrderDetailInfo detailInfo = saleOrderService.selectOrderByDirectionReturnflag(productVo1.getDirectionCode(),(byte) 0,datetime);
+                if (detailInfo == null || stockInfo == null){
+                    doReturnFlag = false;
+                    msg = new Msg(ERROR_50001,"没有找到销售订单详情或该商品已退货");
+                    break;
+                }
+            }
+
+            //如果不存在,进行退货操作
+            if (doReturnFlag){
+                for (ProductVo productVo1 : productVos){
+                    StockInfo stockInfo = stockService.selectStockByDirection(productVo1.getDirectionCode());
+                    SaleOrderDetailInfo detailInfo = saleOrderService.selectOrderByDirectionReturnflag(productVo1.getDirectionCode(),(byte) 0,datetime);
+                    CustomerInfo customerInfo = customerService.getCustomerBySaleOrder(detailInfo.getOrdercode());
+                    Byte flag = 1;
+                    detailInfo.setReturnflag(flag);
+                    saleOrderDetailService.updateById(detailInfo);
+
+                    int j = stockService.doReturn(stockInfo,userInfo,customerInfo, date);
+                    if (j == 0){
+                        msg = new Msg(ERROR_40001,"退货失败");
+                        break;
+                    }
+                }
+
+                entryService.save(entryOrderInfo);
+                entryDetailService.save(entryDetailInfo);
+            }
+
+            msgList.add(msg);
+        }
+        return msgList;
+    }
+
+    @PostMapping("/saleRecord1")
+    @ApiOperation(value = "实名购买查询(按流向码查询)", httpMethod = "POST")
+    @ApiImplicitParams({})
+    Object saleInquiry1(@RequestBody FilterObject jsonFilter) {
+        Integer pageIndex = jsonFilter.getPageIndex();
+        Integer pageSize = jsonFilter.getPageSize();
+        IPage page = saleOrderService.selectSaleRecord1(new Page<>(pageIndex, pageSize), jsonFilter.getFilter(),getUser());
+        return success(page);
+    }
+
+
+    @PostMapping("/saleRecord2")
+    @ApiOperation(value = "实名购买查询(按零售单位查询)", httpMethod = "POST")
+    @ApiImplicitParams({})
+    Object saleInquiry2(@RequestBody FilterObject jsonFilter) {
+        Integer pageIndex = jsonFilter.getPageIndex();
+        Integer pageSize = jsonFilter.getPageSize();
+        IPage page = saleOrderService.selectSaleRecord2(new Page<>(pageIndex, pageSize), jsonFilter.getFilter(),getUser());
+        return success(page);
+    }
+
+    @PostMapping("/saleRecord3")
+    @ApiOperation(value = "销售汇总统计", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码",required = true),
+            @ApiImplicitParam(name = "pageSize",value = "页大小",required = true),
+            @ApiImplicitParam(name = "filter.itemcode",value = "流向码",required = true),
+            @ApiImplicitParam(name = "filter.itemname",value = "产品名称",required = true),
+            @ApiImplicitParam(name = "filter.province",value = "省",required = true),
+            @ApiImplicitParam(name = "filter.city",value = "市",required = true),
+            @ApiImplicitParam(name = "filter.district",value = "区",required = true),
+            @ApiImplicitParam(name = "filter.street",value = "街道",required = true),
+            @ApiImplicitParam(name = "filter.committee",value = "委员会",required = true),
+            @ApiImplicitParam(name = "filter.starttime",value = "开始时间",required = true),
+            @ApiImplicitParam(name = "filter.endtime",value = "结束时间",required = true),
+            @ApiImplicitParam(name = "filter.safetysupervision",value = "监管分类",required = true),
+            @ApiImplicitParam(name = "filter.enterprisename",value = "企业名称",required = true),
+            @ApiImplicitParam(name = "filter.parententerprisename",value = "上级企业名称",required = true),
+    })
+    Object saleInquiry3(@RequestBody FilterObject jsonFilter) {
+        Integer pageIndex = jsonFilter.getPageIndex();
+        Integer pageSize = jsonFilter.getPageSize();
+        PageInfoExtension<Map> page = saleOrderService.selectSaleRecord3(new Page<>(pageIndex, pageSize), jsonFilter.getFilter(),getUser());
+        return success(page);
+    }
+
+
+    @PostMapping("/export/saleRecord3")
+    @ApiOperation(value = "销售汇总统计导出", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码",required = true),
+            @ApiImplicitParam(name = "pageSize",value = "页大小",required = true),
+            @ApiImplicitParam(name = "filter.itemcode",value = "流向码",required = true),
+            @ApiImplicitParam(name = "filter.itemname",value = "产品名称",required = true),
+            @ApiImplicitParam(name = "filter.province",value = "省",required = true),
+            @ApiImplicitParam(name = "filter.city",value = "市",required = true),
+            @ApiImplicitParam(name = "filter.district",value = "区",required = true),
+            @ApiImplicitParam(name = "filter.street",value = "街道",required = true),
+            @ApiImplicitParam(name = "filter.committee",value = "委员会",required = true),
+            @ApiImplicitParam(name = "filter.starttime",value = "开始时间",required = true),
+            @ApiImplicitParam(name = "filter.endtime",value = "结束时间",required = true),
+            @ApiImplicitParam(name = "filter.safetysupervision",value = "监管分类",required = true),
+            @ApiImplicitParam(name = "filter.enterprisename",value = "企业名称",required = true),
+            @ApiImplicitParam(name = "filter.parententerprisename",value = "上级企业名称",required = true),
+    })
+    Object exportSaleInquiry3(@RequestBody FilterObject jsonFilter) {
+        List<Map> list = saleOrderService.selectExportSaleRecord3( jsonFilter.getFilter(),getUser());
+        return success(list);
+    }
+
+    @PostMapping("/saleRecord4")
+    @ApiOperation(value = "实名销售分析导出", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码",required = true),
+            @ApiImplicitParam(name = "pageSize",value = "页大小",required = true),
+            @ApiImplicitParam(name = "filter.starttime",value = "开始时间",required = true),
+            @ApiImplicitParam(name = "filter.endtime",value = "结束时间",required = true),
+            @ApiImplicitParam(name = "filter.enterprisename",value = "上级企业名称",required = true),
+            @ApiImplicitParam(name = "filter.parententerprisename",value = "上级企业名称",required = true),
+            @ApiImplicitParam(name = "filter.identify",value = "购买人身份证",required = true),
+            @ApiImplicitParam(name = "filter.itemcode",value = "产品流向码",required = true),
+    })
+    Object saleInquiry4(@RequestBody FilterObject jsonFilter) {
+        Integer pageIndex = jsonFilter.getPageIndex();
+        Integer pageSize = jsonFilter.getPageSize();
+        IPage page = saleOrderService.selectSaleRecord4(new Page<>(pageIndex, pageSize), jsonFilter.getFilter(),getUser());
+
+        Msg result = success(page);
+
+        String jsonStr = JSON.toJSONString(result);
+        String base64Str = Base64.getEncoder().encodeToString(jsonStr.getBytes(StandardCharsets.UTF_8));
+
+        return base64Str;
+    }
+
+    @PostMapping("/customer/upload/{idCard}")
+    @ApiOperation(value = "补全customer照片信息", httpMethod = "POST")
+    Msg customerUpload(@PathVariable String idCard, MultipartFile file) {
+        customerService.uploadPhoto(idCard, file);
+        return success();
+    }
+
+    @PostMapping("/export/saleRecord4")
+    @ApiOperation(value = "实名销售分析", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "filter.starttime",value = "开始时间",required = true),
+            @ApiImplicitParam(name = "filter.endtime",value = "结束时间",required = true),
+            @ApiImplicitParam(name = "filter.enterprisename",value = "上级企业名称",required = true),
+            @ApiImplicitParam(name = "filter.parententerprisename",value = "上级企业名称",required = true),
+            @ApiImplicitParam(name = "filter.identify",value = "购买人身份证",required = true),
+            @ApiImplicitParam(name = "filter.itemcode",value = "产品流向码",required = true),
+    })
+    Object exportSaleInquiry4(@RequestBody FilterObject jsonFilter) {
+        List<Map> list = saleOrderService.selectExportSaleRecord4(jsonFilter.getFilter(), getUser());
+        return success(list);
+    }
+
+    /**
+    * @Description: 根据销售企业的单位编号和人员的身份证获取购买明细
+    * @date 2021/4/14 12:38
+    */
+    @PostMapping("/getPurchaseDetailInUnit")
+    @ApiOperation(value = "实名购买查询(按购买人查询)", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码",required = true),
+            @ApiImplicitParam(name = "pageSize",value = "页大小",required = true),
+            @ApiImplicitParam(name = "filter.starttime",value = "开始时间",required = true),
+            @ApiImplicitParam(name = "filter.endtime",value = "结束时间",required = true),
+            @ApiImplicitParam(name = "filter.identify",value = "省份证",required = true),
+            @ApiImplicitParam(name = "filter.enterprisenumber",value = "企业单位编号",required = true),
+    })
+    Object getPurchaseDetailInUnit(@RequestBody FilterObject jsonFilter) {
+        Integer pageIndex = jsonFilter.getPageIndex();
+        Integer pageSize = jsonFilter.getPageSize();
+        IPage page = saleOrderService.getPurchaseDetailInUnit(new Page<>(pageIndex, pageSize), jsonFilter.getFilter(),getUser());
+        return success(page);
+    }
+
+
+
+    @GetMapping(value = {"/soldNoStock/directionCode/{directionCode}/pageIndex/{pageIndex}/pageSize/{pageSize}",
+            "/soldNoStock/pageIndex/{pageIndex}/pageSize/{pageSize}"})
+    public Msg getSoldNoStockInfo(@PathVariable Integer pageIndex,
+                                  @PathVariable Integer pageSize,
+                                  String sort, String order,
+                                  @PathVariable(required = false) String directionCode) {
+        Msg msg = new Msg(true);
+        pageIndex = pageIndex == null? 10:pageIndex;
+        pageSize = pageSize == null? 10:pageSize;
+
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize, sort, order);
+        Map<String, Object> condition = new HashMap<>(4);
+        if (StringUtils.isNotBlank(directionCode)) {
+            condition.put("directionCode", directionCode);
+        }
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (userInfo.getCompanynumber() != null){
+            condition.put("companyNumber",userInfo.getCompanynumber());
+        }
+        pageInfo.setCondition(condition);
+        soldNoStockService.selectSoldNoStockDataGrid(pageInfo);
+
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    @GetMapping(value = "/dailySaleReport")
+    public Msg dailySaleReport(@RequestParam (value = "startDate")String startDate,
+                               @RequestParam (value = "endDate")String endDate,
+                               @RequestParam (value = "pageIndex")Integer pageIndex,
+                               @RequestParam (value = "pageSize")Integer pageSize,
+                               String sort, String order) {
+        Msg msg = new Msg(true);
+        if (StringUtils.isBlank(startDate) || StringUtils.isBlank(endDate)) {
+            msg.setCode(ERROR_10001.getCode());
+            msg.setMessage(ERROR_10001.getMsg()+":日期为空,查询失败!");
+            return msg;
+        }
+        pageIndex = pageIndex == null ? 0 : pageIndex ;
+        pageSize = pageSize == null ? 10 : pageSize ;
+
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        Map<String, Object> condition = new HashMap<>(4);
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (StringUtils.isNotBlank(userInfo.getCompanynumber())){
+            condition.put("companynumber",userInfo.getCompanynumber());
+        }
+        condition.put("startDate",startDate);
+        condition.put("endDate",endDate);
+        pageInfo.setCondition(condition);
+        PageInfoExtension pageInfoExtension = saleOrderService.selectDailySaleReport(pageInfo);
+        msg.setResult(pageInfoExtension);
+        return msg;
+    }
+
+    @GetMapping(value = "/info")
+    public Msg getOrderInfo(@RequestParam (value = "startDate")String startDate,
+                               @RequestParam (value = "endDate")String endDate,
+                               @RequestParam (value = "code",required = false)String code,
+                               @RequestParam (value = "pageIndex")Integer pageIndex,
+                               @RequestParam (value = "pageSize")Integer pageSize,
+                               String sort, String order) {
+        Msg msg = new Msg(true);
+        if (StringUtils.isBlank(startDate) || StringUtils.isBlank(endDate)) {
+            msg.setCode(ERROR_10001.getCode());
+            msg.setMessage(ERROR_10001.getMsg()+":日期为空,查询失败!");
+            return msg;
+        }
+        pageIndex = pageIndex == null ? 0 : pageIndex ;
+        pageSize = pageSize == null ? 10 : pageSize ;
+
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        Map<String, Object> condition = new HashMap<>(4);
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (StringUtils.isNotBlank(userInfo.getCompanynumber())){
+            condition.put("companynumber",userInfo.getCompanynumber());
+        }
+        if (StringUtils.isNotBlank(code)){
+            condition.put("code",code);
+        }
+        condition.put("startDate",startDate);
+        condition.put("endDate",endDate);
+        pageInfo.setCondition(condition);
+        saleOrderService.selectOrderDataGrid(pageInfo);
+
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    @GetMapping("/detail")
+    public Msg getSaleDetailByCode(@RequestParam("code")String code){
+        Msg msg = new Msg(true);
+        List<SaleOrderDetailInfo>detailInfos = saleOrderDetailService.selectByOrderCode(code);
+        msg.setResult(detailInfos);
+        return msg;
+    }
+
+    @GetMapping("/serialNo")
+    public Msg getSerialNo(){
+        Msg msg = new Msg(true);
+        UserInfo userInfo = userService.getById(getUser().getId());
+        int countNum = saleOrderService.getDailySaleCount(userInfo);
+        msg.setResult(countNum);
+        return msg;
+    }
+
+
+    @ApiOperation(value = "销售汇总统计", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码",required = true),
+            @ApiImplicitParam(name = "pageSize",value = "页大小",required = true),
+            @ApiImplicitParam(name = "filter.province",value = "省",required = true),
+            @ApiImplicitParam(name = "filter.city",value = "市",required = true),
+            @ApiImplicitParam(name = "filter.district",value = "区",required = true),
+            @ApiImplicitParam(name = "filter.street",value = "街道",required = true),
+            @ApiImplicitParam(name = "filter.committee",value = "委员会",required = true),
+            @ApiImplicitParam(name = "filter.starttime",value = "开始时间",required = true),
+            @ApiImplicitParam(name = "filter.endtime",value = "结束时间",required = true),
+            @ApiImplicitParam(name = "filter.safetysupervision",value = "监管分类",required = true),
+            @ApiImplicitParam(name = "filter.enterprisename",value = "企业名称",required = true),
+            @ApiImplicitParam(name = "filter.parententerprisename",value = "上级企业名称",required = true),
+    })
+    @PostMapping("/enterpriseESS")
+    public Msg enterpriseEnterSellStore(@RequestBody FilterObject jsonFilter){
+        Integer pageIndex = jsonFilter.getPageIndex();
+        Integer pageSize = jsonFilter.getPageSize();
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize);
+        UserInfo userInfo = userService.getById(getUser().getId());
+        saleOrderService.selectEnterpriseEnterSellStoreDataGrid(pageInfo,jsonFilter.getFilter(),userInfo);
+        return success(pageInfo);
+    }
+
+    @PostMapping("/enterpriseESSExport")
+        public Msg enterpriseEnterSellStoreExport(@RequestBody FilterObject jsonFilter){
+        UserInfo userInfo = userService.getById(getUser().getId());
+        List<EnterpriseDataVo> enterpriseDataVos =saleOrderService.selectEnterpriseEnterSellStoreData(jsonFilter.getFilter(),userInfo);
+        return success(enterpriseDataVos);
+    }
+
+    @PostMapping("/cityESS")
+    public Msg cityEnterSellStore(@RequestBody FilterObject jsonFilter){
+        Integer pageIndex = jsonFilter.getPageIndex();
+        Integer pageSize = jsonFilter.getPageSize();
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize);
+        saleOrderService.selectCityEnterSellStoreDataGrid(pageInfo,jsonFilter.getFilter());
+        return success(pageInfo);
+    }
+
+    @PostMapping("/createBatch")
+    @JsonParams
+    public List<Msg> createOrderBatch(@RequestParam String encryptStr){
+        String jsonStr = new String(Base64.getDecoder().decode(encryptStr), StandardCharsets.UTF_8);
+        JSONArray jsonArray = JSON.parseArray(jsonStr);
+
+        if (jsonArray.size() < 1){
+            return null;
+        }
+        List<Msg>msgList = new ArrayList<>();
+        for (int i = 0; i < jsonArray.size(); i++) {
+            JSONObject jsonObject = jsonArray.getJSONObject(i);
+//            Msg msg = dealOrderCreated(jsonObject);
+            Msg msg = createOrder(Base64.getEncoder().encodeToString(jsonObject.toJSONString().getBytes(StandardCharsets.UTF_8)));
+            msgList.add(msg);
+        }
+
+        return msgList;
+    }
+
+    private Msg dealOrderCreated(JSONObject jsonObject) {
+        JSONObject customer = jsonObject.getJSONObject("customer");
+        JSONObject order = jsonObject.getJSONObject("order");
+        JSONArray detailObject = jsonObject.getJSONArray("detailInfos");
+        String userId = jsonObject.getString("operator");
+        Integer num = order.getInteger("boxNum");
+        String total = order.getString("total");
+        String pay = order.getString("pay");
+        String change = order.getString("change");
+        String type = jsonObject.getString("type");
+        String time = jsonObject.getString("datetime");
+        Date salesTime;
+        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        try {
+            salesTime = dateFormat.parse(time);
+        } catch (ParseException e) {
+            return new Msg(ERROR_10003,"出库日期类型错误");
+        }
+
+        if (customer == null || detailObject == null || detailObject.isEmpty()) {
+            return new Msg(ERROR_10001);
+        }
+
+        boolean isUser = userService.checkUserById(userId);
+        if (!isUser) {
+            return new Msg(ERROR_20001);
+        }
+        UserInfo userInfo = userService.getById(userId);
+
+        List<SaleOrderDetailInfo> detailInfoList = new ArrayList<>();
+        for (int j = 0; j < detailObject.size(); j++) {
+            // 遍历 jsonArray 数组,把每一个对象转成 json 对象
+            JSONObject object = detailObject.getJSONObject(j);
+            String directionCodeStr = object.getString("directionCode");
+            if (FireworkDeal.isNotDirectionCode(directionCodeStr)) {
+                return new Msg(ERROR_10004,"流向码:"+directionCodeStr+"错误");
+            }
+
+            if (!productService.hasProductByDire(directionCodeStr.substring(0, 10))) {
+                return new Msg(ERROR_10004,"流向码:"+directionCodeStr+"错误");
+            }
+            ProductInfo productInfo = productService.selectByDirection(directionCodeStr.substring(0, 10));
+            if (FireworkDeal.is22Characters(directionCodeStr)){
+                List<ProductVo>productVoList = new ArrayList<>();
+                DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(directionCodeStr);
+                ProductVo productVo = productService.selectVoByDirection(directionCodeStr);
+                FireworkDeal.getProductVos(directionCodeStr,directionDetail,directionDetail,productVoList,productVo);
+                for (ProductVo productVo1 : productVoList){
+                    SaleOrderDetailInfo detailInfo = new SaleOrderDetailInfo(productInfo.getDirectionCode(), productVo1.getDirectionCode());
+                    ProductPriceInfo productPriceInfo = productPriceService.selectByCode(userInfo.getCompanynumber(), productVo1.getName());
+                    BigDecimal price = productPriceInfo == null ? new BigDecimal("0") : productPriceInfo.getPrice() == null ? BigDecimal.valueOf(0) : productPriceInfo.getPrice();
+                    detailInfo.setPrice(price);
+                    detailInfo.setItemname(productVo1.getName());
+                    detailInfo.setSpecification(productVo1.getSpecification());
+                    detailInfoList.add(detailInfo);
+                }
+                num = productVoList.size();
+            }else {
+                SaleOrderDetailInfo detailInfo = new SaleOrderDetailInfo(productInfo.getDirectionCode(), directionCodeStr);
+                ProductPriceInfo productPriceInfo = productPriceService.selectByCode(userInfo.getCompanynumber(), productInfo.getName());
+                BigDecimal price = productPriceInfo == null ? new BigDecimal("0") : productPriceInfo.getPrice() == null ? BigDecimal.valueOf(0) : productPriceInfo.getPrice();
+                detailInfo.setPrice(price);
+                detailInfo.setItemname(productInfo.getName());
+                detailInfo.setSpecification(productInfo.getSpecification());
+                detailInfoList.add(detailInfo);
+                num = 1;
+            }
+        }
+
+        String idCardNum = customer.getString("idCardNumber");
+        String workerName = customer.getString("workerName");
+        if (StringUtils.isBlank(idCardNum) || StringUtils.isBlank(workerName)) {
+            return new Msg(ERROR_50001,"身份信息有误");
+        }
+
+        String auth = getAuth();
+        auth = StringUtils.isBlank(auth) ? "NOAUTH" : auth;
+        idCardNum = idCardNum.replaceAll("[\r\n]","").trim();
+
+        //校验数据是否已上传
+        CustomerInfo customerExist = customerService.getCustomerByIdCardNum(idCardNum);
+        if (customerExist != null){
+            SaleOrderInfo orderInfo = saleOrderService.isExist(customerExist.getId(),userInfo.getCompanynumber(),salesTime);
+            if (orderInfo != null){
+                return new Msg(SUCCESS,"数据已上传");
+            }
+        }
+//        return saleOrderService.doSalesProcess(customer, num, idCardNum, userInfo, detailInfoList, type, salesTime, pay, total, change, auth);
+        return null;
+    }
+
+
+    /**
+     * @Description: 销售查询
+     * @date 2021/11/10 9:32
+     */
+    @PostMapping("/salenum-query")
+    @ApiOperation(value = "销售查询")
+    Object getSaleNumInfo(@RequestBody FilterObject filter) {
+        Integer pageIndex = filter.getPageIndex();
+        Integer pageSize = filter.getPageSize();
+        IPage page = saleOrderDetailService.selectSaleNumInfo(new Page<>(pageIndex, pageSize), filter.getFilter(), getUser());
+        return success(page);
+    }
+
+
+    @PostMapping("/salenum-detail")
+    @ApiOperation(value = "销售详情")
+    Object getSaleNumInfoDetail(@RequestBody FilterObject filter) {
+        Integer pageIndex = filter.getPageIndex();
+        Integer pageSize = filter.getPageSize();
+        IPage page = saleOrderDetailService.selectSaleNumInfoDetail(new Page<>(pageIndex, pageSize), filter.getFilter(), getUser());
+        return success(page);
+    }
+
+
+    @GetMapping("/idcard-check")
+    @ApiOperation(value = "身份证校验")
+    Msg idcardCheck(@RequestParam String idcard) {
+        boolean flag = IdCardUtil.strongVerifyIdNumber(idcard);
+        return success(flag);
+    }
+
+    @PostMapping("/importSaleProduct")
+    @ApiOperation(value = "导入销售流向码",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "file",value = "文件",required = true),
+    })
+    public Msg importSaleProduct(MultipartFile file){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        String filesave ="";
+        try {
+            SimpleDateFormat sdf = new SimpleDateFormat( "yyyyMMddHHmmssSSS" );
+            if (file == null)
+            {
+                msg.setCode("404");
+                msg.setMessage("未找到上传文件");
+                return msg;
+            }
+
+            long size = file.getSize();
+            if(0 == size)
+            {
+                msg.setCode("404");
+                msg.setMessage("上传文件大小为空");
+                return msg;
+            }
+
+            if(!FileOptUtils.isDirExists(productPath)){
+                msg.setCode("500");
+                msg.setMessage("发生错误或不为目录");
+                return msg;
+            }
+
+            filesave = productPath + getUser().getUsername() + "_" + sdf.format(new Date()) +".xlsx";
+
+            file.transferTo(new File(filesave));
+            InputStream in = new FileInputStream(filesave);
+            String name = file.getOriginalFilename();
+            Boolean isExcel2007 = name.substring(name.lastIndexOf(".") + 1).endsWith("xlsx")? true:false;
+            BooleanReason blret = excelExportService.imporSaleProductExcel(in,getUser().getUsername(),isExcel2007);
+            if(blret.getValue().equals(false))
+            {
+                msg.setCode("500");
+                msg.setMessage(blret.getResultmsg());
+                return msg;
+            }else {
+                msg.setMessage(blret.getResultmsg());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            msg.setCode("500");
+            msg.setMessage("导入发生错误");
+            return msg;
+        }
+
+        return msg;
+    }
+
+
+    @PostMapping("/importSaleOrder")
+    @ApiOperation(value = "导入实名销售",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "file",value = "文件",required = true),
+    })
+    public Msg importSaleOrder(MultipartFile file){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        String filesave ="";
+        try {
+            SimpleDateFormat sdf = new SimpleDateFormat( "yyyyMMddHHmmssSSS" );
+            if (file == null)
+            {
+                msg.setCode("404");
+                msg.setMessage("未找到上传文件");
+                return msg;
+            }
+
+            long size = file.getSize();
+            if(0 == size)
+            {
+                msg.setCode("404");
+                msg.setMessage("上传文件大小为空");
+                return msg;
+            }
+
+            if(!FileOptUtils.isDirExists(productPath)){
+                msg.setCode("500");
+                msg.setMessage("发生错误或不为目录");
+                return msg;
+            }
+
+            filesave = productPath + getUser().getUsername() + "_" + sdf.format(new Date()) +".xlsx";
+
+            file.transferTo(new File(filesave));
+            InputStream in = new FileInputStream(filesave);
+            String name = file.getOriginalFilename();
+            Boolean isExcel2007 = name.substring(name.lastIndexOf(".") + 1).endsWith("xlsx")? true:false;
+            BooleanReason blret = excelExportService.imporSaleOrderExcel(in,getUser().getUsername(),isExcel2007);
+            if(blret.getValue().equals(false))
+            {
+                msg.setCode("500");
+                msg.setMessage(blret.getResultmsg());
+                return msg;
+            }else {
+                msg.setMessage(blret.getResultmsg());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            msg.setCode("500");
+            msg.setMessage("导入发生错误");
+            return msg;
+        }
+
+        return msg;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Controller/SelfCheckReportController.java b/src/main/java/com/gk/firework/Controller/SelfCheckReportController.java
new file mode 100644
index 0000000..abf3224
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/SelfCheckReportController.java
@@ -0,0 +1,166 @@
+package com.gk.firework.Controller;
+
+import com.gk.firework.Controller.Base.BaseController;
+import com.gk.firework.Domain.SelfCheckReport;
+import com.gk.firework.Domain.Utils.JsonUtils;
+import com.gk.firework.Domain.Utils.Msg;
+import com.gk.firework.Domain.Vo.SelfCheckReportSearchVo;
+import com.gk.firework.Domain.Vo.SelfCheckReportVo;
+import com.gk.firework.Service.SelfCheckReportService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Api(tags = "隐患自查情况报送接口")
+@RequestMapping("/selfcheckreport")
+@RestController
+public class SelfCheckReportController extends BaseController {
+
+    @Autowired
+    private SelfCheckReportService selfCheckReportService;
+
+    @ApiOperation(value = "创建新的报告",httpMethod="POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "yhlevel",value = "隐患等级,1-一般隐患,2-重大隐患",defaultValue = "1",required = true),
+            @ApiImplicitParam(name = "status",value = "隐患状态,1-未整改,2-已整改",defaultValue = "1",required = true),
+            @ApiImplicitParam(name = "price",value = "整改资金,单位(RMB元),支持小数点后2位(RMB分)",defaultValue = "0.00",required = true),
+            @ApiImplicitParam(name = "chargeperson",value = "责任人名字",defaultValue = "",required = true),
+            @ApiImplicitParam(name = "endtime",value = "整改期限,YY-MM-DD HH:MM:SS",required = true),
+            @ApiImplicitParam(name = "yhdesc",value = "隐患描述",required = true),
+            @ApiImplicitParam(name = "solution",value = "整改措施",required = true)
+    })
+    @PostMapping( "/new")
+    public Object newReport(@RequestBody SelfCheckReportVo reportVo){
+        Msg msg = new Msg();
+        msg.setCode("400");
+        Long companyId = getUser().getCompanyid();
+        if(companyId > 0){
+            reportVo.setEid(companyId);
+            if(selfCheckReportService.createNewReport(reportVo) > 0){
+                msg.setCode("200");
+                msg.setResult(1);
+            }else {
+                msg.setCode("301");
+                msg.setMessage("新增报送记录出错");
+            }
+        }else {
+            msg.setCode("301");
+            msg.setMessage("权限错误");
+        }
+        return msg;
+    }
+
+    @ApiOperation(value = "根据隐患ID查找报告",httpMethod="GET")
+    @ApiImplicitParam(name = "id",value = "隐患ID",required = true,defaultValue = "0")
+    @RequestMapping(value = "/find/one",method = RequestMethod.GET)
+    public Object findById(@RequestParam(name = "id",required = true) Long id){
+        Msg msg = new Msg();
+        msg.setCode("400");
+        SelfCheckReport report = selfCheckReportService.getSelfCheckReportById(id);
+        if(report!=null){
+            if(getUser().getCompanyid()==null || getUser().getCompanyid().longValue()<=0 || getUser().getCompanyid().equals(report.getEid())){
+                msg.setResult(report);
+                msg.setCode("200");
+            }else {
+                msg.setMessage("权限错误");
+            }
+        }else {
+            msg.setMessage("未找到记录");
+        }
+        return msg;
+    }
+
+    @ApiOperation(value = "查找报告列表",httpMethod="POST",notes = "查询条件优先级别:企业ID查找 > 企业名称查找 > 省市区查找")
+    @RequestMapping(value = "/find/list",method = RequestMethod.POST)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "eid",value = "企业ID",required = false),
+            @ApiImplicitParam(name = "ename",value = "企业名称",required = false),
+            @ApiImplicitParam(name = "status",value = "隐患状态,1-未整改,2-已整改",required = false,defaultValue = "0"),
+            @ApiImplicitParam(name = "yhlevel",value = "隐患等级,1-一般隐患,2-重大隐患",required = false,defaultValue = "0"),
+            @ApiImplicitParam(name = "startTime",value = "查询起始时间 YY-MM-DD HH:MM:SS",required = false),
+            @ApiImplicitParam(name = "endTime",value = "查询截止时间 YY-MM-DD HH:MM:SS",required = false),
+            @ApiImplicitParam(name = "province",value = "省份",required = false),
+            @ApiImplicitParam(name = "city",value = "市",required = false),
+            @ApiImplicitParam(name = "district",value = "区",required = false),
+            @ApiImplicitParam(name = "street",value = "街道",required = false),
+            @ApiImplicitParam(name = "committee",value = "居委会",required = false),
+            @ApiImplicitParam(name = "page",value = "当前页码",required = true,defaultValue = "1"),
+            @ApiImplicitParam(name = "pageSize",value = "每页条目数",required = true,defaultValue = "20")
+    })
+    public Object findList(@RequestBody SelfCheckReportSearchVo searchVo){
+        Msg msg = new Msg();
+        msg.setCode("400");
+        //参数校验
+        if(searchVo.getStartTime() != null && searchVo.getEndTime() != null){
+            if(searchVo.getStartTime().after(searchVo.getEndTime()) ){
+                msg.setMessage("时间区间错误");
+                return msg;
+            }
+        }
+        if(searchVo.getStatus() == null || searchVo.getStatus() <0 || searchVo.getStatus() >2) {
+            searchVo.setStatus((byte)0);
+        }
+        if(searchVo.getYhlevel() == null ||searchVo.getYhlevel() <0 ||searchVo.getYhlevel() >2){
+            searchVo.setYhlevel((byte)0);
+        }
+        //企业用户登录查自己
+        if(getUser().getCompanyid()!= null && getUser().getCompanyid().longValue()>0){
+            searchVo.setEid(getUser().getCompanyid());
+        }
+        List<SelfCheckReport> list = selfCheckReportService.findSelfCheckReportListWithAllCondition(searchVo);
+        if(list!=null && list.size()>0){
+            msg.setCode("200");
+            msg.setResult(list);
+            Map<String,Object> rs = new HashMap();
+            rs.put("totalCount",searchVo.getTotalCount());
+            rs.put("page",searchVo.getPage());
+            rs.put("pageSize",searchVo.getPageSize());
+            msg.setMessage(JsonUtils.toJson(rs));
+        }else {
+            msg.setCode("200");
+            msg.setMessage("未找到结果");
+        }
+        return msg;
+    }
+
+    @ApiOperation(value = "更新报告",httpMethod="POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id",value = "隐患ID",required = true),
+            @ApiImplicitParam(name = "yhlevel",value = "隐患等级,1-一般隐患,2-重大隐患",defaultValue = "1",required = false),
+            @ApiImplicitParam(name = "status",value = "隐患状态,1-未整改,2-已整改",defaultValue = "1",required = false),
+            @ApiImplicitParam(name = "price",value = "整改资金,单位(RMB元),支持小数点后2位(RMB分)",defaultValue = "0.00",required = false),
+            @ApiImplicitParam(name = "chargeperson",value = "责任人名字",defaultValue = "",required = false),
+            @ApiImplicitParam(name = "endtime",value = "整改期限,YY-MM-DD HH:MM:SS",required = false),
+            @ApiImplicitParam(name = "yhdesc",value = "隐患描述",required = false),
+            @ApiImplicitParam(name = "solution",value = "整改措施",required = false)
+    })
+    @PostMapping("/update")
+    public Object updateReport(@RequestBody SelfCheckReportVo reportVo){
+        Msg msg = new Msg();
+        msg.setCode("400");
+        if(getUser().getCompanyid()!=null && getUser().getCompanyid().longValue() != reportVo.getEid().longValue()){
+            msg.setMessage("权限错误");
+            return msg;
+        }
+        if(reportVo.getEid().longValue()>0 && reportVo.getId().longValue() >0){
+            int updateResult = selfCheckReportService.updateSelfCheckReport(reportVo);
+            if(updateResult > 0){
+                msg.setCode("200");
+            }else {
+                msg.setMessage("参数错误");
+            }
+        }else {
+            msg.setMessage("参数缺失");
+        }
+        return msg;
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Controller/StandardController.java b/src/main/java/com/gk/firework/Controller/StandardController.java
new file mode 100644
index 0000000..6ccabb5
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/StandardController.java
@@ -0,0 +1,540 @@
+package com.gk.firework.Controller;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Controller.Base.BaseController;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.Utils.FilterObject;
+import com.gk.firework.Domain.Vo.StandardTemplate1Vo;
+import com.gk.firework.Service.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@Api(tags = "安全生产标准化管理")
+@RequestMapping("/")
+@RestController
+public class StandardController extends BaseController {
+
+    @Autowired
+    private StandardTemplate1Service standardTemplate1Service;
+    @Autowired
+    private StandardLawListService standardLawListService;
+    @Autowired
+    private StandardEducationLegerService standardEducationLegerService;
+    @Autowired
+    private StandardGuardRollService standardGuardRollService;
+    @Autowired
+    private StandardDeviceToolsLegerService standardDeviceToolsLegerService;
+    @Autowired
+    private StandardProductLegerService standardProductLegerService;
+    @Autowired
+    private StandardHiddenDangerLegerService standardHiddenDangerLegerService;
+    @Autowired
+    private StandardSupplyMarketObjectService standardSupplyMarketObjectService;
+    @Autowired
+    private StandardConferenceRecordService standardConferenceRecordService;
+    @Autowired
+    private StandardRewardRecordService standardRewardRecordService;
+
+    /**
+     * @Description: 查询简单模板
+     * @date 2021/4/29 13:59
+     */
+    @ApiOperation(value = "查询简单模板", notes = "分页查询", httpMethod = "POST")
+    @PostMapping("/standardList")
+    Object template1(@RequestBody FilterObject filterObject) {
+        Integer pageIndex = filterObject.getPageIndex();
+        Integer pageSize = filterObject.getPageSize();
+        IPage page = standardTemplate1Service.selectPage(new Page<>(pageIndex, pageSize), filterObject.getFilter(),getUser());
+        return success(page);
+    }
+
+    /**
+     * @Description: 新增简单模板
+     * @date 2021/4/29 15:42
+     */
+    @ApiOperation(value = "新增简单模板", httpMethod = "POST")
+    @PostMapping("/addstandard")
+    Object addStandard(StandardTemplate1Vo standardTemplate1Vo) {
+        standardTemplate1Service.addStandard(standardTemplate1Vo,getUser());
+        return success();
+    }
+
+    /**
+    * @Description: 修改简单模板
+    * @date 2021/4/30 16:13
+    */
+    @ApiOperation(value = "修改简单模板", httpMethod = "PUT")
+    @PostMapping("/putstandard")
+    Object modStandard(StandardTemplate1Vo standardTemplate1Vo) {
+        standardTemplate1Service.modStandard(standardTemplate1Vo,getUser());
+        return success();
+    }
+
+    /**
+     * @Description: 删除简单模板
+     * @date 2021/4/30 16:21
+     */
+    @ApiOperation(value = "删除简单模板", httpMethod = "DELETE")
+    @PostMapping("/delstandard")
+    Object delStandard(@RequestParam Long id) {
+        standardTemplate1Service.delStandard(id, getUser());
+        return success();
+    }
+
+    /**
+    * @Description: 适用的法律法规清单
+    * @date 2021/5/8 13:50
+    */
+    @ApiOperation(value = "查询适用的法律法规清单", notes = "分页查询", httpMethod = "POST")
+    @PostMapping("/queryStandardLawList")
+    Object queryStandardLawList(@RequestBody FilterObject filterObject) {
+        Integer pageIndex = filterObject.getPageIndex();
+        Integer pageSize = filterObject.getPageSize();
+        IPage page = standardLawListService.selectPage(new Page<>(pageIndex, pageSize), filterObject.getFilter(),getUser());
+        return success(page);
+    }
+
+
+    /**
+     * @Description: 新增适用的法律法规清单
+     * @date 2021/5/8 13:50
+     */
+    @ApiOperation(value = "新增适用的法律法规清单", httpMethod = "POST")
+    @PostMapping("/addstandardLawList")
+    Object addStandardLawList(StandardLawList standardLawList) {
+        standardLawListService.addStandardLawList(standardLawList,getUser());
+        return success();
+    }
+
+
+    /**
+     * @Description: 修改适用的法律法规清单
+     * @date 2021/5/8 13:50
+     */
+    @ApiOperation(value = "修改适用的法律法规清单", httpMethod = "PUT")
+    @PostMapping("/putstandardLawList")
+    Object modStandardLawList(StandardLawList standardLawList) {
+        standardLawListService.modStandardLawList(standardLawList,getUser());
+        return success();
+    }
+
+    /**
+     * @Description: 删除适用的法律法规清单
+     * @date 2021/5/8 13:50
+     */
+    @ApiOperation(value = "删除适用的法律法规清单", httpMethod = "DELETE")
+    @PostMapping("/delstandardLawList")
+    Object delStandardLawList(@RequestParam Long id) {
+        standardLawListService.delStandardLawList(id,getUser());
+        return success();
+    }
+
+
+    /**
+    * @Description: 从业人员教育培训台账
+    * @date 2021/5/8 16:29
+    */
+    @ApiOperation(value = "查询从业人员教育培训台账", notes = "分页查询", httpMethod = "POST")
+    @PostMapping("/queryStandardEducationLeger")
+    Object queryStandardEducationLeger(@RequestBody FilterObject filterObject) {
+        Integer pageIndex = filterObject.getPageIndex();
+        Integer pageSize = filterObject.getPageSize();
+        IPage page = standardEducationLegerService.selectPage(new Page<>(pageIndex, pageSize), filterObject.getFilter(),getUser());
+        return success(page);
+    }
+
+    /**
+     * @Description: 新增从业人员教育培训台账
+     * @date 2021/5/8 13:50
+     */
+    @ApiOperation(value = "新增从业人员教育培训台账", httpMethod = "POST")
+    @PostMapping("/addstandardEducationLeger")
+    Object addStandardEducationLeger(StandardEducationLeger standardEducationLeger) {
+        standardEducationLegerService.addStandardEducationLeger(standardEducationLeger,getUser());
+        return success();
+    }
+
+    /**
+     * @Description: 修改从业人员教育培训台账
+     * @date 2021/5/8 13:50
+     */
+    @ApiOperation(value = "修改从业人员教育培训台账", httpMethod = "PUT")
+    @PostMapping("/putstandardEducationLeger")
+    Object modStandardEducationLeger(StandardEducationLeger standardEducationLeger) {
+        standardEducationLegerService.modStandardEducationLeger(standardEducationLeger,getUser());
+        return success();
+    }
+
+    /**
+     * @Description: 删除从业人员教育培训台账
+     * @date 2021/5/8 13:50
+     */
+    @ApiOperation(value = "删除从业人员教育培训台账", httpMethod = "DELETE")
+    @PostMapping("/delstandardEducationLeger")
+    Object delStandardEducationLeger(@RequestParam Long id) {
+        standardEducationLegerService.delStandardEducationLeger(id,getUser());
+        return success();
+    }
+
+
+    /**
+     * @Description: 查询保管员和守护员名册
+     * @date 2021/5/8 16:29
+     */
+    @ApiOperation(value = "查询保管员和守护员名册", notes = "分页查询", httpMethod = "POST")
+    @PostMapping("/queryStandardGuardRoll")
+    Object queryStandardGuardRoll(@RequestBody FilterObject filterObject) {
+        Integer pageIndex = filterObject.getPageIndex();
+        Integer pageSize = filterObject.getPageSize();
+        IPage page = standardGuardRollService.selectPage(new Page<>(pageIndex, pageSize), filterObject.getFilter(),getUser());
+        return success(page);
+    }
+
+
+    /**
+     * @Description: 新增保管员和守护员名册
+     * @date 2021/5/8 13:50
+     */
+    @ApiOperation(value = "新增从业人员教育培训台账", httpMethod = "POST")
+    @PostMapping("/addstandardGuardRoll")
+    Object addStandardGuardRoll(@RequestBody StandardGuardRoll standardGuardRoll) {
+        standardGuardRollService.addStandardGuardRoll(standardGuardRoll,getUser());
+        return success();
+    }
+
+    /**
+     * @Description: 修改保管员和守护员名册
+     * @date 2021/5/8 13:50
+     */
+    @ApiOperation(value = "新增从业人员教育培训台账", httpMethod = "PUT")
+    @PostMapping("/putstandardGuardRoll")
+    Object modStandardGuardRoll(@RequestBody StandardGuardRoll standardGuardRoll) {
+        standardGuardRollService.modStandardGuardRoll(standardGuardRoll,getUser());
+        return success();
+    }
+
+    /**
+     * @Description: 删除保管员和守护员名册
+     * @date 2021/5/8 13:50
+     */
+    @ApiOperation(value = "删除从业人员教育培训台账", httpMethod = "DELETE")
+    @PostMapping("/delstandardGuardRoll")
+    Object delStandardGuardRoll(@RequestParam Long id) {
+        standardGuardRollService.delStandardGuardRoll(id,getUser());
+        return success();
+    }
+
+    /**
+    * @Description: 安全设施设备、消防器材和运输工具台账
+    * @date 2021/5/18 9:24
+    */
+    @ApiOperation(value = "查询安全设施设备、消防器材和运输工具台账", notes = "分页查询", httpMethod = "POST")
+    @PostMapping("/queryDeviceToolsLeger")
+    Object queryDeviceToolsLeger(@RequestBody FilterObject filterObject) {
+        Integer pageIndex = filterObject.getPageIndex();
+        Integer pageSize = filterObject.getPageSize();
+        IPage page = standardDeviceToolsLegerService.selectPage(new Page<>(pageIndex, pageSize), filterObject.getFilter(),getUser());
+        return success(page);
+    }
+
+
+    /**
+     * @Description: 新增安全设施设备、消防器材和运输工具台账
+     * @date 2021/5/18 9:24
+     */
+    @ApiOperation(value = "deviceToolsLeger", httpMethod = "POST")
+    @PostMapping("/adddeviceToolsLeger")
+    Object addDeviceToolsLeger(@RequestBody StandardDeviceToolsLeger standardDeviceToolsLeger) {
+        standardDeviceToolsLegerService.addDeviceToolsLeger(standardDeviceToolsLeger,getUser());
+        return success();
+    }
+
+    /**
+     * @Description: 新增安全设施设备、消防器材和运输工具台账
+     * @date 2021/5/18 9:24
+     */
+    @ApiOperation(value = "deviceToolsLeger", httpMethod = "PUT")
+    @PostMapping("/putdeviceToolsLeger")
+    Object modDeviceToolsLeger(@RequestBody StandardDeviceToolsLeger standardDeviceToolsLeger) {
+        standardDeviceToolsLegerService.modDeviceToolsLeger(standardDeviceToolsLeger,getUser());
+        return success();
+    }
+
+    /**
+     * @Description: 删除安全设施设备、消防器材和运输工具台账
+     * @date 2021/5/18 9:24
+     */
+    @ApiOperation(value = "deviceToolsLeger", httpMethod = "DELETE")
+    @PostMapping("/deldeviceToolsLeger")
+    Object modDeviceToolsLeger(@RequestParam Long id) {
+        standardDeviceToolsLegerService.delDeviceToolsLeger(id,getUser());
+        return success();
+    }
+
+
+    /**
+     * @Description: 经营产品信息台账
+     * @date 2021/5/18 9:24
+     */
+    @ApiOperation(value = "查询经营产品信息台账", notes = "分页查询", httpMethod = "POST")
+    @PostMapping("/queryProductLeger")
+    Object queryProductLeger(@RequestBody FilterObject filterObject) {
+        Integer pageIndex = filterObject.getPageIndex();
+        Integer pageSize = filterObject.getPageSize();
+        IPage page = standardProductLegerService.selectPage(new Page<>(pageIndex, pageSize), filterObject.getFilter(),getUser());
+        return success(page);
+    }
+
+
+    /**
+     * @Description: 新增经营产品信息台账
+     * @date 2021/5/18 9:24
+     */
+    @ApiOperation(value = "新增经营产品信息台账", httpMethod = "POST")
+    @PostMapping("/addproductLeger")
+    Object addProductLeger(@RequestBody StandardProductLeger standardProductLeger) {
+        standardProductLegerService.addProductLeger(standardProductLeger,getUser());
+        return success();
+    }
+
+
+    /**
+     * @Description: 修改经营产品信息台账
+     * @date 2021/5/18 9:24
+     */
+    @ApiOperation(value = "修改经营产品信息台账", httpMethod = "PUT")
+    @PostMapping("/putproductLeger")
+    Object modProductLeger(@RequestBody StandardProductLeger standardProductLeger) {
+        standardProductLegerService.modProductLeger(standardProductLeger,getUser());
+        return success();
+    }
+
+    /**
+     * @Description: 删除经营产品信息台账
+     * @date 2021/5/18 9:24
+     */
+    @ApiOperation(value = "删除经营产品信息台账", httpMethod = "DELETE")
+    @PostMapping("/delproductLeger")
+    Object delProductLeger(@RequestParam Long id) {
+        standardProductLegerService.delProductLeger(id,getUser());
+        return success();
+    }
+
+
+    /**
+     * @Description: 隐患排查治理台账
+     * @date 2021/5/18 9:24
+     */
+    @ApiOperation(value = "查询隐患排查治理台账", notes = "分页查询", httpMethod = "POST")
+    @PostMapping("/queryHiddenDangerLeger")
+    Object queryHiddenDangerLeger(@RequestBody FilterObject filterObject) {
+        Integer pageIndex = filterObject.getPageIndex();
+        Integer pageSize = filterObject.getPageSize();
+        IPage page = standardHiddenDangerLegerService.selectPage(new Page<>(pageIndex, pageSize), filterObject.getFilter(),getUser());
+        return success(page);
+    }
+
+    /**
+     * @Description: 新增隐患排查治理台账
+     * @date 2021/5/18 9:24
+     */
+    @ApiOperation(value = "新增隐患排查治理台账", notes = "分页查询", httpMethod = "POST")
+    @PostMapping("/addhiddenDangerLeger")
+    Object addHiddenDangerLeger(@RequestBody StandardHiddenDangerLeger standardHiddenDangerLeger) {
+        standardHiddenDangerLegerService.addHiddenDangerLeger(standardHiddenDangerLeger, getUser());
+        return success();
+    }
+
+
+    /**
+     * @Description: 修改隐患排查治理台账
+     * @date 2021/5/18 9:24
+     */
+    @ApiOperation(value = "修改隐患排查治理台账", httpMethod = "PUT")
+    @PostMapping("/puthiddenDangerLeger")
+    Object modHiddenDangerLeger(@RequestBody StandardHiddenDangerLeger standardHiddenDangerLeger) {
+        standardHiddenDangerLegerService.modHiddenDangerLeger(standardHiddenDangerLeger, getUser());
+        return success();
+    }
+
+    /**
+     * @Description: 删除隐患排查治理台账
+     * @date 2021/5/18 9:24
+     */
+    @ApiOperation(value = "删除隐患排查治理台账", httpMethod = "DELETE")
+    @PostMapping("/delhiddenDangerLeger")
+    Object delHiddenDangerLeger(@RequestParam Long id) {
+        standardHiddenDangerLegerService.delHiddenDangerLeger(id, getUser());
+        return success();
+    }
+
+    /**
+    * @Description: 供销对象台账
+    * @date 2021/5/21 10:30
+    */
+    @ApiOperation(value = "供销对象台账", notes = "分页查询", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "menu",value = "供|销的菜单名")
+    })
+    @PostMapping("/querySupplyMarketObject")
+    Object querySupplyMarketObject(@RequestBody FilterObject filterObject) {
+        Integer pageIndex = filterObject.getPageIndex();
+        Integer pageSize = filterObject.getPageSize();
+        IPage page = standardSupplyMarketObjectService.selectPage(new Page<>(pageIndex, pageSize), filterObject.getFilter(),getUser());
+        return success(page);
+    }
+
+    /**
+     * @Description: 新增供销对象台账
+     * @date 2021/5/21 10:30
+     */
+    @ApiOperation(value = "新增供销对象台账",  httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "menu",value = "供|销的菜单名")
+    })
+    @PostMapping("/addsupplyMarketObject")
+    Object addSupplyMarketObject(@RequestBody StandardSupplyMarketObject standardSupplyMarketObject) {
+        standardSupplyMarketObjectService.addSupplyMarketObject(standardSupplyMarketObject, getUser());
+        return success();
+    }
+
+    /**
+     * @Description: 修改供销对象台账
+     * @date 2021/5/21 10:30
+     */
+    @ApiOperation(value = "修改供销对象台账",httpMethod = "PUT")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "menu",value = "供|销的菜单名")
+    })
+    @PostMapping("/putsupplyMarketObject")
+    Object modSupplyMarketObject(@RequestBody StandardSupplyMarketObject standardSupplyMarketObject) {
+        standardSupplyMarketObjectService.modSupplyMarketObject(standardSupplyMarketObject, getUser());
+        return success();
+    }
+
+
+    /**
+     * @Description: 删除供销对象台账
+     * @date 2021/5/21 10:30
+     */
+    @ApiOperation(value = "删除供销对象台账",httpMethod = "DELETE")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id",value = "供销对象台账id")
+    })
+    @PostMapping("/delsupplyMarketObject")
+    Object delSupplyMarketObject(@RequestParam Long id) {
+        standardSupplyMarketObjectService.delSupplyMarketObject(id, getUser());
+        return success();
+    }
+
+    /**
+    * @Description: 会议记录
+    * @date 2021/5/21 14:04
+    */
+    @ApiOperation(value = "会议记录", notes = "分页查询", httpMethod = "POST")
+    @PostMapping("/queryStandardConferenceRecord")
+    Object queryStandardConferenceRecord(@RequestBody FilterObject filterObject) {
+        Integer pageIndex = filterObject.getPageIndex();
+        Integer pageSize = filterObject.getPageSize();
+        IPage page = standardConferenceRecordService.selectPage(new Page<>(pageIndex, pageSize), filterObject.getFilter(),getUser());
+        return success(page);
+    }
+
+
+    /**
+     * @Description: 新增会议记录
+     * @date 2021/5/21 10:30
+     */
+    @ApiOperation(value = "新增会议记录",  httpMethod = "POST")
+    @PostMapping("/addstandardConferenceRecord")
+    Object addStandardConferenceRecord(@RequestBody StandardConferenceRecord standardConferenceRecord) {
+        standardConferenceRecordService.addStandardConferenceRecord(standardConferenceRecord, getUser());
+        return success();
+    }
+
+
+    /**
+     * @Description: 修改会议记录
+     * @date 2021/5/21 10:30
+     */
+    @ApiOperation(value = "修改会议记录",  httpMethod = "PUT")
+    @PostMapping("/putstandardConferenceRecord")
+    Object modStandardConferenceRecord(@RequestBody StandardConferenceRecord standardConferenceRecord) {
+        standardConferenceRecordService.modStandardConferenceRecord(standardConferenceRecord, getUser());
+        return success();
+    }
+
+
+    /**
+     * @Description: 删除会议记录
+     * @date 2021/5/21 10:30
+     */
+    @ApiOperation(value = "删除会议记录",  httpMethod = "DELETE")
+    @PostMapping("/delstandardConferenceRecord")
+    Object delStandardConferenceRecord(@RequestParam Long id) {
+        standardConferenceRecordService.delStandardConferenceRecord(id, getUser());
+        return success();
+    }
+
+
+    /**
+    * @Description: 奖惩记录
+    * @date 2021/5/21 15:16
+    */
+
+    @ApiOperation(value = "奖惩记录", notes = "分页查询", httpMethod = "POST")
+    @PostMapping("/queryRecordAndPunishmentRecord")
+    Object queryRecordAndPunishmentRecord(@RequestBody FilterObject filterObject) {
+        Integer pageIndex = filterObject.getPageIndex();
+        Integer pageSize = filterObject.getPageSize();
+        IPage page = standardRewardRecordService.selectPage(new Page<>(pageIndex, pageSize), filterObject.getFilter(),getUser());
+        return success(page);
+    }
+
+
+    /**
+     * @Description: 新增奖惩记录
+     * @date 2021/5/21 15:16
+     */
+
+    @ApiOperation(value = "新增奖惩记录", httpMethod = "POST")
+    @PostMapping("/addrecordAndPunishmentRecord")
+    Object addRecordAndPunishmentRecord(@RequestBody StandardRewardRecord standardRewardRecord) {
+        standardRewardRecordService.addRecordAndPunishmentRecord(standardRewardRecord,getUser());
+        return success();
+    }
+
+
+
+    /**
+     * @Description: 修改奖惩记录
+     * @date 2021/5/21 15:16
+     */
+
+    @ApiOperation(value = "修改奖惩记录", httpMethod = "PUT")
+    @PostMapping("/putrecordAndPunishmentRecord")
+    Object modRecordAndPunishmentRecord(@RequestBody StandardRewardRecord standardRewardRecord) {
+        standardRewardRecordService.modRecordAndPunishmentRecord(standardRewardRecord,getUser());
+        return success();
+    }
+
+
+    /**
+     * @Description: 删除奖惩记录
+     * @date 2021/5/21 15:16
+     */
+
+    @ApiOperation(value = "删除奖惩记录", httpMethod = "DELETE")
+    @PostMapping("/delrecordAndPunishmentRecord")
+    Object modRecordAndPunishmentRecord(@RequestParam Long id) {
+        standardRewardRecordService.delRecordAndPunishmentRecord(id,getUser());
+        return success();
+    }
+}
diff --git a/src/main/java/com/gk/firework/Controller/StatisticsController.java b/src/main/java/com/gk/firework/Controller/StatisticsController.java
new file mode 100644
index 0000000..e32d35e
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/StatisticsController.java
@@ -0,0 +1,452 @@
+package com.gk.firework.Controller;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Controller.Base.BaseController;
+import com.gk.firework.Domain.Utils.FilterObject;
+import com.gk.firework.Domain.Vo.PageInfoExtension;
+import com.gk.firework.Service.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Api(tags = "统计分析")
+@RequestMapping("/statistics")
+@RestController
+public class StatisticsController extends BaseController {
+
+    @Autowired
+    private EnterpriseService enterpriseService;
+    @Autowired
+    private SaleOrderDetailService saleOrderDetailService;
+    @Autowired
+    private LicenseService licenseService;
+    @Autowired
+    private EntryDetailService entryDetailService;
+    @Autowired
+    private DeliveryDetailService deliveryDetailService;
+    @Autowired
+    private HistoryStockService historyStockService;
+
+    /**
+     * @Description: 经纬度查询
+     * @date 2021/4/16 14:53
+     */
+    @GetMapping("/all-location")
+    @ApiOperation(value = "企业所有信息经纬度查询 按城市查")
+    Object getAllLocation(String city) {
+        List<Map> allLocation = enterpriseService.getAllLocation(city);
+        return success(allLocation);
+    }
+
+
+    /**
+     * @Description: 零售点数量按区域统计
+     * @date 2021/4/16 14:52
+     */
+    @GetMapping("/retail-statistics-area")
+    @ApiOperation(value = "零售点数量按区域统计")
+    Object getRetailStatisticsByArea() {
+        List<Map> retailStatisticsByArea = enterpriseService.getRetailStatisticsByArea();
+        return success(retailStatisticsByArea);
+    }
+
+    /**
+     * @Description: 近n天销售数据统计图
+     * @date 2021/4/16 16:21
+     */
+    @GetMapping("/sale-data-ndays")
+    @ApiOperation(value = "近n天销售数据统计图")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "days", value = "时间天数(从现在往前推n天)")
+    })
+    Object getSaleDataInDays(@RequestParam(defaultValue = "10") Integer days) {
+        List<Map> saleData = saleOrderDetailService.getSaleDataInDays(days);
+        return success(saleData);
+    }
+
+
+    /**
+     * @Description: 销售数量按地区统计 n天 默认90
+     * @date 2021/4/16 16:21
+     */
+    @GetMapping("/sale-data-area-ndays")
+    @ApiOperation(value = "销售数量按地区统计 n天 默认90")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "days", value = "时间天数(从现在往前推n天)")
+    })
+    Object getSaleDataAreaInDays(@RequestParam(defaultValue = "90") Integer days) {
+        List<Map> saleData = saleOrderDetailService.getSaleDataAreaInDays(days);
+        return success(saleData);
+    }
+
+    /**
+     * @Description: 销售数量按品种统计 n天 默认90
+     * @date 2021/4/16 17:03
+     */
+    @GetMapping("/sale-data-productType-ndays")
+    @ApiOperation(value = "销售数量按品种统计 n天 默认90")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "days", value = "时间天数(从现在往前推n天)")
+    })
+    Object getSaleDataProductTypeInDays(@RequestParam(defaultValue = "90") Integer days) {
+        List<Map> saleData = saleOrderDetailService.getSaleDataProductTypeInDays(days);
+        return success(saleData);
+    }
+
+    /**
+     * @Description: 销售量同年对比
+     * @date 2021/4/22 14:52
+     */
+    @GetMapping("/sale-data-compare-in-year")
+    @ApiOperation(value = "销售量同年对比")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "province", value = "省(默认新疆维吾尔自治区)"),
+            @ApiImplicitParam(name = "city", value = "市"),
+    })
+    Object getSaleDataCompareInYear(@RequestParam(defaultValue = "新疆维吾尔自治区") String province, String city) {
+        Map compareData = saleOrderDetailService.getSaleDataCompareInYear(province, city);
+        return success(compareData);
+    }
+
+
+    /**
+     * @Description: 进货量同年对比
+     * @date 2021/4/22 14:52
+     */
+    @GetMapping("/inbound-compare-in-year")
+    @ApiOperation(value = "进货量同年对比")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "province", value = "省(默认新疆维吾尔自治区)"),
+            @ApiImplicitParam(name = "city", value = "市"),
+    })
+    Object getInboundCompareInYear(@RequestParam(defaultValue = "新疆维吾尔自治区") String province, String city) {
+        Map compareData = saleOrderDetailService.getInboundCompareInYear(province, city);
+        return success(compareData);
+    }
+
+    /**
+     * @Description: 统计各城市某时间的销量、进货量(箱数)显示新疆15个地州市的统计信息
+     * @date 2021/5/15 9:15
+     */
+    @PostMapping("/city-inbound-outbound")
+    @ApiOperation(value = "统计各城市某时间的销量、进货量(箱数)显示新疆15个地州市的统计信息")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex", value = "页码"),
+            @ApiImplicitParam(name = "pageSize", value = "页大小"),
+            @ApiImplicitParam(name = "filter.starttime", value = "开始时间"),
+            @ApiImplicitParam(name = "filter.endtime", value = "结束时间"),
+    })
+    Object getCityInAndOut(@RequestBody FilterObject filterObject) {
+        Integer pageIndex = filterObject.getPageIndex();
+        Integer pageSize = filterObject.getPageSize();
+        //可以手写分页,查总数可以只查15个市
+        IPage page = saleOrderDetailService.getCityInAndOut(new Page<>(pageIndex, pageSize), filterObject.getFilter());
+        return success(page);
+    }
+
+    @PostMapping("/export/city-inbound-outbound")
+    Object exportCityAndOut(@RequestBody FilterObject filterObject) {
+        List<Map> list = saleOrderDetailService.getCityInAndOutExport(filterObject.getFilter());
+        return success(list);
+    }
+
+    /**
+     * @Description: 地州市分类销售统计
+     * @date 2022/1/29 18:04
+     */
+
+    @PostMapping("/city-type-sale")
+    Object cityTypeSale(@RequestBody FilterObject filterObject) {
+        Integer pageIndex = filterObject.getPageIndex();
+        Integer pageSize = filterObject.getPageSize();
+        IPage page = saleOrderDetailService.selectCityTypeSale(new Page<>(pageIndex, pageSize), filterObject.getFilter());
+        return success(page);
+    }
+
+
+    /**
+     * @Description: 导出地州市分类销售统计
+     * @date 2022/1/29 18:04
+     */
+
+    @PostMapping("/export/city-type-sale")
+    Object cityTypeSaleExport(@RequestBody FilterObject filterObject) {
+        List<Map> list = saleOrderDetailService.selectCityTypeSaleExport(filterObject.getFilter());
+        return success(list);
+    }
+
+    /**
+     * @Description: 地州下的县区分类销售统计
+     * @date 2022/1/29 18:04
+     */
+
+    @PostMapping("/district-type-sale")
+    Object districtTypeSale(@RequestBody FilterObject filterObject) {
+        Integer pageIndex = filterObject.getPageIndex();
+        Integer pageSize = filterObject.getPageSize();
+        IPage page = saleOrderDetailService.selectDistrictTypeSale(new Page<>(pageIndex, pageSize), filterObject.getFilter());
+        return success(page);
+    }
+
+
+    /**
+     * @Description: 导出地州市分类销售统计
+     * @date 2022/1/29 18:04
+     */
+
+    @PostMapping("/export/district-type-sale")
+    Object districtTypeSaleExport(@RequestBody FilterObject filterObject) {
+        List<Map> list = saleOrderDetailService.selectDistrictTypeSaleExport(filterObject.getFilter());
+        return success(list);
+    }
+
+
+    /**
+     * @Description: 企业销售分类统计
+     * @date 2022/1/29 13:02
+     */
+    @PostMapping("/enterprise-type-sale")
+    Object enterpriseTypeSale(@RequestBody FilterObject filterObject) {
+        Integer pageIndex = filterObject.getPageIndex();
+        Integer pageSize = filterObject.getPageSize();
+        IPage page = saleOrderDetailService.selectEnterpriseTypeSale(new Page<>(pageIndex, pageSize), filterObject.getFilter(), getUser());
+        return success(page);
+    }
+
+    /**
+     * @Description: 导出企业销售分类统计
+     * @date 2022/1/29 15:15
+     */
+    @PostMapping("/export/enterprise-type-sale")
+    Object exportEnterpriseTypeSale(@RequestBody FilterObject filterObject) {
+        List<Map> res = saleOrderDetailService.selectExportEnterpriseTypeSale(filterObject.getFilter(), getUser());
+        return success(res);
+    }
+
+
+    /**
+     * @Description: 企业分类入库统计
+     * @date 2022/1/29 15:19
+     */
+    @PostMapping("/enterprise-type-entry")
+    Object enterpriseTypeEntry(@RequestBody FilterObject filterObject) {
+        Integer pageIndex = filterObject.getPageIndex();
+        Integer pageSize = filterObject.getPageSize();
+        IPage page = entryDetailService.selectEnterpriseTypeEntry(new Page<>(pageIndex, pageSize), filterObject.getFilter(), getUser());
+        return success(page);
+    }
+
+    /**
+     * @Description: 导出企业分类入库统计
+     * @date 2022/1/29 15:38
+     */
+    @PostMapping("/export/enterprise-type-entry")
+    Object exportEnterpriseTypeEntry(@RequestBody FilterObject filterObject) {
+        List<Map> res = entryDetailService.selectExportEnterpriseTypeEntry(filterObject.getFilter(), getUser());
+        return success(res);
+    }
+
+    /**
+     * @Description: 各地州分类入库统计
+     * @date 2022/1/29 15:50
+     */
+    @PostMapping("/city-type-entry")
+    Object cityTypeEntry(@RequestBody FilterObject filterObject) {
+        Integer pageIndex = filterObject.getPageIndex();
+        Integer pageSize = filterObject.getPageSize();
+        IPage page = entryDetailService.selectCityTypeEntry(new Page<>(pageIndex, pageSize), filterObject.getFilter(), getUser());
+        return success(page);
+    }
+
+    /**
+     * @Description: 导出各地州分类入库统计
+     * @date 2022/1/29 16:15
+     */
+    @PostMapping("/export/city-type-entry")
+    Object exportCityTypeEntry(@RequestBody FilterObject filterObject) {
+        List<Map> res = entryDetailService.selectExportCityTypeEntry(filterObject.getFilter(), getUser());
+        return success(res);
+    }
+
+    /**
+     * @Description: 企业分类出库统计
+     * @date 2022/1/29 16:18
+     */
+    @PostMapping("/enterprise-type-delivery")
+    Object enterpriseTypeDelivery(@RequestBody FilterObject filterObject) {
+        Integer pageIndex = filterObject.getPageIndex();
+        Integer pageSize = filterObject.getPageSize();
+        IPage page = deliveryDetailService.selectEnterpriseTypeDelivery(new Page<>(pageIndex, pageSize), filterObject.getFilter(), getUser());
+        return success(page);
+    }
+
+    /**
+     * @Description: 导出企业分类出库统计
+     * @date 2022/1/29 16:30
+     */
+    @PostMapping("/export/enterprise-type-delivery")
+    Object exportEnterpriseTypeDelivery(@RequestBody FilterObject filterObject) {
+        List<Map> res = deliveryDetailService.selectExportEnterpriseTypeDelivery(filterObject.getFilter(), getUser());
+        return success(res);
+    }
+
+    /**
+     * @Description: 各地州分类出库统计
+     * @date 2022/1/29 16:35
+     */
+    @PostMapping("/city-type-delivery")
+    Object cityTypeDelivery(@RequestBody FilterObject filterObject) {
+        Integer pageIndex = filterObject.getPageIndex();
+        Integer pageSize = filterObject.getPageSize();
+        IPage page = deliveryDetailService.selectCityTypeDelivery(new Page<>(pageIndex, pageSize), filterObject.getFilter(), getUser());
+        return success(page);
+    }
+
+    /**
+     * @Description: 导出各地州分类出库统计
+     * @date 2022/1/29 16:35
+     */
+    @PostMapping("/export/city-type-delivery")
+    Object exportCityTypeDelivery(@RequestBody FilterObject filterObject) {
+        List<Map> res = deliveryDetailService.selectExportCityTypeDelivery(filterObject.getFilter(), getUser());
+        return success(res);
+    }
+
+    /**
+     * @Description: 导出
+     * @date 2022/1/29 16:39
+     */
+
+
+    @PostMapping("/city-inbound-outbound-detail")
+    @ApiOperation(value = "显示市下各个企业的详情")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex", value = "页码"),
+            @ApiImplicitParam(name = "pageSize", value = "页大小"),
+            @ApiImplicitParam(name = "filter.starttime", value = "开始时间"),
+            @ApiImplicitParam(name = "filter.endtime", value = "结束时间"),
+            @ApiImplicitParam(name = "filter.safetysupervision", value = "企业类型"),
+            @ApiImplicitParam(name = "filter.city", value = "市"),
+    })
+    Object getCityInAndOutDetail(@RequestBody FilterObject filterObject) {
+        Integer pageIndex = filterObject.getPageIndex();
+        Integer pageSize = filterObject.getPageSize();
+        //可以手写分页,查总数可以只查15个市
+        IPage page = saleOrderDetailService.getCityInAndOutDetail(new Page<>(pageIndex, pageSize), filterObject.getFilter());
+        return success(page);
+    }
+
+
+    /**
+     * @Description: 标题数据 (零售店数量 今日销售数量 今年销售总量 今年购买人次)
+     * @date 2021/4/25 9:44
+     */
+    @GetMapping("/title-data")
+    @ApiOperation(value = "标题数据 (零售店数量 今日销售数量 今年销售总量 今年购买人次)")
+    Object getTitleData() {
+        Map data = saleOrderDetailService.getTitleData();
+        return success(data);
+    }
+
+
+    /**
+     * @Description: 性别统计购买
+     * @date 2021/5/15 16:21
+     */
+    @PostMapping("/gender-sale")
+    Object getGenderSale(@RequestBody FilterObject filterObject) {
+        Integer pageIndex = filterObject.getPageIndex();
+        Integer pageSize = filterObject.getPageSize();
+        IPage page = saleOrderDetailService.getGenderSale(new Page<>(pageIndex, pageSize), filterObject.getFilter(), getUser());
+        return success(page);
+    }
+
+    /**
+     * @Description: 族别统计购买
+     * @date 2021/5/15 16:39
+     */
+    @PostMapping("/race-sale")
+    Object getRaceSale(@RequestBody FilterObject filterObject) {
+        Integer pageIndex = filterObject.getPageIndex();
+        Integer pageSize = filterObject.getPageSize();
+        IPage page = saleOrderDetailService.getRaceSale(new Page<>(pageIndex, pageSize), filterObject.getFilter(), getUser());
+        return success(page);
+    }
+
+    /**
+     * @Description: 按年龄段
+     * @date 2021/5/15 16:45
+     */
+    @PostMapping("/generation-sale")
+    Object getGenerationSale(@RequestBody FilterObject filterObject) {
+        List<Map> data = saleOrderDetailService.getGenerationSale(filterObject.getFilter(), getUser());
+        return success(data);
+    }
+
+
+    /**
+     * @Description: 证书分析
+     * @date 2021/7/1 15:11
+     */
+    @PostMapping("/license")
+    Object getLicenseStatistic(@RequestBody FilterObject filterObject) {
+        Integer pageIndex = filterObject.getPageIndex();
+        Integer pageSize = filterObject.getPageSize();
+        IPage page = licenseService.selectLicenseStatistic(new Page<>(pageIndex, pageSize), filterObject.getFilter(), getUser());
+        return success(page);
+    }
+
+
+    /**
+     * @Description: 企业历史库存查询(年月日)
+     * @date 2022/2/8 15:15
+     */
+    @PostMapping("/stock/history")
+    Object getHistoryStock(@RequestBody FilterObject filterObject) {
+        Integer pageIndex = filterObject.getPageIndex();
+        Integer pageSize = filterObject.getPageSize();
+        IPage page = historyStockService.selectHistoryStock(new Page<>(pageIndex, pageSize), filterObject.getFilter(), getUser());
+        return success(page);
+
+    }
+
+    @PostMapping("/export/stock/history")
+    Object getExportHistoryStock(@RequestBody FilterObject filterObject) {
+        List<Map> result = historyStockService.selectExportHistoryStock(filterObject.getFilter(), getUser());
+        return success(result);
+
+    }
+
+    /**
+     * @Description: 各地州库存查询-staticstock
+     * @date 2022/2/8 15:40
+     */
+    @PostMapping("/city-stock")
+    Object getCityStock(@RequestBody FilterObject filterObject) {
+        Integer pageIndex = filterObject.getPageIndex();
+        Integer pageSize = filterObject.getPageSize();
+        IPage page = historyStockService.selectCityStock(new Page<>(pageIndex, pageSize), filterObject.getFilter(), getUser());
+        return success(page);
+    }
+
+    /**
+     * @Description: 各地州历史库存查询(年月日)
+     * @date 2022/2/8 16:06
+     */
+    @PostMapping("/history/city-stock")
+    Object getHistoryCityStock(@RequestBody FilterObject filterObject) {
+        Integer pageIndex = filterObject.getPageIndex();
+        Integer pageSize = filterObject.getPageSize();
+        IPage page = historyStockService.selectHistoryCityStock(new Page<>(pageIndex, pageSize), filterObject.getFilter(), getUser());
+        return success(page);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Controller/StockController.java b/src/main/java/com/gk/firework/Controller/StockController.java
new file mode 100644
index 0000000..6ebfa4b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/StockController.java
@@ -0,0 +1,904 @@
+package com.gk.firework.Controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.gk.firework.Controller.Base.BaseController;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.Enum.ErrorCode;
+import com.gk.firework.Domain.Extension.StockTotal;
+import com.gk.firework.Domain.Log.JsonParams;
+import com.gk.firework.Domain.Utils.BeanUtils;
+import com.gk.firework.Domain.Utils.Msg;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Vo.*;
+import com.gk.firework.Service.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.math.BigDecimal;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.gk.firework.Domain.Enum.ErrorCode.*;
+
+/**
+ * @author : jingjy
+ * @date : 2021/3/19 11:06
+ */
+
+@Api(tags = "库存接口")
+@RestController
+@RequestMapping("/stock")
+public class StockController extends BaseController {
+
+    @Autowired
+    private ProductService productService;
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private EntryService entryService;
+    @Autowired
+    private EntryDetailService entryDetailService;
+    @Autowired
+    private StockService stockService;
+    @Autowired
+    private ProductLocusService productLocusService;
+    @Autowired
+    private EnterpriseService enterpriseService;
+    @Autowired
+    private StaticStockService staticStockService;
+
+
+    @PostMapping("/entrySingle")
+    @JsonParams
+    public Msg entrySingle(@RequestBody JSONObject jsonObject){
+        Msg msg = new Msg(true);
+        String userId = jsonObject.getString("id");
+        String type = jsonObject.getString("type");
+        String date = jsonObject.getString("time");
+        String rfids = jsonObject.getString("rfids");
+        String transport = jsonObject.getString("cert");
+        UserInfo userInfo = userService.getById(userId);
+        Date datetime;
+        DateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        try {
+            datetime = dateFormat1.parse(date);
+        } catch (ParseException e) {
+            msg.setCode(ERROR_10003.getCode());
+            msg.setMessage(ERROR_10003.getMsg()+":入库日期类型错误!");
+            return msg;
+        }
+        String auth = getAuth();
+        auth = StringUtils.isBlank(auth) ? "NOAUTH" : auth;
+        EntryOrderInfo orderInfo = entryService.generateEntryOrderInfo(type,userInfo,datetime,transport, auth);
+
+        if (StringUtils.isBlank(userId) || StringUtils.isBlank(rfids)){
+            msg.setCode(ERROR_10001.getCode());
+            msg.setMessage(ERROR_10001.getMsg()+":用户信息或者流向码为空,无法入库");
+            return msg;
+        }
+        if (EntryUtils.RK_ENTRY.equals(type)){
+            //一般入库
+            List<String>directionCodes = StringUtils.toList(rfids);
+            List<ProductVo> productVos = new ArrayList<>();
+            List<EntryDetailInfo>detailInfos = new ArrayList<>();
+            List<ProductLocusInfo>locusInfos = new ArrayList<>();
+            //入库数量
+            int entryNum = 0;
+            for (String dire:directionCodes) {
+                if (FireworkDeal.isNotDirectionCode(dire)){
+                    msg.setCode(ERROR_10004.getCode());
+                    msg.setMessage(ERROR_10004.getMsg()+":流向码:"+dire+" 不符合规则,无法识别!");
+                    return msg;
+                }
+                DirectionDetail detail = FireworkDeal.dealDirectionCode(dire);
+                if (productService.hasProductByDire(dire)){
+                    msg.setCode(ERROR_50001.getMsg());
+                    msg.setMessage(ERROR_50001.getMsg()+":流向码:"+dire+" 未找到相应产品信息!");
+                    return msg;
+                }
+
+                ProductVo productVo = productService.selectVoByDirection(dire);
+
+                EntryDetailInfo detailInfo = new EntryDetailInfo(orderInfo.getCode(),dire,productVo.getItemCode(),
+                        productVo.getName(),productVo.getManufacturer(),new Date(),userInfo.getCompanynumber());
+                if (detail.getLength() == FireworkDeal.DIRECTION_OUTSIDE){
+                    ProductLocusInfo productLocusInfo = new ProductLocusInfo(dire,new Date(),datetime, userInfo.getCompany(),
+                            null,ProductLocusInfo.ENTRY_STATUS,productVo.getBoxNumber().toString());
+                    locusInfos.add(productLocusInfo);
+                }
+
+                detailInfos.add(detailInfo);
+                if (detail.getBoxNo() == null){
+                    entryNum += 1;
+                }else {
+                    entryNum += Integer.parseInt(detail.getBoxNo());
+                }
+
+                if (detail.getLength() == FireworkDeal.DIRECTION_OUTSIDE){
+                    FireworkDeal.getProductVos(dire, detail, detail, productVos, productVo);
+                }else if (detail.getLength() == FireworkDeal.DIRECTION_INSIDE){
+                    ProductInfo productVo1 = productService.selectByDirection(dire);
+                    productVo1.setDirectionCode(dire);
+                    ProductVo productVo2 = BeanUtils.copy(productVo1,ProductVo.class);
+                    FireworkDeal.setProductVosAttribute(productVo2);
+                    productVos.add(productVo2);
+                }
+            }
+            boolean flag = stockService.putInStorage(userInfo,productVos,datetime, type);
+            if (flag){
+                orderInfo.setNum(entryNum);
+                entryService.save(orderInfo);
+                entryDetailService.saveBatch(detailInfos);
+                productLocusService.insertBatch(locusInfos);
+            }else {
+                msg.setCode(ERROR_40001.getCode());
+                msg.setMessage(ERROR_40001.getMsg()+"库存入库失败");
+                return msg;
+            }
+        }
+
+        return msg;
+    }
+
+    @PostMapping("/entryBatch")
+    @JsonParams
+    public List<Msg> entryBatch(@RequestBody JSONArray jsonArray){
+        List<Msg> msgList = new ArrayList<>();
+        if (jsonArray.size() < 1){
+            return null;
+        }
+
+        for (int i = 0; i < jsonArray.size(); i++) {
+            JSONObject jsonObject = jsonArray.getJSONObject(i);
+            msgList.add(entrySingle(jsonObject));
+        }
+
+        return msgList;
+    }
+
+    @ApiOperation(value = "通用入库",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "JSONArray",value = "json数组,json对象为:{id:'用户ID',rfids:'流向码',time:'入库时间',cert:'运输证',type:'入库类型'}"),
+    })
+    @PostMapping("/entry")
+    @JsonParams
+    public Msg entryStock(@RequestBody JSONArray jsonArray){
+        if (jsonArray.size() > 0)
+        {
+            for (int i = 0; i < jsonArray.size(); i++) {
+                // 遍历 jsonArray 数组,把每一个对象转成 json 对象
+                JSONObject jsonObject = jsonArray.getJSONObject(i);
+                String userId = jsonObject.getString("id");
+                String directionCodeStr = jsonObject.getString("rfids");
+                String datetime = jsonObject.getString("time");
+                String transport = jsonObject.getString("cert");
+                Date date;
+                DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                try {
+                    date = dateFormat.parse(datetime);
+                } catch (ParseException e) {
+                    return new Msg(ERROR_10003,"入库日期类型错误!");
+                }
+                //type 1.常规入库; 2.退货入库
+                String type = jsonObject.getString("type");
+                if (StringUtils.isBlank(type)){
+                    return new Msg(ERROR_10001,"入库类型不能为空");
+                }
+
+                if (StringUtils.isBlank(directionCodeStr)){
+                    return new Msg(ERROR_10001,"流向码不能为空");
+                }
+
+                boolean isUser = userService.checkUserById(userId);
+                if (!isUser){
+                    return new Msg(ERROR_50001,"未找到相关用户信息,不能入库!");
+                }
+                UserInfo userInfo = userService.getById(userId);
+
+                //判断是否存在同时间同操作人入库记录
+                boolean exist = entryService.isEntryExist(datetime,userInfo);
+                if (exist){ continue; }
+
+                String auth = getAuth();
+                auth = StringUtils.isBlank(auth) ? "NOAUTH" : auth;
+                List<String> directionCodes = StringUtils.toList(directionCodeStr);
+                EntryOrderInfo orderInfo = entryService.generateEntryOrderInfo(type,userInfo,date,transport, auth);
+                int boxNum = 0;
+                List<EntryDetailInfo>detailInfos = new ArrayList<>();
+                List<ProductLocusInfo>locusInfos = new ArrayList<>();
+
+                List<ProductVo> productVos = new ArrayList<>();
+                for (String dire:directionCodes) {
+                    if (FireworkDeal.isNotDirectionCode(dire)){
+                        return new Msg(ERROR_10004,"流向码:"+dire+" 不符合规则,无法识别!");
+                    }
+                    DirectionDetail detail = FireworkDeal.dealDirectionCode(dire);
+                    if (productService.hasProductByDire(dire)){
+                        return new Msg(ERROR_50001,":流向码:"+dire+" 未找到相应产品信息!");
+                    }
+                    ProductVo productVo = productService.selectVoByDirection(dire);
+                    EntryDetailInfo detailInfo = new EntryDetailInfo(orderInfo.getCode(),dire,productVo.getItemCode(),
+                            productVo.getName(),productVo.getManufacturer(),new Date(),userInfo.getCompanynumber());
+                    if (detail.getLength() == FireworkDeal.DIRECTION_OUTSIDE){
+                        ProductLocusInfo productLocusInfo = new ProductLocusInfo(dire,new Date(),date, userInfo.getCompany(),
+                                null,ProductLocusInfo.ENTRY_STATUS,productVo.getBoxNumber().toString());
+                        locusInfos.add(productLocusInfo);
+                    }
+                    if (detail.getLength() == FireworkDeal.DIRECTION_OUTSIDE){
+                        FireworkDeal.getProductVos(dire, detail, detail, productVos, productVo);
+                        detailInfo.setBoxcode(detail.getOriginalCode());
+                        detailInfo.setNum(Integer.parseInt(detail.getBoxNo()));
+                        boxNum += Integer.parseInt(detail.getBoxNo());
+                    }else if (detail.getLength() == FireworkDeal.DIRECTION_INSIDE){
+                        ProductInfo productVo1 = productService.selectByDirection(dire);
+                        ProductVo productVo2 = BeanUtils.copy(productVo1,ProductVo.class);
+                        productVo2.setItemCode(dire.substring(0,10));
+                        productVo2.setDirectionCode(dire);
+                        productVos.add(productVo2);
+                        detailInfo.setNum(1);
+                        boxNum +=1;
+                    }
+                    detailInfos.add(detailInfo);
+                }
+                orderInfo.setNum(boxNum);
+                entryService.save(orderInfo);
+                entryDetailService.saveBatch(detailInfos);
+                productLocusService.insertBatch(locusInfos);
+                boolean flag = stockService.putInStorage(userInfo,productVos,date,type);
+            }
+        }
+        return success();
+    }
+
+    /**
+     *
+     * @param jsonArray [{"id":"用户ID","type":"快速入库填1","time":"时间","cert":"运输证编号","rfidfirst":"第一箱的流向码","rfidlast":"最后一箱的流向码"}]
+     * @return msg
+     */
+    @ApiOperation(value = "快速入库",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "JSONArray",value = "json数组,json对象为:{\"id\":\"用户ID\",\"type\":\"快速入库填1\",\"time\":\"时间\",\"cert\":\"运输证编号\",\"rfidfirst\":\"第一箱的流向码\",\"rfidlast\":\"最后一箱的流向码\"}"),
+    })
+    @PostMapping("/entryQuick")
+    @JsonParams
+    public Msg entryQuick(@RequestBody JSONArray jsonArray){
+        Msg msg = new Msg(true);
+        if (jsonArray.size() > 0)
+        {
+            for (int i = 0; i < jsonArray.size(); i++) {
+                // 遍历 jsonArray 数组,把每一个对象转成 json 对象
+                JSONObject jsonObject = jsonArray.getJSONObject(i);
+                String userId = jsonObject.getString("id");
+                String directionCodeFirst = jsonObject.getString("rfidfirst");
+                String directionCodeLast = jsonObject.getString("rfidlast");
+                String datetime = jsonObject.getString("time");
+                String transport = jsonObject.getString("cert");
+                //type 1.常规入库; 2.退货入库
+                String type = "1";
+                Date date;
+                DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                try {
+                    date = dateFormat.parse(datetime);
+                } catch (ParseException e) {
+                    msg.setCode(ERROR_10003.getCode());
+                    msg.setMessage(ERROR_10003.getMsg()+":入库日期类型错误!");
+                    return msg;
+                }
+
+                if (!(FireworkDeal.is22Characters(directionCodeFirst) && FireworkDeal.is22Characters(directionCodeLast))){
+                    msg.setCode(ERROR_10004.getCode());
+                    msg.setMessage(ERROR_10004.getMsg()+":流向码首尾不符合规则,无法快速入库!");
+                    return msg;
+                }
+                boolean isUser = userService.checkUserById(userId);
+                if (!isUser){
+                    msg.setCode(ERROR_50001.getCode());
+                    msg.setMessage(ERROR_50001.getMsg()+":未找到相关用户信息,不能入库!");
+                    return msg;
+                }
+                UserInfo userInfo = userService.getById(userId);
+
+                //判断是否存在同时间同操作人入库记录
+                boolean exist = entryService.isEntryExist(datetime,userInfo);
+                if (exist){
+                    continue;
+                }
+
+                String auth = getAuth();
+                auth = StringUtils.isBlank(auth) ? "NOAUTH" : auth;
+                EntryOrderInfo orderInfo = entryService.generateEntryOrderInfo(type,userInfo,date,transport, auth);
+
+                List<EntryDetailInfo>detailInfos = new ArrayList<>();
+                List<ProductLocusInfo>locusInfos = new ArrayList<>();
+
+                List<ProductVo> productVos = new ArrayList<>();
+
+                DirectionDetail detailFirst = FireworkDeal.dealDirectionCode(directionCodeFirst);
+                DirectionDetail detailLast = FireworkDeal.dealDirectionCode(directionCodeLast);
+                if (!detailFirst.getItemCode().equals(detailLast.getItemCode())){
+                    msg.setCode(ERROR_10004.getCode());
+                    msg.setMessage(ERROR_10004.getMsg()+":首尾商品编码不一致,无法快速入库");
+                    return msg;
+                }
+
+                if (Integer.parseInt(detailFirst.getSerialNo()) > Integer.parseInt(detailLast.getSerialNo())){
+                    msg.setCode(ERROR_10004.getCode());
+                    msg.setMessage(ERROR_10004.getMsg()+":首位商品序号大于末位,无法快速入库");
+                    return msg;
+                }
+
+                ProductVo productVo = productService.selectVoByDirection(directionCodeFirst);
+
+                Integer firstNo = Integer.parseInt(detailFirst.getSerialNo());
+                Integer lastNo = Integer.parseInt(detailLast.getSerialNo());
+                int perBoxNum = Integer.parseInt(detailFirst.getBoxNo());
+
+                int boxNum = ((lastNo-firstNo)/perBoxNum)+1;
+                int totalNum = 0;
+
+                for (int j=1;j<= boxNum;j++){
+                    String dire = detailFirst.getItemCode()+detailFirst.getDateCode()+ String.format("%05d", firstNo)+String.format("%03d", perBoxNum);
+                    EntryDetailInfo detailInfo = new EntryDetailInfo(orderInfo.getCode(),dire,productVo.getItemCode(),
+                            productVo.getName(),productVo.getManufacturer(),new Date(),userInfo.getCompanynumber());
+                    detailInfo.setNum(perBoxNum);
+                    detailInfos.add(detailInfo);
+                    ProductLocusInfo productLocusInfo = new ProductLocusInfo(dire,new Date(),date, userInfo.getCompany(),
+                            null,ProductLocusInfo.ENTRY_STATUS,productVo.getBoxNumber().toString());
+                    locusInfos.add(productLocusInfo);
+                    firstNo+=perBoxNum;
+                    totalNum += perBoxNum;
+                }
+
+                FireworkDeal.getProductVos(directionCodeFirst,detailFirst,detailLast,productVos,productVo);
+
+                orderInfo.setNum(totalNum);
+                entryService.save(orderInfo);
+                entryDetailService.saveBatch(detailInfos);
+                productLocusService.insertBatch(locusInfos);
+                boolean flag = stockService.putInStorage(userInfo,productVos,date, type);
+            }
+        }
+        return msg;
+    }
+
+    @GetMapping("/info")
+    public Msg getList(@RequestParam(value = "name", required = false) String name,
+                       @RequestParam(value = "directionCode", required = false) String directionCode,
+                       @RequestParam(value = "manufacturer", required = false) String manufacturer,
+                       @RequestParam(value = "type", required = false) String type,
+                       @RequestParam(value = "secondaryType", required = false) String secondaryType,
+                       @RequestParam(value = "beginDate") String beginDate,
+                       @RequestParam(value = "endDate") String endDate,
+                       @RequestParam(value = "owner")String owner,
+                       @RequestParam(defaultValue = "0") Integer pageIndex,
+                       @RequestParam(defaultValue = "10") Integer pageSize,
+                       String sort, String order){
+        Msg msg = new Msg(true);
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        Map<String, Object> condition = new HashMap<>(8);
+
+        if (StringUtils.isNotBlank(name)) {
+            condition.put("name", name);
+        }
+        if (StringUtils.isNotBlank(directionCode)) {
+            condition.put("directionCode", directionCode);
+        }
+        if (StringUtils.isNotBlank(manufacturer)) {
+            condition.put("manufacturer", manufacturer);
+        }
+        if (StringUtils.isNotBlank(type)) {
+            condition.put("type", type);
+        }
+        if (StringUtils.isNotBlank(secondaryType)) {
+            condition.put("secondaryType", secondaryType);
+        }
+//        if (getUser().getCompanyid() != null){
+//            owner = getUser().getCompanyid().toString();
+//        }
+        condition.put("owner",owner);
+        condition.put("beginDate",beginDate);
+        condition.put("endDate",endDate);
+        pageInfo.setCondition(condition);
+        stockService.selectDataGrid(pageInfo);
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    @GetMapping("/info-app")
+    public Msg getList2() {
+        PageInfo pageInfo = new PageInfo();
+        Map<String, Object> condition = new HashMap<>();
+        UserInfo user = getUser();
+        UserInfo userInfo = userService.getById(user);
+        condition.put("owner",userInfo.getCompanyid());
+        pageInfo.setCondition(condition);
+        PageInfoExtension<StockTotal> extension = stockService.selectDataGridExtensions(pageInfo);
+
+        return success(extension);
+
+    }
+
+    @GetMapping("/enterpriseStock")
+    public Msg getEnterpriseStockList(@RequestParam(value = "name", required = false) String name,
+                                      @RequestParam(value = "province", required = false) String province,
+                                      @RequestParam(value = "city", required = false) String city,
+                                      @RequestParam(value = "area", required = false) String area,
+                                      @RequestParam(value = "town", required = false) String town,
+                                      @RequestParam(value = "community", required = false) String community,
+                                      @RequestParam(value = "enterpriseType", required = false) String type,
+                                      @RequestParam(defaultValue = "0") Integer pageIndex,
+                                      @RequestParam(defaultValue = "10") Integer pageSize,
+                                      String sort, String order){
+        Msg msg = new Msg(true);
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        Map<String, Object> condition = new HashMap<>(16);
+        if (StringUtils.isNotBlank(name)) {
+            condition.put("name", name);
+        }
+        if (StringUtils.isNotBlank(type)) {
+            condition.put("type", type);
+        }
+
+        if (StringUtils.isNotBlank(province)) {
+            condition.put("province", province);
+        }
+        if (StringUtils.isNotBlank(city)) {
+            condition.put("city", city);
+        }
+        if (StringUtils.isNotBlank(area)) {
+            condition.put("district", area);
+        }
+        if (StringUtils.isNotBlank(town)) {
+            condition.put("town", town);
+        }
+        if (StringUtils.isNotBlank(community)) {
+            condition.put("community", community);
+        }
+
+        UserInfo userInfo = userService.getById(getUser().getId());
+
+        assert userInfo != null;
+        if (userInfo.getCompanynumber() != null){
+            condition.put("operator",userInfo.getCompanynumber());
+            List<Enterprise> subs = enterpriseService.selectSubEnterprise(userInfo.getCompanyid());
+            List<String> subList = subs.stream().map(Enterprise::getEnterprisenumber).collect(Collectors.toList());
+            if (subList.size() > 0)
+                condition.put("subList", subList);
+        }
+
+        //根据用户省市区权限添加/修改查询条件
+        if (userInfo.getCompanyid() == null && userInfo.getType() == 3){
+            boolean provinceNull = StringUtils.isBlank(userInfo.getProvince());
+            boolean cityNull = !provinceNull && StringUtils.isBlank(userInfo.getCity()) ;
+            boolean districtNull = !provinceNull && StringUtils.isNotBlank(userInfo.getCity())
+                    && StringUtils.isBlank(userInfo.getArea());
+            boolean streetNull = !provinceNull && StringUtils.isNotBlank(userInfo.getCity())
+                    && StringUtils.isNotBlank(userInfo.getArea()) && StringUtils.isBlank(userInfo.getTown());
+            boolean committeeNull = !provinceNull && StringUtils.isNotBlank(userInfo.getCity())
+                    && StringUtils.isNotBlank(userInfo.getArea()) && StringUtils.isNotBlank(userInfo.getTown())
+                    && StringUtils.isBlank(userInfo.getCommunity());
+            if (cityNull){
+                condition.put("province", userInfo.getProvince());
+            }else if (districtNull){
+                condition.put("province", userInfo.getProvince());
+                condition.put("city", userInfo.getCity());
+            }else if (streetNull){
+                condition.put("province", userInfo.getProvince());
+                condition.put("city", userInfo.getCity());
+                condition.put("district", userInfo.getArea());
+            }else if (committeeNull){
+                condition.put("province", userInfo.getProvince());
+                condition.put("city", userInfo.getCity());
+                condition.put("district", userInfo.getArea());
+                condition.put("street", userInfo.getTown());
+            }else {
+                condition.put("province", userInfo.getProvince());
+                condition.put("city", userInfo.getCity());
+                condition.put("district", userInfo.getArea());
+                condition.put("street", userInfo.getTown());
+                condition.put("committee", userInfo.getCommunity());
+            }
+        }
+
+        pageInfo.setCondition(condition);
+        condition.put("index",(pageIndex-1)*pageSize);
+        condition.put("size",pageSize);
+//        stockService.selectEnterpriseStockDataGrid(pageInfo);
+//        Integer count = enterpriseService.getEnterpriseByLimitCount(condition);
+//        limit #{condition.index},#{condition.size}
+
+        List<StockVo>stockVos = stockService.selectEnterpriseStocks(condition);
+        int index = (pageIndex-1)*pageSize;
+        int count = stockVos.size();
+        int size = index+pageSize;
+        if (size > count){
+            size = count;
+        }
+        //总计
+
+        BigDecimal stockNum = new BigDecimal("0");
+        BigDecimal firecracker = new BigDecimal("0");
+        BigDecimal spray = new BigDecimal("0");
+        BigDecimal rotation = new BigDecimal("0");
+        BigDecimal bead = new BigDecimal("0");
+        BigDecimal toy = new BigDecimal("0");
+        BigDecimal combined = new BigDecimal("0");
+        if (stockVos.size() > 0) {
+            for (StockVo stockVo : stockVos) {
+                stockNum = stockNum.add(stockVo.getStockNum());
+                firecracker = firecracker.add(stockVo.getFirecracker());
+                spray = spray.add(stockVo.getSpray());
+                rotation = rotation.add(stockVo.getRotation());
+                bead = bead.add(stockVo.getBead());
+                toy = toy.add(stockVo.getToy());
+                combined = combined.add(stockVo.getCombined());
+            }
+        }
+        Map<String, Object> totalRow = new HashMap<>();
+        totalRow.put("name", "总计");
+        totalRow.put("stockNum", stockNum);
+        totalRow.put("firecracker", firecracker);
+        totalRow.put("spray", spray);
+        totalRow.put("rotation", rotation);
+        totalRow.put("bead", bead);
+        totalRow.put("toy", toy);
+        totalRow.put("combined", combined);
+
+        pageInfo.setResult(stockVos.subList(index,size));
+        pageInfo.setTotalCount((long) count);
+
+        PageInfoExtension<Map> extension = new PageInfoExtension<>(pageInfo);
+        extension.setExtension(totalRow);
+        msg.setResult(extension);
+        return msg;
+    }
+
+    @GetMapping("/enterpriseStaticStock")
+    public Msg enterpriseStaticStock(@RequestParam(value = "name", required = false) String name,
+                                      @RequestParam(value = "province", required = false) String province,
+                                      @RequestParam(value = "city", required = false) String city,
+                                      @RequestParam(value = "area", required = false) String area,
+                                      @RequestParam(value = "town", required = false) String town,
+                                      @RequestParam(value = "community", required = false) String community,
+                                      @RequestParam(value = "enterpriseType", required = false) String type,
+                                      @RequestParam(defaultValue = "0") Integer pageIndex,
+                                      @RequestParam(defaultValue = "10") Integer pageSize,
+                                      String sort, String order){
+        Msg msg = new Msg(true);
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        Map<String, Object> condition = new HashMap<>(16);
+        if (StringUtils.isNotBlank(name)) {
+            condition.put("name", name);
+        }
+        if (StringUtils.isNotBlank(type)) {
+            condition.put("type", type);
+        }
+
+        if (StringUtils.isNotBlank(province)) {
+            condition.put("province", province);
+        }
+        if (StringUtils.isNotBlank(city)) {
+            condition.put("city", city);
+        }
+        if (StringUtils.isNotBlank(area)) {
+            condition.put("district", area);
+        }
+        if (StringUtils.isNotBlank(town)) {
+            condition.put("town", town);
+        }
+        if (StringUtils.isNotBlank(community)) {
+            condition.put("community", community);
+        }
+
+        UserInfo userInfo = userService.getById(getUser().getId());
+
+        assert userInfo != null;
+        if (userInfo.getCompanynumber() != null){
+            condition.put("operator",userInfo.getCompanynumber());
+            List<Enterprise> subs = enterpriseService.selectSubEnterprise(userInfo.getCompanyid());
+            List<String> subList = subs.stream().map(Enterprise::getEnterprisenumber).collect(Collectors.toList());
+            if (subList.size() > 0)
+                condition.put("subList", subList);
+        }
+
+        //根据用户省市区权限添加/修改查询条件
+        if (userInfo.getCompanyid() == null && userInfo.getType() == 3){
+            boolean provinceNull = StringUtils.isBlank(userInfo.getProvince());
+            boolean cityNull = !provinceNull && StringUtils.isBlank(userInfo.getCity()) ;
+            boolean districtNull = !provinceNull && StringUtils.isNotBlank(userInfo.getCity())
+                    && StringUtils.isBlank(userInfo.getArea());
+            boolean streetNull = !provinceNull && StringUtils.isNotBlank(userInfo.getCity())
+                    && StringUtils.isNotBlank(userInfo.getArea()) && StringUtils.isBlank(userInfo.getTown());
+            boolean committeeNull = !provinceNull && StringUtils.isNotBlank(userInfo.getCity())
+                    && StringUtils.isNotBlank(userInfo.getArea()) && StringUtils.isNotBlank(userInfo.getTown())
+                    && StringUtils.isBlank(userInfo.getCommunity());
+            if (cityNull){
+                condition.put("province", userInfo.getProvince());
+            }else if (districtNull){
+                condition.put("province", userInfo.getProvince());
+                condition.put("city", userInfo.getCity());
+            }else if (streetNull){
+                condition.put("province", userInfo.getProvince());
+                condition.put("city", userInfo.getCity());
+                condition.put("district", userInfo.getArea());
+            }else if (committeeNull){
+                condition.put("province", userInfo.getProvince());
+                condition.put("city", userInfo.getCity());
+                condition.put("district", userInfo.getArea());
+                condition.put("street", userInfo.getTown());
+            }else {
+                condition.put("province", userInfo.getProvince());
+                condition.put("city", userInfo.getCity());
+                condition.put("district", userInfo.getArea());
+                condition.put("street", userInfo.getTown());
+                condition.put("committee", userInfo.getCommunity());
+            }
+        }
+
+        pageInfo.setCondition(condition);
+        condition.put("index",(pageIndex-1)*pageSize);
+        condition.put("size",pageSize);
+
+        List<StaticStock>stocks = staticStockService.selectStaticStocks(condition);
+        int index = (pageIndex-1)*pageSize;
+        int count = stocks.size();
+        int size = index+pageSize;
+        if (size > count){
+            size = count;
+        }
+        //总计
+        BigDecimal stockNum = new BigDecimal("0");
+        BigDecimal firecracker = new BigDecimal("0");
+        BigDecimal spray = new BigDecimal("0");
+        BigDecimal rotation = new BigDecimal("0");
+        BigDecimal bead = new BigDecimal("0");
+        BigDecimal toy = new BigDecimal("0");
+        BigDecimal combined = new BigDecimal("0");
+        if (stocks.size() > 0) {
+            for (StaticStock stock : stocks) {
+                stockNum = stockNum.add(stock.getStockNum());
+                firecracker = firecracker.add(stock.getFirecracker());
+                spray = spray.add(stock.getSpray());
+                rotation = rotation.add(stock.getRotation());
+                bead = bead.add(stock.getBead());
+                toy = toy.add(stock.getToy());
+                combined = combined.add(stock.getCombined());
+            }
+        }
+        Map<String, Object> totalRow = new HashMap<>();
+        totalRow.put("name", "总计");
+        totalRow.put("stockNum", stockNum);
+        totalRow.put("firecracker", firecracker);
+        totalRow.put("spray", spray);
+        totalRow.put("rotation", rotation);
+        totalRow.put("bead", bead);
+        totalRow.put("toy", toy);
+        totalRow.put("combined", combined);
+
+        pageInfo.setResult(stocks.subList(index,size));
+        pageInfo.setTotalCount((long) count);
+
+        PageInfoExtension<Map> extension = new PageInfoExtension<>(pageInfo);
+        extension.setExtension(totalRow);
+        msg.setResult(extension);
+        return msg;
+    }
+
+    @GetMapping("/detail")
+    public Msg getStockDetailByItemCode(
+                                      @RequestParam(value = "itemCode") String itemCode,
+                                      @RequestParam(value = "enterpriseNumber") String enterpriseNumber,
+                                      @RequestParam(value = "directionCode",required = false) String directionCode,
+                                      @RequestParam(defaultValue = "0") Integer pageIndex,
+                                      @RequestParam(defaultValue = "10") Integer pageSize,
+                                      String sort, String order){
+        Msg msg = new Msg(true);
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        Map<String, Object> condition = new HashMap<>(16);
+        condition.put("itemCode", itemCode);
+        Enterprise enterprise = enterpriseService.selectEnterpriseByNumber(enterpriseNumber);
+        if (enterprise == null){
+            return new Msg(ERROR_50001);
+        }
+        condition.put("owner", enterprise.getId());
+        if (StringUtils.isNotBlank(directionCode)) {
+            condition.put("directionCode", directionCode);
+        }
+        pageInfo.setCondition(condition);
+        stockService.selectStockDetailByItemCode(pageInfo);
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    @GetMapping("/enterpriseSale")
+    public Msg getEnterpriseSaleList(@RequestParam(value = "name", required = false) String name,
+                                      @RequestParam(value = "beginDate") String beginDate,
+                                      @RequestParam(value = "endDate") String endDate,
+                                      @RequestParam(value = "province", required = false) String province,
+                                      @RequestParam(value = "city", required = false) String city,
+                                      @RequestParam(value = "area", required = false) String area,
+                                      @RequestParam(value = "town", required = false) String town,
+                                      @RequestParam(value = "community", required = false) String community,
+                                      @RequestParam(value = "enterpriseType", required = false) String type,
+                                      @RequestParam(defaultValue = "0") Integer pageIndex,
+                                      @RequestParam(defaultValue = "10") Integer pageSize,
+                                      String sort, String order){
+        Msg msg = new Msg(true);
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        Map<String, Object> condition = new HashMap<>(16);
+        if (StringUtils.isNotBlank(name)) {
+            condition.put("name", name);
+        }
+        if (StringUtils.isNotBlank(beginDate)) {
+            condition.put("beginDate", beginDate);
+        }
+        if (StringUtils.isNotBlank(endDate)) {
+            condition.put("endDate", endDate);
+        }
+        if (StringUtils.isNotBlank(type)) {
+            condition.put("type", type);
+        }
+
+        if (StringUtils.isNotBlank(province)) {
+            condition.put("province", province);
+        }
+        if (StringUtils.isNotBlank(city)) {
+            condition.put("city", city);
+        }
+        if (StringUtils.isNotBlank(area)) {
+            condition.put("district", area);
+        }
+        if (StringUtils.isNotBlank(town)) {
+            condition.put("town", town);
+        }
+        if (StringUtils.isNotBlank(community)) {
+            condition.put("community", community);
+        }
+
+        UserInfo userInfo = userService.getById(getUser().getId());
+
+        assert userInfo != null;
+        if (userInfo.getCompanynumber() != null){
+            condition.put("operator",userInfo.getCompanynumber());
+            List<Enterprise> subs = enterpriseService.selectSubEnterprise(userInfo.getCompanyid());
+            List<String> subList = subs.stream().map(Enterprise::getEnterprisenumber).collect(Collectors.toList());
+            if (subList.size() > 0)
+                condition.put("subList", subList);
+        }
+
+        //根据用户省市区权限添加/修改查询条件
+        if (userInfo.getCompanyid() == null && userInfo.getType() == 3){
+            boolean provinceNull = StringUtils.isBlank(userInfo.getProvince());
+            boolean cityNull = !provinceNull && StringUtils.isBlank(userInfo.getCity()) ;
+            boolean districtNull = !provinceNull && StringUtils.isNotBlank(userInfo.getCity())
+                    && StringUtils.isBlank(userInfo.getArea());
+            boolean streetNull = !provinceNull && StringUtils.isNotBlank(userInfo.getCity())
+                    && StringUtils.isNotBlank(userInfo.getArea()) && StringUtils.isBlank(userInfo.getTown());
+            boolean committeeNull = !provinceNull && StringUtils.isNotBlank(userInfo.getCity())
+                    && StringUtils.isNotBlank(userInfo.getArea()) && StringUtils.isNotBlank(userInfo.getTown())
+                    && StringUtils.isBlank(userInfo.getCommunity());
+            if (cityNull){
+                condition.put("province", userInfo.getProvince());
+            }else if (districtNull){
+                condition.put("province", userInfo.getProvince());
+                condition.put("city", userInfo.getCity());
+            }else if (streetNull){
+                condition.put("province", userInfo.getProvince());
+                condition.put("city", userInfo.getCity());
+                condition.put("district", userInfo.getArea());
+            }else if (committeeNull){
+                condition.put("province", userInfo.getProvince());
+                condition.put("city", userInfo.getCity());
+                condition.put("district", userInfo.getArea());
+                condition.put("street", userInfo.getTown());
+            }else {
+                condition.put("province", userInfo.getProvince());
+                condition.put("city", userInfo.getCity());
+                condition.put("district", userInfo.getArea());
+                condition.put("street", userInfo.getTown());
+                condition.put("committee", userInfo.getCommunity());
+            }
+        }
+
+        pageInfo.setCondition(condition);
+        PageInfoExtension<Map> extension = stockService.selectEnterpriseSaleDataGrid(pageInfo);
+        msg.setResult(extension);
+        return msg;
+    }
+
+    @GetMapping("/saleInfo")
+    public Msg getSaleInfo(@RequestParam(value = "name", required = false) String name,
+                           @RequestParam(value = "directionCode", required = false) String directionCode,
+                           @RequestParam(value = "manufacturer", required = false) String manufacturer,
+                           @RequestParam(value = "type", required = false) String type,
+                           @RequestParam(value = "enterpriseNumber", required = false) String companyNumber,
+                           @RequestParam(value = "beginDate") String beginDate,
+                           @RequestParam(value = "endDate") String endDate,
+                           @RequestParam(defaultValue = "0") Integer pageIndex,
+                           @RequestParam(defaultValue = "10") Integer pageSize,
+                           String sort, String order){
+        Msg msg = new Msg(true);
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        Map<String, Object> condition = new HashMap<>(8);
+
+        if (StringUtils.isNotBlank(name)) {
+            condition.put("name", name);
+        }
+        if (StringUtils.isNotBlank(directionCode)) {
+            condition.put("directionCode", directionCode);
+        }
+        if (StringUtils.isNotBlank(manufacturer)) {
+            condition.put("manufacturer", manufacturer);
+        }
+        if (StringUtils.isNotBlank(type)) {
+            condition.put("type", type);
+        }
+        if (StringUtils.isNotBlank(companyNumber)) {
+            condition.put("companyNumber", companyNumber);
+        }
+        condition.put("beginDate",beginDate);
+        condition.put("endDate",endDate);
+        pageInfo.setCondition(condition);
+        stockService.selectSaleDetailDataGrid(pageInfo);
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    @PostMapping("/refreshStock")
+    public Msg refreshStock(){
+        Msg msg = new Msg(true);
+        stockService.saveOrUpdateCurrentStock(getUser().getUsername());
+        return msg;
+    }
+
+    @PostMapping("/clearStock")
+    public Msg clearStock(@RequestBody JSONObject object){
+        String owners = object.getString("owners");
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (userInfo.getType() != 1){
+            return new Msg(ERROR_70001);
+        }
+        if (StringUtils.isBlank(owners)){
+            return new Msg(ERROR_10001);
+        }
+        List<String> list = StringUtils.toList(owners);
+        for (String owner : list){
+            Enterprise enterprise = enterpriseService.getById(owner);
+            if (enterprise == null){
+                return new Msg(ERROR_50001);
+            }
+            boolean flag = stockService.clearStock(enterprise);
+        }
+        return success();
+    }
+
+    @PostMapping("/clearStockByItem")
+    public Msg clearStockByItem(@RequestBody JSONObject object){
+        String owner = object.getString("owner");
+        String directionCodes = object.getString("directionCodes");
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (userInfo.getType() != 1){
+            return new Msg(ERROR_70001);
+        }
+        if (StringUtils.isBlank(owner) || StringUtils.isBlank(directionCodes)){
+            return new Msg(ERROR_10001);
+        }
+        List<String> list = StringUtils.toList(directionCodes);
+        Enterprise enterprise = enterpriseService.getById(owner);
+        if (enterprise == null){
+            return new Msg(ERROR_50001);
+        }
+        boolean flag = stockService.clearStockByItems(enterprise,list);
+        return success();
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Controller/TransportController.java b/src/main/java/com/gk/firework/Controller/TransportController.java
new file mode 100644
index 0000000..488aadf
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/TransportController.java
@@ -0,0 +1,559 @@
+package com.gk.firework.Controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Controller.Base.BaseController;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.Utils.FilterObject;
+import com.gk.firework.Domain.Utils.Msg;
+import com.gk.firework.Domain.Utils.Properties;
+import com.gk.firework.Domain.Vo.Product2JsonVo;
+import com.gk.firework.Domain.Vo.TransportArrivalVo;
+import com.gk.firework.Domain.Vo.TransportCertVo;
+import com.gk.firework.Service.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.List;
+import java.util.Map;
+
+@Api(tags = "运输证管理")
+@RequestMapping("/transport")
+@RestController
+public class TransportController extends BaseController {
+
+    @Autowired
+    private TransportCarrierService transportCarrierService;
+    @Autowired
+    private TransportPersonService transportPersonService;
+    @Autowired
+    private TransportCertificateService transportCertificateService;
+    @Autowired
+    private TransportCertService transportCertService;
+    @Autowired
+    private TransportCertificateFileService transportCertificateFileService;
+    @Autowired
+    private TransportCertificateArrivalRecordService transportCertificateArrivalRecordService;
+    @Autowired
+    private ProductService productService;
+
+    /**
+    * @Description: 承运人管理
+    * @date 2021/3/30 11:04
+    */
+    @PostMapping("/carrierList")
+    @ApiOperation(value = "承运人查询", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "页码",required = true),
+            @ApiImplicitParam(name = "pageSize",value = "页面大小",required = true),
+            @ApiImplicitParam(name = "filter",value = "过滤条件",required = true),
+    })
+    Object carrierList(@RequestBody FilterObject carrierFilter) {
+        Integer pageIndex = carrierFilter.getPageIndex();
+        Integer pageSize = carrierFilter.getPageSize();
+        IPage page = transportCarrierService.selectPage(new Page<>(pageIndex,pageSize),carrierFilter.getFilter());
+        return success(page);
+    }
+
+    @PostMapping("/addcarrier")
+    @ApiOperation(value = "新增承运人", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id",value = "承运人id(不传)"),
+            @ApiImplicitParam(name = "companyname",value = "单位名称"),
+            @ApiImplicitParam(name = "number",value = "危险货物道路运输资质证号"),
+            @ApiImplicitParam(name = "phone",value = "联系电话"),
+            @ApiImplicitParam(name = "validtime",value = "有效时间"),
+    })
+    Object addCarrier(@RequestBody TransportCarrier transportCarrier) {
+        transportCarrierService.checkCarrier(transportCarrier);
+        transportCarrierService.addCarrier(transportCarrier,getUser());
+        return success();
+    }
+
+    @PostMapping("/putcarrier")
+    @ApiOperation(value = "修改承运人", httpMethod = "PUT")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "id",value = "承运人id(必传)",required = true),
+        @ApiImplicitParam(name = "companyname",value = "单位名称"),
+        @ApiImplicitParam(name = "number",value = "危险货物道路运输资质证号"),
+        @ApiImplicitParam(name = "phone",value = "联系电话"),
+        @ApiImplicitParam(name = "validtime",value = "有效时间"),
+    })
+    Object modCarrier(@RequestBody TransportCarrier transportCarrier) {
+        transportCarrierService.checkCarrier(transportCarrier);
+        transportCarrierService.modCarrier(transportCarrier,getUser());
+        return success();
+    }
+
+
+    @PostMapping("/delcarrier")
+    @ApiOperation(value = "删除承运人", httpMethod = "DELETE")
+    @ApiImplicitParam(name = "id",value = "承运人id(必传)")
+    Object delCarrier(@RequestParam Long id) {
+        transportCarrierService.delCarrier(id,getUser());
+        return success();
+    }
+
+    /**
+     * @Description: 驾驶员|押运员管理
+     * @date 2021/3/30 11:04
+     */
+    @PostMapping("/personList")
+    @ApiOperation(value = "驾驶员|押运员查询", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "页码",required = true),
+            @ApiImplicitParam(name = "pageSize",value = "页面大小",required = true),
+            @ApiImplicitParam(name = "filter",value = "过滤条件",required = true),
+    })
+    Object personList(@RequestBody FilterObject carrierFilter) {
+        Integer pageIndex = carrierFilter.getPageIndex();
+        Integer pageSize = carrierFilter.getPageSize();
+        IPage page = transportPersonService.selectPage(new Page<>(pageIndex,pageSize),carrierFilter.getFilter());
+        return success(page);
+    }
+
+    @PostMapping("/addperson")
+    @ApiOperation(value = "新增驾驶员|押运员", httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "承运人id(不传)"),
+            @ApiImplicitParam(name = "type", value = "类别", required = true),
+            @ApiImplicitParam(name = "name", value = "姓名", required = true),
+            @ApiImplicitParam(name = "phone", value = "电话", required = true),
+            @ApiImplicitParam(name = "identify", value = "身份证号", required = true),
+            @ApiImplicitParam(name = "certificate", value = "资格证", required = true),
+            @ApiImplicitParam(name = "validtime", value = "有效期", required = true),
+            @ApiImplicitParam(name = "belongid", value = "隶属承运人id", required = true),
+            @ApiImplicitParam(name = "belongname", value = "隶属承运人name", required = true),
+    })
+    Object addPerson(@RequestBody TransportPerson transportPerson) {
+        transportPersonService.checkPerson(transportPerson);
+        transportPersonService.addPerson(transportPerson, getUser());
+        return success();
+    }
+
+    @PostMapping("/putperson")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "驾驶员|押运员id(必传)", required = true),
+            @ApiImplicitParam(name = "type", value = "类别", required = true),
+            @ApiImplicitParam(name = "name", value = "姓名", required = true),
+            @ApiImplicitParam(name = "identify", value = "身份证号", required = true),
+            @ApiImplicitParam(name = "certificate", value = "资格证", required = true),
+            @ApiImplicitParam(name = "validtime", value = "有效期", required = true),
+            @ApiImplicitParam(name = "belongid", value = "隶属承运人id", required = true),
+            @ApiImplicitParam(name = "belongname", value = "隶属承运人name", required = true),
+            @ApiImplicitParam(name = "phone", value = "电话", required = true),
+    })
+    Object modPerson(@RequestBody TransportPerson transportPerson) {
+        transportPersonService.modPerson(transportPerson, getUser());
+        return success();
+    }
+
+    @PostMapping("/delperson")
+    @ApiImplicitParam(name = "id", value = "驾驶员|押运员id(必传)", required = true)
+    Object delPerson(@RequestParam Long id) {
+        transportPersonService.delPerson(id, getUser());
+        return success();
+    }
+
+
+    /**
+    * @Description: 运输证
+    * @date 2021/3/31 15:39
+    */
+    @PostMapping("/certificateList")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "页码",required = true),
+            @ApiImplicitParam(name = "pageSize",value = "页面大小",required = true),
+            @ApiImplicitParam(name = "filter.code", value = "运输证编码", required = true),
+            @ApiImplicitParam(name = "filter.province", value = "省", required = true),
+            @ApiImplicitParam(name = "filter.city", value = "市", required = true),
+            @ApiImplicitParam(name = "filter.district", value = "区", required = true),
+            @ApiImplicitParam(name = "filter.street", value = "街道", required = true),
+            @ApiImplicitParam(name = "filter.committee", value = "委员会", required = true),
+    })
+    Object certificateList(@RequestBody FilterObject certificateFilter) {
+        Integer pageIndex = certificateFilter.getPageIndex();
+        Integer pageSize = certificateFilter.getPageSize();
+        IPage page =  transportCertificateService.selectPages(new Page<>(pageIndex,pageSize), certificateFilter.getFilter(),getUser());
+        return success(page);
+    }
+
+    /**
+     * @Description: 新增运输证
+     * @date 2021/3/31 17:58
+     */
+    @PostMapping("/upload")
+    @ApiImplicitParam(name = "file", value = "上传文件", required = true)
+    Object upload(MultipartFile[] file) {
+        try {
+            List<String> urls = transportCertificateFileService.uploadFiles(file);
+            return success(urls);
+        } catch (Exception e) {
+            e.printStackTrace();
+            Msg msg = new Msg();
+            msg.setCode("400");
+            msg.setMessage("上传失败");
+            return msg;
+        }
+
+    }
+
+    @PostMapping("/addcertificate")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id",value = "主键id(不传)",required = true),
+            @ApiImplicitParam(name = "code",value = "运输编号(不传)",required = true),
+            @ApiImplicitParam(name = "type",value = "运输证类型",required = true),
+            @ApiImplicitParam(name = "contractcode",value = "电子合同编号",required = true),
+            @ApiImplicitParam(name = "salecompanyid", value = "销售单位id", required = true),
+            @ApiImplicitParam(name = "salecompanyname", value = "销售单位name", required = true),
+            @ApiImplicitParam(name = "productionlicense", value = "生产经营许可证", required = true),
+            @ApiImplicitParam(name = "contractnumber", value = "安全买卖合同编号", required = true),
+            @ApiImplicitParam(name = "shippercompanyname", value = "托运人:单位名称 ", required = true),
+            @ApiImplicitParam(name = "shipperaddress", value = "托运人:地址", required = true),
+            @ApiImplicitParam(name = "shipperprincipalname", value = "运人:负责人姓名 ", required = true),
+            @ApiImplicitParam(name = "shipperprincipalphone", value = "托运人:负责人电话", required = true),
+            @ApiImplicitParam(name = "shippermanagername", value = "托运人:经办人姓名", required = true),
+            @ApiImplicitParam(name = "shippermanageridentify", value = "托运人:经办人身份证号", required = true),
+            @ApiImplicitParam(name = "shippermanagerphone", value = "托运人:经办人电话", required = true),
+            @ApiImplicitParam(name = "receivercompanyname", value = "收货人:单位名称", required = true),
+            @ApiImplicitParam(name = "receiveraddress", value = "收货人:地址", required = true),
+            @ApiImplicitParam(name = "receiverprincipalname", value = "收货人:负责人姓名", required = true),
+            @ApiImplicitParam(name = "receiverprincipalphone", value = "收货人:负责人电话", required = true),
+            @ApiImplicitParam(name = "carrierid", value = "承运人id", required = true),
+            @ApiImplicitParam(name = "carriercompanyname", value = "承运人单位名称", required = true),
+            @ApiImplicitParam(name = "carrieraddress", value = "承运人:地址", required = true),
+            @ApiImplicitParam(name = "carrierprincipalname", value = "承运人:负责人姓名", required = true),
+            @ApiImplicitParam(name = "carrierprincipalphone", value = "承运人:负责人电话", required = true),
+            @ApiImplicitParam(name = "carriernumber", value = "承运人:道路运输证号", required = true),
+            @ApiImplicitParam(name = "carriercarnumber", value = "承运人:运输车辆牌号", required = true),
+            @ApiImplicitParam(name = "carriervalidtime", value = "承运人:证件有效期", required = true),
+            @ApiImplicitParam(name = "otherdeparture", value = "其他:起始地", required = true),
+            @ApiImplicitParam(name = "otherdestination", value = "其他:到达地", required = true),
+            @ApiImplicitParam(name = "othershipstarttime", value = "其他:运输起始时间", required = true),
+            @ApiImplicitParam(name = "othershipendtime", value = "其他:运输截止时间", required = true),
+            @ApiImplicitParam(name = "othermemo", value = "其他:备注", required = true),
+            @ApiImplicitParam(name = "transportPerson", value = "押运人|驾驶员", required = true),
+            @ApiImplicitParam(name = "transportProduct", value = "运输产品", required = true),
+            @ApiImplicitParam(name = "transportApproach", value = "途径地", required = true),
+            @ApiImplicitParam(name = "transportFile", value = "上传10文件", required = true),
+    })
+    Object addCertificateApply(@RequestBody TransportCertificate transportCertificate) {
+        transportCertificateService.checkAddApply(transportCertificate);
+        transportCertificateService.addCertificateApply(transportCertificate,getUser());
+        return success();
+    }
+
+
+    @PostMapping("/putcertificate")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id",value = "主键id(不传)",required = true),
+            @ApiImplicitParam(name = "type",value = "运输证类型",required = true),
+            @ApiImplicitParam(name = "code",value = "运输编号(不传)",required = true),
+            @ApiImplicitParam(name = "contractcode",value = "电子合同编号",required = true),
+            @ApiImplicitParam(name = "salecompanyid", value = "销售单位id", required = true),
+            @ApiImplicitParam(name = "salecompanyname", value = "销售单位name", required = true),
+            @ApiImplicitParam(name = "productionlicense", value = "生产经营许可证", required = true),
+            @ApiImplicitParam(name = "contractnumber", value = "安全买卖合同编号", required = true),
+            @ApiImplicitParam(name = "shippercompanyname", value = "托运人:单位名称 ", required = true),
+            @ApiImplicitParam(name = "shipperaddress", value = "托运人:地址", required = true),
+            @ApiImplicitParam(name = "shipperprincipalname", value = "运人:负责人姓名 ", required = true),
+            @ApiImplicitParam(name = "shipperprincipalphone", value = "托运人:负责人电话", required = true),
+            @ApiImplicitParam(name = "shippermanagername", value = "托运人:经办人姓名", required = true),
+            @ApiImplicitParam(name = "shippermanageridentify", value = "托运人:经办人身份证号", required = true),
+            @ApiImplicitParam(name = "shippermanagerphone", value = "托运人:经办人电话", required = true),
+            @ApiImplicitParam(name = "receivercompanyname", value = "收货人:单位名称", required = true),
+            @ApiImplicitParam(name = "receiveraddress", value = "收货人:地址", required = true),
+            @ApiImplicitParam(name = "receiverprincipalname", value = "收货人:负责人姓名", required = true),
+            @ApiImplicitParam(name = "receiverprincipalphone", value = "收货人:负责人电话", required = true),
+            @ApiImplicitParam(name = "carrierid", value = "承运人id", required = true),
+            @ApiImplicitParam(name = "carriercompanyname", value = "承运人单位名称", required = true),
+            @ApiImplicitParam(name = "carrieraddress", value = "承运人:地址", required = true),
+            @ApiImplicitParam(name = "carrierprincipalname", value = "承运人:负责人姓名", required = true),
+            @ApiImplicitParam(name = "carrierprincipalphone", value = "承运人:负责人电话", required = true),
+            @ApiImplicitParam(name = "carriernumber", value = "承运人:道路运输证号", required = true),
+            @ApiImplicitParam(name = "carriercarnumber", value = "承运人:运输车辆牌号", required = true),
+            @ApiImplicitParam(name = "carriervalidtime", value = "承运人:证件有效期", required = true),
+            @ApiImplicitParam(name = "otherdeparture", value = "其他:起始地", required = true),
+            @ApiImplicitParam(name = "otherdestination", value = "其他:到达地", required = true),
+            @ApiImplicitParam(name = "othershipstarttime", value = "其他:运输起始时间", required = true),
+            @ApiImplicitParam(name = "othershipendtime", value = "其他:运输截止时间", required = true),
+            @ApiImplicitParam(name = "othermemo", value = "其他:备注", required = true),
+            @ApiImplicitParam(name = "transportPerson", value = "押运人|驾驶员", required = true),
+            @ApiImplicitParam(name = "transportProduct", value = "运输产品", required = true),
+            @ApiImplicitParam(name = "transportApproach", value = "途径地", required = true),
+            @ApiImplicitParam(name = "transportFile", value = "上传10文件", required = true),
+    })
+    Object modCertificateApply(@RequestBody TransportCertificate transportCertificate) {
+        transportCertificateService.checkAddApply(transportCertificate);
+        transportCertificateService.modCertificateApply(transportCertificate,getUser());
+        return success();
+    }
+
+    /**
+    * @Description: 提交单子
+    * @date 2021/5/11 16:08
+    */
+    @PostMapping("/submit")
+    @ApiImplicitParam(name = "id", value = "单子", required = true)
+    Object summitApply(@RequestParam Long id) {
+        transportCertificateService.summitApply(id,getUser());
+        return success();
+    }
+
+    /**
+     * @Description: 监管部门审批单子
+     * @date 2021/5/11 16:08
+     */
+    @PostMapping("/approve")
+    @ApiImplicitParam(name = "id", value = "单子", required = true)
+    Object approveApply(@RequestBody JSONObject approveInfo) {
+        transportCertificateService.approveApply(approveInfo,getUser());
+        return success();
+    }
+
+
+
+    /**
+     * @Description: 监管部门拒绝单子
+     * @date 2021/5/11 16:08
+     */
+    @PostMapping("/refuse")
+    @ApiImplicitParam(name = "id", value = "单子", required = true)
+    Object refuseApply(@RequestParam Long id) {
+        transportCertificateService.refuseApply(id,getUser());
+        return success();
+    }
+
+
+    /**
+     * @Description: 导出运输许可证 三联
+     * @date 2021/5/11 17:14
+     */
+    @GetMapping("/export/certificate")
+    Object exportCertificate(HttpServletRequest request, HttpServletResponse response, @RequestParam Long id) throws IOException {
+        String fileName = "烟花爆竹道路许可证.docx";
+        String fileUrlOnServer = transportCertificateService.exportCertificate(id);
+        return success(fileUrlOnServer);
+//        response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
+//        response.setContentType("application/msword");
+//        // 创建输出流
+//        try (FileInputStream in = new FileInputStream(fileUrlOnServer); OutputStream out = response.getOutputStream()) {
+//            // 缓存区
+//            byte[] buffer = new byte[1024];
+//            int len = 0;
+//            // 循环将输入流中的内容读取到缓冲区中
+//            while ((len = in.read(buffer)) > 0) {
+//                out.write(buffer, 0, len);
+//            }
+//        }
+    }
+
+    /**
+    * @Description: 导出运输许可证申请
+    * @date 2021/5/13 14:00
+    */
+    @GetMapping("/export/certificateApply")
+    Object exportCertificateApply( HttpServletResponse response, @RequestParam Long id) throws IOException {
+        String fileName = "烟花爆竹道路许可证申请.docx";
+        String fileUrlOnServer = transportCertificateService.exportCertificateApply(id);
+        return success(fileUrlOnServer);
+//        response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
+//        response.setContentType("application/msword");
+//        // 创建输出流
+//        try (FileInputStream in = new FileInputStream(fileUrlOnServer); OutputStream out = response.getOutputStream()) {
+//            // 缓存区
+//            byte[] buffer = new byte[1024];
+//            int len = 0;
+//            // 循环将输入流中的内容读取到缓冲区中
+//            while ((len = in.read(buffer)) > 0) {
+//                out.write(buffer, 0, len);
+//            }
+//        }
+    }
+
+
+
+    @PostMapping("/delcertificate")
+    @ApiImplicitParam(name = "id", value = "运输证id", required = true)
+    Object delCertificate(@RequestParam Long id) {
+        transportCertificateService.delCertificate(id,getUser());
+        return success();
+    }
+
+
+
+    /**
+     * @Description: 运输证 改
+     * @date 2021/3/31 15:39
+     */
+    @PostMapping("/certList")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "页码",required = true),
+            @ApiImplicitParam(name = "pageSize",value = "页面大小",required = true),
+            @ApiImplicitParam(name = "filter.code", value = "运输证编码", required = true),
+            @ApiImplicitParam(name = "filter.province", value = "省", required = true),
+            @ApiImplicitParam(name = "filter.city", value = "市", required = true),
+            @ApiImplicitParam(name = "filter.district", value = "区", required = true),
+            @ApiImplicitParam(name = "filter.street", value = "街道", required = true),
+            @ApiImplicitParam(name = "filter.committee", value = "委员会", required = true),
+    })
+    Object transportCertList(@RequestBody FilterObject filterObject) {
+        Integer pageIndex = filterObject.getPageIndex();
+        Integer pageSize = filterObject.getPageSize();
+        IPage page =  transportCertService.selectPages(new Page<>(pageIndex,pageSize), filterObject.getFilter(),getUser());
+        return success(page);
+    }
+
+    /**
+     * @Description: 新增运输证
+     * @date 2021/4/25 9:30
+     */
+    @PostMapping("/addcert")
+    @ApiOperation("新增运输证")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id",value = "主键id(不传)",required = true),
+            @ApiImplicitParam(name = "code",value = "运输编号(不传)",required = true),
+            @ApiImplicitParam(name = "contractcode",value = "电子合同编号",required = true),
+            @ApiImplicitParam(name = "receivercompanyname", value = "收货人:单位名称", required = true),
+            @ApiImplicitParam(name = "receiveraddress", value = "收货人:地址", required = true),
+            @ApiImplicitParam(name = "receiverprincipalname", value = "收货人:负责人姓名", required = true),
+            @ApiImplicitParam(name = "receiverprincipalphone", value = "收货人:负责人电话", required = true),
+            @ApiImplicitParam(name = "carnumber", value = "运输车辆牌号", required = true),
+            @ApiImplicitParam(name = "transportPerson", value = "押运人|驾驶员", required = true),
+            @ApiImplicitParam(name = "transportProduct", value = "运输产品", required = true),
+            @ApiImplicitParam(name = "file", value = "上传文件", required = true),
+    })
+    Object addTransportCertificate(TransportCertVo transportCertVo) {
+        Msg msg = new Msg();
+        msg.setCode("200");
+        try {
+            transportCertService.addCert(transportCertVo, getUser());
+        } catch (BusinessException e) {
+            msg.setMessage(e.getMessage());
+            msg.setCode("400");
+        } catch (Exception e) {
+            e.printStackTrace();
+            msg.setCode("400");
+            msg.setMessage("发生错误,请联系管理员");
+        }
+        return msg;
+    }
+
+
+    /**
+     * @Description: 修改运输证
+     * @date 2021/4/25 9:30
+     */
+    @PostMapping("/putcert")
+    @ApiOperation("修改运输证")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id",value = "主键id(不传)",required = true),
+            @ApiImplicitParam(name = "type",value = "运输证类型",required = true),
+            @ApiImplicitParam(name = "code",value = "运输编号(不传)",required = true),
+            @ApiImplicitParam(name = "contractcode",value = "电子合同编号",required = true),
+            @ApiImplicitParam(name = "receivercompanyname", value = "收货人:单位名称", required = true),
+            @ApiImplicitParam(name = "receiveraddress", value = "收货人:地址", required = true),
+            @ApiImplicitParam(name = "receiverprincipalname", value = "收货人:负责人姓名", required = true),
+            @ApiImplicitParam(name = "receiverprincipalphone", value = "收货人:负责人电话", required = true),
+            @ApiImplicitParam(name = "carnumber", value = "运输车辆牌号", required = true),
+            @ApiImplicitParam(name = "transportPerson", value = "押运人|驾驶员", required = true),
+            @ApiImplicitParam(name = "transportProduct", value = "运输产品", required = true),
+            @ApiImplicitParam(name = "file", value = "上传文件", required = true),
+    })
+    Object modCert( TransportCertVo transportCertVo) {
+
+        Msg msg = new Msg();
+        msg.setCode("200");
+        try {
+            transportCertService.modCert(transportCertVo,getUser());
+        } catch (BusinessException e) {
+            msg.setMessage(e.getMessage());
+            msg.setCode("400");
+        } catch (Exception e) {
+            e.printStackTrace();
+            msg.setCode("400");
+            msg.setMessage("发生错误,请联系管理员");
+        }
+        return msg;
+    }
+
+
+
+    @PostMapping("/delcert")
+    @ApiOperation("删除运输证")
+    Object delCert(@RequestParam Long id) {
+        transportCertService.delCert(id,getUser());
+        return success();
+    }
+
+
+    /**
+    * @Description: 根据运输证编号获取运输证信息
+    * @date 2021/5/14 18:41
+    */
+    @GetMapping("/getCertByCode")
+    @ApiOperation("获取运输证信息")
+    Object getCertByCode(@RequestParam String code) {
+        TransportCertificate certificate = transportCertificateService.getByCode(code);
+        return success(certificate);
+    }
+
+
+    /**
+    * @Description: 根据单号修改产品到货数量
+    * @date 2021/5/14 19:21
+    */
+    @PostMapping("/sendArrivalNum")
+    @ApiOperation("获取运输证信息")
+    Object sendArrivalNum(@RequestBody TransportArrivalVo transportArrivalVo) {
+        transportCertificateService.modTransportProductArrivalNum(transportArrivalVo,getUser());
+        return success();
+    }
+
+    /**
+    * @Description: 查找到运输证到货数量
+    * @date 2021/5/14 20:20
+    */
+    @GetMapping("/transportArrivalList")
+    @ApiOperation("获取运输证信息")
+    Object getTransportArrival(@RequestParam Integer pageIndex,@RequestParam Integer pageSize) {
+        IPage page = transportCertificateArrivalRecordService.selectTransportArrivalPages(new Page<>(pageIndex,pageSize),getUser());
+        return success(page);
+    }
+    /**
+    * @Description: 获取运输证到货记录详情
+    * @date 2021/5/14 20:38
+    */
+    @GetMapping("/getTransportArrivalDetail")
+    @ApiOperation("获取运输证信息")
+    Object getTransportArrivalDetail(@RequestParam String certificateCode) {
+        List<TransportCertificateArrivalRecord>  list =  transportCertificateArrivalRecordService.getTransportArrivalDetail(certificateCode,getUser());
+        return success(list);
+    }
+
+    /**
+    * @Description: 上传的excel文件转换成json产品列表返回
+    * @date 2021/5/25 10:19
+    */
+    @PostMapping("/product2json")
+    public Msg product2json(MultipartFile file) {
+        List<Product2JsonVo> product2JsonVos = productService.transform2JsonSimple(file, getUser());
+        return success(product2JsonVos);
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Controller/UserController.java b/src/main/java/com/gk/firework/Controller/UserController.java
new file mode 100644
index 0000000..e924425
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/UserController.java
@@ -0,0 +1,802 @@
+package com.gk.firework.Controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.gk.firework.Controller.Base.BaseController;
+import com.gk.firework.Domain.DTO.JiangWaiDeadlineReqDTO;
+import com.gk.firework.Domain.DistrictInfo;
+import com.gk.firework.Domain.Enterprise;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.UserRolesInfo;
+import com.gk.firework.Domain.Utils.*;
+import com.gk.firework.Service.*;
+import io.swagger.annotations.*;
+import org.apache.catalina.User;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@Api(tags = "用户管理数据接口")
+@RestController
+public class UserController extends BaseController {
+
+    @Autowired
+    UserService userService;
+    @Autowired
+    RoleService roleService;
+    @Autowired
+    UserRolesService userRolesService;
+    @Autowired
+    RolePermissionsService rolePermissionsService;
+    @Autowired
+    ExcelExportService excelExportService;
+    @Autowired
+    DistrictService districtService;
+    @Autowired
+    UserRolesService userRolesInfoService;
+    @Autowired
+    EnterpriseService enterpriseService;
+    @Autowired
+    UserDeadlineService userDeadlineService;
+
+    @Value("${filePath}")
+    private String filePath; //配置文件配置的物理保存地址
+
+    @GetMapping("/user")
+    @ApiOperation(value = "获取用户数据",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码"),
+            @ApiImplicitParam(name = "pageSize",value = "每页行数"),
+            @ApiImplicitParam(name = "sort",value = "排序规则"),
+            @ApiImplicitParam(name = "order",value = "排序字段"),
+            @ApiImplicitParam(name = "username",value = "用户名"),
+            @ApiImplicitParam(name = "company",value = "单位"),
+            @ApiImplicitParam(name = "department",value = "部门"),
+            @ApiImplicitParam(name = "job",value = "职务"),
+            @ApiImplicitParam(name = "type",value = "用户类型"),
+            @ApiImplicitParam(name = "province",value = "省份"),
+            @ApiImplicitParam(name = "city",value = "城市"),
+            @ApiImplicitParam(name = "area",value = "区县"),
+            @ApiImplicitParam(name = "town",value = "乡镇"),
+            @ApiImplicitParam(name = "community",value = "社区"),
+    })
+    public Msg getUserInfo(@RequestParam(defaultValue = "0") Integer pageIndex, @RequestParam(defaultValue = "10") Integer pageSize, String sort,String order,
+                                    String username,String company, String department, String job,Byte type,
+                           String province, String city, String area, String town, String community){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        HashMap<String, Object> condition = new HashMap<String, Object>();
+
+        if (StringUtils.isNotBlank(username)) {
+            condition.put("username", username.trim());
+        }
+
+        if (StringUtils.isNotBlank(company)) {
+            condition.put("company", company.trim());
+        }
+
+        if (StringUtils.isNotBlank(department)) {
+            condition.put("department", department.trim());
+        }
+
+        if (StringUtils.isNotBlank(job)){
+            condition.put("job",job.trim());
+        }
+
+        if (type != null){
+            condition.put("type",type);
+        }
+
+        if (StringUtils.isNotBlank(province)){
+            condition.put("province",province.trim());
+        }
+
+        if (StringUtils.isNotBlank(city)){
+            condition.put("city",city.trim());
+        }
+
+        if (StringUtils.isNotBlank(area)){
+            condition.put("area",area.trim());
+        }
+
+        if (StringUtils.isNotBlank(town)){
+            condition.put("town",town.trim());
+        }
+
+        if (StringUtils.isNotBlank(community)){
+            condition.put("community",community.trim());
+        }
+
+        UserInfo userInfo = userService.selectByUser(getUser().getUsername());
+        if (StringUtils.isNotBlank(userInfo.getCompanynumber())){
+            condition.put("username", userInfo.getUsername());
+        }else{
+            condition.put("provinceSee", userInfo.getProvince());
+            condition.put("citySee",userInfo.getCity());
+            condition.put("areaSee",userInfo.getArea());
+            condition.put("townSee",userInfo.getTown());
+            condition.put("communitySee",userInfo.getCommunity());
+        }
+
+        condition.put("iscompany",(byte)0);
+        condition.put("issale",(byte)0);
+        pageInfo.setCondition(condition);
+        userService.selectUserDataGrid(pageInfo);
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    @PostMapping("/adduser")
+    @ApiOperation(value = "添加用户数据",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "username",value = "用户名",required = true),
+            @ApiImplicitParam(name = "password",value = "密码",required = true),
+            @ApiImplicitParam(name = "type",value = "用户类型",required = true),
+            @ApiImplicitParam(name = "email",value = "邮箱"),
+            @ApiImplicitParam(name = "phone",value = "办公电话"),
+            @ApiImplicitParam(name = "mobile",value = "手机号"),
+            @ApiImplicitParam(name = "company",value = "单位"),
+            @ApiImplicitParam(name = "department",value = "部门"),
+            @ApiImplicitParam(name = "job",value = "职务"),
+            @ApiImplicitParam(name = "createdby",value = "创建人"),
+            @ApiImplicitParam(name = "province",value = "省份"),
+            @ApiImplicitParam(name = "city",value = "城市"),
+            @ApiImplicitParam(name = "area",value = "区县"),
+            @ApiImplicitParam(name = "town",value = "乡镇"),
+            @ApiImplicitParam(name = "community",value = "社区"),
+    })
+    public Msg addUserInfo(@RequestBody JSONObject jsonObject){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        UserInfo userInfo = new UserInfo();
+        userInfo.setUsername(jsonObject.getString("username"));
+        String password = jsonObject.getString("password");
+        String PW_PATTERN = "(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[~!@#$%^&*_.]).{8,}";
+        if (!password.matches(PW_PATTERN)){
+            msg.setCode("500");
+            msg.setMessage("密码必须8位以上,并且包含大小写字母、数字、特殊符号三种以上");
+            return msg;
+        }else {
+            userInfo.setPassword(Base64Encrypt.encode(password.getBytes()));
+        }
+        String mobile = jsonObject.getString("mobile");
+        if (StringUtils.isNotBlank(mobile) && mobile.length() == 11){
+            userInfo.setMobile(mobile);
+        }else if (StringUtils.isNotBlank(mobile)){
+            msg.setCode("500");
+            msg.setMessage("手机号必须为11位数");
+            return msg;
+        }
+        try {
+            userInfo.setType(jsonObject.getInteger("type"));
+        }catch (Exception e) {
+            msg.setCode("500");
+            msg.setMessage("用户类型必须为数字");
+            return msg;
+        }
+        userInfo.setEmail(jsonObject.getString("email"));
+        userInfo.setPhone(jsonObject.getString("phone"));
+        userInfo.setCompany(jsonObject.getString("company"));
+        userInfo.setDepartment(jsonObject.getString("department"));
+        userInfo.setJob(jsonObject.getString("job"));
+        userInfo.setCreatedby(jsonObject.getString("createdby"));
+        userInfo.setCreateddate(new Date());
+        userInfo.setLastmodifiedby(jsonObject.getString("createdby"));
+        userInfo.setLastmodifieddate(new Date());
+        userInfo.setProvince(jsonObject.getString("province"));
+        userInfo.setCity(jsonObject.getString("city"));
+        userInfo.setArea(jsonObject.getString("area"));
+        userInfo.setTown(jsonObject.getString("town"));
+        userInfo.setCommunity(jsonObject.getString("community"));
+        userInfo.setCode(jsonObject.getString("code"));
+        userInfo.setIsdel((byte)0);
+        userInfo.setIssale((byte)0);
+        UserInfo userInfoExist = userService.selectByUser(userInfo.getUsername());
+        if (null != userInfoExist){
+            msg.setCode("500");
+            msg.setMessage("用户名重复");
+            return msg;
+        }else {
+            userService.save(userInfo);
+        }
+        return msg;
+    }
+
+    @PostMapping("/importUser")
+    @ApiOperation(value = "导入用户数据",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "file",value = "文件",required = true),
+            @ApiImplicitParam(name = "operator",value = "操作人",required = true),
+    })
+    @ResponseBody
+    public Msg importUser(String operator,MultipartFile file){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        String filesave ="";
+        try {
+            SimpleDateFormat sdf = new SimpleDateFormat( "yyyyMMddHHmmssSSS" );
+            if (file == null)
+            {
+                msg.setCode("404");
+                msg.setMessage("未找到上传文件");
+                return msg;
+            }
+
+            long size = file.getSize();
+            if(0 == size)
+            {
+                msg.setCode("404");
+                msg.setMessage("上传文件大小为空");
+                return msg;
+            }
+
+            if(!FileOptUtils.isDirExists(filePath)){
+                msg.setCode("500");
+                msg.setMessage("发生错误或不为目录");
+                return msg;
+            }
+
+            filesave = filePath + operator + "_" + sdf.format(new Date()) +".xlsx";
+
+            file.transferTo(new File(filesave));
+            InputStream in = new FileInputStream(filesave);
+            String name = file.getOriginalFilename();
+            Boolean isExcel2007 = name.substring(name.lastIndexOf(".") + 1).endsWith("xlsx")? true:false;
+            BooleanReason blret = excelExportService.importUserExcel(in,operator,isExcel2007);
+            if(blret.getValue().equals(false))
+            {
+                msg.setCode("500");
+                msg.setMessage(blret.getResultmsg());
+                return msg;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            msg.setCode("500");
+            msg.setMessage("导入发生错误");
+            return msg;
+        }
+
+        return msg;
+    }
+
+
+    @PostMapping("/importUserCode")
+    @ApiOperation(value = "导入用户数据",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "file",value = "文件",required = true),
+            @ApiImplicitParam(name = "operator",value = "操作人",required = true),
+    })
+    @ResponseBody
+    public Msg importUserCode(String operator,MultipartFile file){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        String filesave ="";
+        try {
+            SimpleDateFormat sdf = new SimpleDateFormat( "yyyyMMddHHmmssSSS" );
+            if (file == null)
+            {
+                msg.setCode("404");
+                msg.setMessage("未找到上传文件");
+                return msg;
+            }
+
+            long size = file.getSize();
+            if(0 == size)
+            {
+                msg.setCode("404");
+                msg.setMessage("上传文件大小为空");
+                return msg;
+            }
+
+            if(!FileOptUtils.isDirExists(filePath)){
+                msg.setCode("500");
+                msg.setMessage("发生错误或不为目录");
+                return msg;
+            }
+
+            filesave = filePath + operator + "_" + sdf.format(new Date()) +".xlsx";
+
+            file.transferTo(new File(filesave));
+            InputStream in = new FileInputStream(filesave);
+            String name = file.getOriginalFilename();
+            Boolean isExcel2007 = name.substring(name.lastIndexOf(".") + 1).endsWith("xlsx")? true:false;
+            BooleanReason blret = excelExportService.importUserCodeExcel(in,operator,isExcel2007);
+            if(blret.getValue().equals(false))
+            {
+                msg.setCode("500");
+                msg.setMessage(blret.getResultmsg());
+                return msg;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            msg.setCode("500");
+            msg.setMessage("导入发生错误");
+            return msg;
+        }
+
+        return msg;
+    }
+
+
+    @PostMapping("/putuser")
+    @ApiOperation(value = "修改用户数据",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id",value = "用户id",required = true),
+            @ApiImplicitParam(name = "username",value = "用户名",required = true),
+            @ApiImplicitParam(name = "password",value = "密码"),
+            @ApiImplicitParam(name = "type",value = "用户类型",required = true),
+            @ApiImplicitParam(name = "email",value = "邮箱"),
+            @ApiImplicitParam(name = "phone",value = "办公电话"),
+            @ApiImplicitParam(name = "mobile",value = "手机号"),
+            @ApiImplicitParam(name = "company",value = "单位"),
+            @ApiImplicitParam(name = "department",value = "部门"),
+            @ApiImplicitParam(name = "job",value = "职务"),
+            @ApiImplicitParam(name = "lastmodifiedby",value = "更新人"),
+            @ApiImplicitParam(name = "province",value = "省份"),
+            @ApiImplicitParam(name = "city",value = "城市"),
+            @ApiImplicitParam(name = "area",value = "区县"),
+            @ApiImplicitParam(name = "town",value = "乡镇"),
+            @ApiImplicitParam(name = "community",value = "社区"),
+    })
+    public Msg putUserInfo(@RequestBody JSONObject jsonObject){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        Long id = jsonObject.getLong("id");
+        String username = jsonObject.getString("username");
+        List<UserInfo> userList = userService.selectUserInfo(id,username);
+        if (userList.size() > 0){
+            msg.setCode("500");
+            msg.setMessage("用户名重复");
+            return msg;
+        }
+        UserInfo userInfo = new UserInfo();
+        userInfo.setId(jsonObject.getLong("id"));
+        userInfo.setUsername(jsonObject.getString("username"));
+        String password = jsonObject.getString("password");
+        String PW_PATTERN = "(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[~!@#$%^&*_.]).{8,}";
+        if (StringUtils.isNotBlank(password)&& !password.matches(PW_PATTERN)){
+            msg.setCode("500");
+            msg.setMessage("密码必须8位以上,并且包含大小写字母、数字、特殊符号三种以上");
+            return msg;
+        }else if(StringUtils.isNotBlank(password)){
+            userInfo.setPassword(Base64Encrypt.encode(password.getBytes()));
+        }
+        String mobile = jsonObject.getString("mobile");
+        if (StringUtils.isNotBlank(mobile) && mobile.length() == 11){
+            userInfo.setMobile(mobile);
+        }else if (StringUtils.isNotBlank(mobile)){
+            msg.setCode("500");
+            msg.setMessage("手机号必须为11位数");
+            return msg;
+        }
+        try {
+            userInfo.setType(jsonObject.getInteger("type"));
+        }catch (Exception e) {
+            msg.setCode("500");
+            msg.setMessage("用户类型必须为数字");
+            return msg;
+        }
+        userInfo.setEmail(jsonObject.getString("email"));
+        userInfo.setPhone(jsonObject.getString("phone"));
+        userInfo.setCompany(jsonObject.getString("company"));
+        userInfo.setDepartment(jsonObject.getString("department"));
+        userInfo.setJob(jsonObject.getString("job"));
+        userInfo.setCreatedby(jsonObject.getString("lastmodifiedby"));
+        userInfo.setCreateddate(new Date());
+        userInfo.setLastmodifiedby(jsonObject.getString("lastmodifiedby"));
+        userInfo.setLastmodifieddate(new Date());
+        userInfo.setProvince(jsonObject.getString("province"));
+        userInfo.setCity(jsonObject.getString("city"));
+        userInfo.setArea(jsonObject.getString("area"));
+        userInfo.setTown(jsonObject.getString("town"));
+        userInfo.setCommunity(jsonObject.getString("community"));
+        userInfo.setCode(jsonObject.getString("code"));
+        userService.updateById(userInfo);
+        // 如果修改为新疆企业 会重置 截止日期
+        String province = jsonObject.getString("province");
+        // 不修改原代码 无论怎样 是新疆 就重置
+        UserInfo company = userService.getById(userInfo.getId());
+        if (company.getCompanyid() != null) {
+            userService.updateDeadline2NullByComapnyId(company.getCompanyid());
+        }
+        return msg;
+
+    }
+
+
+    @PostMapping("/jiangWai/deadline/set")
+    public Msg updateJinagWaiDeadline(@RequestBody JiangWaiDeadlineReqDTO reqDTO) {
+        userService.updateDeadline(reqDTO,getUser());
+        return success();
+    }
+
+
+    @PostMapping("/userroles")
+    @ApiOperation(value = "修改用户角色",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id",value = "用户id",required = true),
+            @ApiImplicitParam(name = "roles",value = "用户名",required = true),
+
+    })
+    public Msg updateUserRole(@RequestBody JSONObject jsonObject){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        Long userid = jsonObject.getLong("id");
+        String roles = jsonObject.getString("roles");
+        if (StringUtils.isNotBlank(roles)){
+            userRolesInfoService.deleteByUserId(userid);
+            roles = roles.replace("[","").replace("]","");
+            List<String> list = StringUtils.toList(roles);
+            for (String role : list){
+                UserRolesInfo userRolesInfo = new UserRolesInfo();
+                userRolesInfo.setUserid(userid);
+                userRolesInfo.setRoleid(Long.parseLong(role.trim()));
+                userRolesInfoService.save(userRolesInfo);
+            }
+        }
+        return msg;
+
+    }
+
+    @PostMapping("/deluser")
+    @ApiOperation(value = "删除用户数据", notes = "删除用户数据", response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType="query",name = "id",value = "id",required = true),
+            @ApiImplicitParam(paramType="body",name = "lastmodifiedby",value = "更新人"),
+
+    })
+    public Msg delUserInfo(@ApiParam(value = "id,lastmodifiedby")
+                             @RequestBody JSONObject jsonObject){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        UserInfo userInfo = new UserInfo();
+        userInfo.setId(jsonObject.getLong("id"));
+        userInfo.setLastmodifiedby(jsonObject.getString("lastmodifiedby"));
+        userInfo.setLastmodifieddate(new Date());
+        userInfo.setIsdel((byte)1);
+        userService.updateById(userInfo);
+        return msg;
+    }
+
+    @PostMapping("/importDistrict")
+    @ApiOperation(value = "导入省市数据",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "file",value = "文件",required = true),
+            @ApiImplicitParam(name = "operator",value = "操作人",required = true),
+    })
+    @ResponseBody
+    public Msg importDistrict(String operator,MultipartFile file){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        String filesave ="";
+        try {
+            SimpleDateFormat sdf = new SimpleDateFormat( "yyyyMMddHHmmssSSS" );
+            if (file == null)
+            {
+                msg.setCode("404");
+                msg.setMessage("未找到上传文件");
+                return msg;
+            }
+
+            long size = file.getSize();
+            if(0 == size)
+            {
+                msg.setCode("404");
+                msg.setMessage("上传文件大小为空");
+                return msg;
+            }
+
+            if(!FileOptUtils.isDirExists(filePath)){
+                msg.setCode("500");
+                msg.setMessage("发生错误或不为目录");
+                return msg;
+            }
+
+            filesave = filePath + operator + "_" + sdf.format(new Date()) +".xlsx";
+
+            file.transferTo(new File(filesave));
+            InputStream in = new FileInputStream(filesave);
+            String name = file.getOriginalFilename();
+            Boolean isExcel2007 = name.substring(name.lastIndexOf(".") + 1).endsWith("xlsx")? true:false;
+            BooleanReason blret = excelExportService.importDistrictExcel(in,operator,isExcel2007);
+            if(blret.getValue().equals(false))
+            {
+                msg.setCode("500");
+                msg.setMessage(blret.getResultmsg());
+                return msg;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            msg.setCode("500");
+            msg.setMessage("导入发生错误");
+            return msg;
+        }
+
+        return msg;
+    }
+
+    @GetMapping("/district")
+    @ApiOperation(value = "获取省市区数据",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "type",value = "类型"),
+            @ApiImplicitParam(name = "parentname",value = "上级名称"),
+            @ApiImplicitParam(name = "parenttype",value = "上级类型"),
+    })
+    public Msg getdistrictInfo(String type,String parentname,String parenttype){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        List<DistrictInfo> districtInfoList = new ArrayList<> ();
+        if (parenttype.equals("0")){
+            districtInfoList = districtService.selectDistrictInfo(type, parenttype);
+        }else {
+            districtInfoList = districtService.selectDistrictByName(type,parentname,parenttype);
+        }
+        msg.setResult(districtInfoList);
+        return msg;
+    }
+
+    @GetMapping("/districtByName")
+    @ApiOperation(value = "获取省市区数据",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "province",value = "省份"),
+            @ApiImplicitParam(name = "city",value = "城市"),
+            @ApiImplicitParam(name = "area",value = "区县"),
+            @ApiImplicitParam(name = "town",value = "街道"),
+            @ApiImplicitParam(name = "community",value = "社区"),
+    })
+    public Msg getDistrictByName(String province,String city,String area,String town,String community){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        if (StringUtils.isBlank(province)){
+            List<DistrictInfo> provinceList = districtService.selectDistrictInfo("1", "0");
+            Map<String,Object> map = new HashMap<> ();
+            map.put("provinceList",provinceList);
+            msg.setResult(map);
+        }else if (StringUtils.isBlank(city)){
+            List<DistrictInfo> provinceList = districtService.selectDistrictInfo("1", "0");
+            DistrictInfo provinceInfo = districtService.selectInfoByName(province,(byte)1);
+            List<DistrictInfo> cityList = districtService.selectDistrictInfo("2", provinceInfo.getCode());
+            Map<String,Object> map = new HashMap<> ();
+            map.put("provinceList",provinceList);
+            map.put("cityList",cityList);
+            msg.setResult(map);
+        }else if (StringUtils.isBlank(area)){
+            List<DistrictInfo> provinceList = districtService.selectDistrictInfo("1", "0");
+            DistrictInfo provinceInfo = districtService.selectInfoByName(province,(byte)1);
+            List<DistrictInfo> cityList = districtService.selectDistrictInfo("2", provinceInfo.getCode());
+            DistrictInfo cityInfo = districtService.selectInfoByName(city,(byte)2);
+            List<DistrictInfo> areaList = districtService.selectDistrictInfo("3", cityInfo.getCode());
+            Map<String,Object> map = new HashMap<> ();
+            map.put("provinceList",provinceList);
+            map.put("cityList",cityList);
+            map.put("areaList",areaList);
+            msg.setResult(map);
+        }else if (StringUtils.isBlank(town)){
+            List<DistrictInfo> provinceList = districtService.selectDistrictInfo("1", "0");
+            DistrictInfo provinceInfo = districtService.selectInfoByName(province,(byte)1);
+            List<DistrictInfo> cityList = districtService.selectDistrictInfo("2", provinceInfo.getCode());
+            DistrictInfo cityInfo = districtService.selectInfoByName(city,(byte)2);
+            List<DistrictInfo> areaList = districtService.selectDistrictInfo("3", cityInfo.getCode());
+            DistrictInfo areaInfo = districtService.selectInfoByName(area,(byte)3);
+            List<DistrictInfo> townList = districtService.selectDistrictInfo("4", areaInfo.getCode());
+
+            Map<String,Object> map = new HashMap<> ();
+            map.put("provinceList",provinceList);
+            map.put("cityList",cityList);
+            map.put("areaList",areaList);
+            map.put("townList",townList);
+            msg.setResult(map);
+        }else{
+            List<DistrictInfo> provinceList = districtService.selectDistrictInfo("1", "0");
+            DistrictInfo provinceInfo = districtService.selectInfoByName(province,(byte)1);
+            List<DistrictInfo> cityList = districtService.selectDistrictInfo("2", provinceInfo.getCode());
+            DistrictInfo cityInfo = districtService.selectInfoByName(city,(byte)2);
+            List<DistrictInfo> areaList = districtService.selectDistrictInfo("3", cityInfo.getCode());
+            DistrictInfo areaInfo = districtService.selectInfoByName(area,(byte)3);
+            List<DistrictInfo> townList = districtService.selectDistrictInfo("4", areaInfo.getCode());
+            DistrictInfo townInfo = districtService.selectInfoByName(town,(byte)4);
+            List<DistrictInfo> communityList = districtService.selectDistrictInfo("5", townInfo.getCode());
+
+            Map<String,Object> map = new HashMap<> ();
+            map.put("provinceList",provinceList);
+            map.put("cityList",cityList);
+            map.put("areaList",areaList);
+            map.put("townList",townList);
+            map.put("communityList",communityList);
+            msg.setResult(map);
+        }
+        return msg;
+    }
+
+    @GetMapping("/enterpriseUser")
+    @ApiOperation(value = "获取企业用户数据",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码"),
+            @ApiImplicitParam(name = "pageSize",value = "每页行数"),
+            @ApiImplicitParam(name = "sort",value = "排序规则"),
+            @ApiImplicitParam(name = "order",value = "排序字段"),
+            @ApiImplicitParam(name = "username",value = "用户名"),
+            @ApiImplicitParam(name = "company",value = "单位"),
+            @ApiImplicitParam(name = "department",value = "部门"),
+            @ApiImplicitParam(name = "job",value = "职务"),
+            @ApiImplicitParam(name = "type",value = "用户类型"),
+            @ApiImplicitParam(name = "province",value = "省份"),
+            @ApiImplicitParam(name = "city",value = "城市"),
+            @ApiImplicitParam(name = "area",value = "区县"),
+            @ApiImplicitParam(name = "town",value = "乡镇"),
+            @ApiImplicitParam(name = "community",value = "社区"),
+    })
+    public Msg getEnterpriseUserInfo(@RequestParam(defaultValue = "0") Integer pageIndex, @RequestParam(defaultValue = "10") Integer pageSize, String sort,String order,
+                           String username,String company, String department, String job,Byte type, String province, String city, String area, String town, String community){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        HashMap<String, Object> condition = new HashMap<String, Object>();
+
+        if (StringUtils.isNotBlank(username)) {
+            condition.put("username", username.trim());
+        }
+
+        if (StringUtils.isNotBlank(company)) {
+            condition.put("company", company.trim());
+        }
+
+        if (StringUtils.isNotBlank(department)) {
+            condition.put("department", department.trim());
+        }
+
+        if (StringUtils.isNotBlank(job)){
+            condition.put("job",job.trim());
+
+        }
+        if (type != null){
+            condition.put("type",type);
+        }
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (userInfo.getCompanyid() != null){
+            condition.put("companyid", userInfo.getCompanyid());
+        }else if (userInfo.getType() == 3){
+            condition.put("province",userInfo.getProvince());
+            condition.put("city",userInfo.getCity());
+            condition.put("area",userInfo.getArea());
+            condition.put("town",userInfo.getTown());
+            condition.put("community",userInfo.getCommunity());
+        }
+
+        if (StringUtils.isNotBlank(province) && condition.get("province") == null) {
+            condition.put("province", province.trim());
+            if (StringUtils.isNotBlank(city)) {
+                condition.put("city", city.trim());
+            }
+
+            if (StringUtils.isNotBlank(area)) {
+                condition.put("area", area.trim());
+            }
+
+            if (StringUtils.isNotBlank(town)) {
+                condition.put("town", town.trim());
+            }
+
+            if (StringUtils.isNotBlank(community)) {
+                condition.put("community", community.trim());
+            }
+        }
+        condition.put("iscompany",(byte)1);
+        condition.put("issale",(byte)0);
+        pageInfo.setCondition(condition);
+        userService.selectUserDataGrid(pageInfo);
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    @GetMapping("/saleUser")
+    @ApiOperation(value = "获取终端机用户数据",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码"),
+            @ApiImplicitParam(name = "pageSize",value = "每页行数"),
+            @ApiImplicitParam(name = "sort",value = "排序规则"),
+            @ApiImplicitParam(name = "order",value = "排序字段"),
+            @ApiImplicitParam(name = "username",value = "用户名"),
+            @ApiImplicitParam(name = "company",value = "单位"),
+            @ApiImplicitParam(name = "department",value = "部门"),
+            @ApiImplicitParam(name = "job",value = "职务"),
+            @ApiImplicitParam(name = "type",value = "用户类型"),
+            @ApiImplicitParam(name = "province",value = "省份"),
+            @ApiImplicitParam(name = "city",value = "城市"),
+            @ApiImplicitParam(name = "area",value = "区县"),
+            @ApiImplicitParam(name = "town",value = "乡镇"),
+            @ApiImplicitParam(name = "community",value = "社区"),
+    })
+    public Msg getSaleUserInfo(@RequestParam(defaultValue = "0") Integer pageIndex, @RequestParam(defaultValue = "10") Integer pageSize, String sort,String order,
+                                     String username,String company, String department, String job,Byte type, String province, String city, String area, String town, String community,
+                               String safetySuperVision){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        HashMap<String, Object> condition = new HashMap<String, Object>();
+
+        if (StringUtils.isNotBlank(username)) {
+            condition.put("username", username.trim());
+        }
+
+        if (StringUtils.isNotBlank(company)) {
+            condition.put("company", company.trim());
+        }
+
+        if (StringUtils.isNotBlank(department)) {
+            condition.put("department", department.trim());
+        }
+
+        if (StringUtils.isNotBlank(job)){
+            condition.put("job",job.trim());
+
+        }
+        if (type != null){
+            condition.put("type",type);
+        }
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (userInfo.getCompanyid() != null){
+            condition.put("companyid", userInfo.getCompanyid());
+        }else if (userInfo.getType() == 3){
+            condition.put("province",userInfo.getProvince());
+            condition.put("city",userInfo.getCity());
+            condition.put("area",userInfo.getArea());
+            condition.put("town",userInfo.getTown());
+            condition.put("community",userInfo.getCommunity());
+        }
+
+        if (StringUtils.isNotBlank(province) && condition.get("province") == null) {
+            condition.put("province", province.trim());
+            if (StringUtils.isNotBlank(city)) {
+                condition.put("city", city.trim());
+            }
+
+            if (StringUtils.isNotBlank(area)) {
+                condition.put("area", area.trim());
+            }
+
+            if (StringUtils.isNotBlank(town)) {
+                condition.put("town", town.trim());
+            }
+
+            if (StringUtils.isNotBlank(community)) {
+                condition.put("community", community.trim());
+            }
+        }
+        condition.put("safetysupervision",safetySuperVision);
+        condition.put("iscompany",(byte)1);
+        condition.put("issale",(byte)1);
+        pageInfo.setCondition(condition);
+        userService.selectUserDataGrid(pageInfo);
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Controller/WarningController.java b/src/main/java/com/gk/firework/Controller/WarningController.java
new file mode 100644
index 0000000..df6f420
--- /dev/null
+++ b/src/main/java/com/gk/firework/Controller/WarningController.java
@@ -0,0 +1,577 @@
+package com.gk.firework.Controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.gk.firework.Controller.Base.BaseController;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.Utils.Msg;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Vo.NoEntryVo;
+import com.gk.firework.Domain.Vo.WarnContentVo;
+import com.gk.firework.Service.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+
+@Api(tags = "流向预警接口")
+@RestController
+public class WarningController extends BaseController {
+    @Autowired
+    WarningService warningService;
+    @Autowired
+    WarnContentService warnContentService;
+    @Autowired
+    UserService userService;
+    @Autowired
+    EnterpriseService enterpriseService;
+    @Autowired
+    SaleOrderDetailService saleOrderDetailService;
+    @Autowired
+    StockService stockService;
+
+    private final String WARN_TYPE_ENTRY = "超期未入库";
+    private final String WARN_TYPE_CERT = "运输证超期";
+
+    @GetMapping("/warning")
+    @ApiOperation(value = "获取报警阈值",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码"),
+            @ApiImplicitParam(name = "pageSize",value = "每页行数"),
+            @ApiImplicitParam(name = "sort",value = "排序规则"),
+            @ApiImplicitParam(name = "order",value = "排序字段"),
+            @ApiImplicitParam(name = "warntype",value = "警告类型"),
+            @ApiImplicitParam(name = "enterprisetype",value = "企业类型"),
+    })
+    public Msg getWarningList(@RequestParam(defaultValue = "0") Integer pageIndex, @RequestParam(defaultValue = "20") Integer pageSize, String sort, String order,
+                                String warntype, String enterprisetype){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        HashMap<String, Object> condition = new HashMap<String, Object>();
+
+        if (StringUtils.isNotBlank(warntype)) {
+            condition.put("warntype", warntype.trim());
+        }
+
+        if (StringUtils.isNotBlank(enterprisetype)) {
+            condition.put("enterprisetype", enterprisetype.trim());
+        }
+
+        pageInfo.setCondition(condition);
+        warningService.selectDataGrid(pageInfo);
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    @PostMapping("/warning")
+    @ApiOperation(value = "修改报警阈值",response = Msg.class)
+    public Msg editWarningInfo(@RequestBody WarningInfo warningInfo){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        if (warningInfo.getMinimum() == null){
+            msg.setCode("999");
+            msg.setMessage("预警值不能为空");
+            return msg;
+        }else if (warningInfo.getMaximum() == null){
+            msg.setCode("999");
+            msg.setMessage("报警值不能为空");
+            return msg;
+        }else if (warningInfo.getIssms() == null){
+            msg.setCode("999");
+            msg.setMessage("报警是否开启短信通知不能为空");
+            return msg;
+        }
+        if (warningInfo.getWarntype().equals("购买超量") && warningInfo.getPeriod() == null){
+            msg.setCode("999");
+            msg.setMessage("计算周期不能为空");
+            return msg;
+        }
+
+        warningInfo.setModifiedby(getUser().getUsername());
+        warningInfo.setModifieddate(new Date());
+        warningService.updateById(warningInfo);
+        return msg;
+    }
+
+    @GetMapping("/stockWarning")
+    @ApiOperation(value = "获取库存超量",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码"),
+            @ApiImplicitParam(name = "pageSize",value = "每页行数"),
+            @ApiImplicitParam(name = "sort",value = "排序规则"),
+            @ApiImplicitParam(name = "order",value = "排序字段"),
+            @ApiImplicitParam(name = "warnlevel",value = "警告级别"),
+            @ApiImplicitParam(name = "enterprisetype",value = "企业类型"),
+            @ApiImplicitParam(name = "enterprisename",value = "企业名称"),
+            @ApiImplicitParam(name = "starttime",value = "开始时间"),
+            @ApiImplicitParam(name = "endtime",value = "结束时间"),
+            @ApiImplicitParam(name = "province",value = "省份"),
+            @ApiImplicitParam(name = "city",value = "城市"),
+            @ApiImplicitParam(name = "area",value = "区县"),
+            @ApiImplicitParam(name = "town",value = "乡镇"),
+            @ApiImplicitParam(name = "community",value = "社区"),
+            @ApiImplicitParam(name = "ismend",value = "是否处理"),
+    })
+    public Msg getStockWarningList(@RequestParam(defaultValue = "0") Integer pageIndex, @RequestParam(defaultValue = "20") Integer pageSize, String sort, String order,
+                                String warnlevel, String enterprisetype, String enterprisename, String starttime, String endttime,
+                                   String province, String city, String area, String town, String community, Byte ismend){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        HashMap<String, Object> condition = new HashMap<String, Object>();
+
+        if (StringUtils.isNotBlank(warnlevel)) {
+            condition.put("warnlevel", warnlevel.trim());
+        }
+
+        if (StringUtils.isNotBlank(enterprisetype)) {
+            condition.put("enterprisetype", enterprisetype.trim());
+        }
+
+        if (StringUtils.isNotBlank(enterprisename)) {
+            condition.put("enterprisename", enterprisetype.trim());
+        }
+
+        if (StringUtils.isNotBlank(starttime)) {
+            condition.put("starttime", starttime.trim());
+        }
+
+        if (StringUtils.isNotBlank(endttime)) {
+            condition.put("endttime", endttime.trim());
+        }
+
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (userInfo.getCompanyid() != null){
+            Enterprise enterprise = enterpriseService.getById(userInfo.getCompanyid());
+            condition.put("enterprisename", enterprise.getEnterprisename());
+        }else if (userInfo.getType() == 3){
+            condition.put("province",userInfo.getProvince());
+            condition.put("city",userInfo.getCity());
+            condition.put("area",userInfo.getArea());
+            condition.put("town",userInfo.getTown());
+            condition.put("community",userInfo.getCommunity());
+        }
+
+        if (StringUtils.isNotBlank(province) && condition.get("province") == null) {
+            condition.put("province", province.trim());
+            if (StringUtils.isNotBlank(city)) {
+                condition.put("city", city.trim());
+            }
+
+            if (StringUtils.isNotBlank(area)) {
+                condition.put("area", area.trim());
+            }
+
+            if (StringUtils.isNotBlank(town)) {
+                condition.put("town", town.trim());
+            }
+
+            if (StringUtils.isNotBlank(community)){
+                condition.put("community", community.trim());
+            }
+        }
+        if (ismend != null){
+            condition.put("ismend",ismend);
+        }
+        condition.put("warntype", "库存超量");
+        pageInfo.setCondition(condition);
+        warnContentService.selectStockDataGrid(pageInfo);
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    @GetMapping("/purchaseWarning")
+    @ApiOperation(value = "获取购买超量",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码"),
+            @ApiImplicitParam(name = "pageSize",value = "每页行数"),
+            @ApiImplicitParam(name = "sort",value = "排序规则"),
+            @ApiImplicitParam(name = "order",value = "排序字段"),
+            @ApiImplicitParam(name = "starttime",value = "开始时间"),
+            @ApiImplicitParam(name = "endtime",value = "结束时间"),
+            @ApiImplicitParam(name = "warnlevel",value = "警告级别"),
+            @ApiImplicitParam(name = "customer",value = "购买人"),
+            @ApiImplicitParam(name = "idcard",value = "身份证"),
+            @ApiImplicitParam(name = "ismend",value = "是否处理"),
+    })
+    public Msg getPurchaseWarningList(@RequestParam(defaultValue = "0") Integer pageIndex, @RequestParam(defaultValue = "20") Integer pageSize, String sort, String order,
+                                   String warnlevel, String customer, String idcard, String starttime, String endtime, Byte ismend){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        HashMap<String, Object> condition = new HashMap<String, Object>();
+
+        if (StringUtils.isNotBlank(warnlevel)) {
+            condition.put("warnlevel", warnlevel.trim());
+        }
+
+        if (StringUtils.isNotBlank(customer)) {
+            condition.put("customer", customer.trim());
+        }
+
+        if (StringUtils.isNotBlank(idcard)) {
+            condition.put("idcard", idcard.trim());
+        }
+
+        if (StringUtils.isNotBlank(starttime)) {
+            condition.put("starttime", starttime.trim());
+        }
+
+        if (StringUtils.isNotBlank(endtime)) {
+            condition.put("endtime", endtime.trim());
+        }
+
+        if (ismend != null){
+            condition.put("ismend",ismend);
+        }
+        condition.put("warntype", "购买超量");
+        pageInfo.setCondition(condition);
+        warnContentService.selectPurchaseDataGrid(pageInfo);
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    @GetMapping("/purchaseDetail")
+    @ApiOperation(value = "获取购买明细",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "warnid",value = "警告id"),
+    })
+    public Msg getPurchaseDetailList(@RequestParam(defaultValue = "0") Integer pageIndex, @RequestParam(defaultValue = "10") Integer pageSize, String sort, String order,
+                                     Long warnid){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+
+        WarnContentInfo warningContentInfo = warnContentService.getById(warnid);
+        if (warningContentInfo != null && warningContentInfo.getCustomid() != null){
+            //分页 datagrid  content添加周期 开始结束时间
+            HashMap<String, Object> condition = new HashMap<String, Object>();
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            Date endtime = warningContentInfo.getCreateddate();
+            Integer period = warningContentInfo.getPeriod();
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(endtime);
+            calendar.add(Calendar.DATE,-period);
+            String starttime = sdf.format(calendar.getTime());
+            condition.put("starttime", starttime);
+            condition.put("endtime", sdf.format(warningContentInfo.getCreateddate()));
+            condition.put("customid", warningContentInfo.getCustomid());
+            pageInfo.setCondition(condition);
+            saleOrderDetailService.selectByCustomId(pageInfo);
+        }
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    @GetMapping("/alarmList")
+    @ApiOperation(value = "获取报警未处理的列表",response = Msg.class)
+    public Msg getAlarmList(){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        List<WarnContentVo> warningContentInfos = warnContentService.selectIsNotMend();
+        msg.setResult(warningContentInfos);
+        return msg;
+    }
+
+    @GetMapping("/warningList")
+    @ApiOperation(value = "获取报警预警列表",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码"),
+            @ApiImplicitParam(name = "pageSize",value = "每页行数"),
+            @ApiImplicitParam(name = "sort",value = "排序规则"),
+            @ApiImplicitParam(name = "order",value = "排序字段"),
+            @ApiImplicitParam(name = "warnlevel",value = "警告级别"),
+            @ApiImplicitParam(name = "enterprisetype",value = "企业类型"),
+            @ApiImplicitParam(name = "enterprisename",value = "企业名称"),
+            @ApiImplicitParam(name = "starttime",value = "开始时间"),
+            @ApiImplicitParam(name = "endtime",value = "结束时间"),
+            @ApiImplicitParam(name = "customer",value = "购买人"),
+            @ApiImplicitParam(name = "idcard",value = "身份证"),
+            @ApiImplicitParam(name = "ismend",value = "是否处理"),
+    })
+    public Msg getWarningList(@RequestParam(defaultValue = "0") Integer pageIndex, @RequestParam(defaultValue = "20") Integer pageSize, String sort, String order,
+                              String warnlevel, String enterprisetype, String enterprisename, String starttime, String endttime, Byte ismend, String customer, String idcard
+    ){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        HashMap<String, Object> condition = new HashMap<String, Object>();
+
+        if (StringUtils.isNotBlank(warnlevel)) {
+            condition.put("warnlevel", warnlevel.trim());
+        }
+
+        if (StringUtils.isNotBlank(enterprisetype)) {
+            condition.put("enterprisetype", enterprisetype.trim());
+        }
+
+        if (StringUtils.isNotBlank(enterprisename)) {
+            condition.put("enterprisename", enterprisetype.trim());
+        }
+
+        if (StringUtils.isNotBlank(starttime)) {
+            condition.put("starttime", starttime.trim());
+        }
+
+        if (StringUtils.isNotBlank(endttime)) {
+            condition.put("endttime", endttime.trim());
+        }
+
+        if (ismend != null){
+            condition.put("ismend",ismend);
+        }
+
+        if (StringUtils.isNotBlank(customer)) {
+            condition.put("customer", customer.trim());
+        }
+
+        if (StringUtils.isNotBlank(idcard)) {
+            condition.put("idcard", idcard.trim());
+        }
+
+        pageInfo.setCondition(condition);
+        warnContentService.selectWarningDataGrid(pageInfo);
+        return msg;
+    }
+
+    @PostMapping("/mendAlarm")
+    @ApiOperation(value = "处理报警信息",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id",value = "报警id"),
+    })
+    public Msg mendAlarm(@RequestBody JSONObject jsonObject){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        Long id = jsonObject.getLong("id");
+        WarnContentInfo warningContentInfo = warnContentService.getById(id);
+        if (warningContentInfo != null){
+            warningContentInfo.setIsmend((byte)1);
+            warnContentService.updateById(warningContentInfo);
+        }
+        return msg;
+    }
+
+    @GetMapping("/entryWarning")
+    @ApiOperation(value = "获取超期未入库",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码"),
+            @ApiImplicitParam(name = "pageSize",value = "每页行数"),
+            @ApiImplicitParam(name = "sort",value = "排序规则"),
+            @ApiImplicitParam(name = "order",value = "排序字段"),
+            @ApiImplicitParam(name = "warnlevel",value = "警告级别"),
+            @ApiImplicitParam(name = "enterprisetype",value = "企业类型"),
+            @ApiImplicitParam(name = "enterprisename",value = "企业名称"),
+            @ApiImplicitParam(name = "starttime",value = "开始时间"),
+            @ApiImplicitParam(name = "endtime",value = "结束时间"),
+            @ApiImplicitParam(name = "province",value = "省份"),
+            @ApiImplicitParam(name = "city",value = "城市"),
+            @ApiImplicitParam(name = "area",value = "区县"),
+            @ApiImplicitParam(name = "town",value = "乡镇"),
+            @ApiImplicitParam(name = "community",value = "社区"),
+            @ApiImplicitParam(name = "ismend",value = "是否处理"),
+    })
+    public Msg getEntryWarningList(@RequestParam(defaultValue = "0") Integer pageIndex, @RequestParam(defaultValue = "20") Integer pageSize, String sort, String order,
+                                   String warnlevel, String enterprisetype, String enterprisename, String starttime, String endttime,
+                                   String province, String city, String area, String town, String community, Byte ismend){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        HashMap<String, Object> condition = new HashMap<String, Object>();
+
+        if (StringUtils.isNotBlank(warnlevel)) {
+            condition.put("warnlevel", warnlevel.trim());
+        }
+        if (StringUtils.isNotBlank(enterprisetype)) {
+            condition.put("enterprisetype", enterprisetype.trim());
+        }
+        if (StringUtils.isNotBlank(enterprisename)) {
+            condition.put("enterprisename", enterprisetype.trim());
+        }
+        if (StringUtils.isNotBlank(starttime)) {
+            condition.put("starttime", starttime.trim());
+        }
+        if (StringUtils.isNotBlank(endttime)) {
+            condition.put("endttime", endttime.trim());
+        }
+
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (userInfo.getCompanyid() != null){
+            Enterprise enterprise = enterpriseService.getById(userInfo.getCompanyid());
+            condition.put("enterprisename", enterprise.getEnterprisename());
+        }else if (userInfo.getType() == 3){
+            condition.put("province",userInfo.getProvince());
+            condition.put("city",userInfo.getCity());
+            condition.put("area",userInfo.getArea());
+            condition.put("town",userInfo.getTown());
+            condition.put("community",userInfo.getCommunity());
+        }
+
+        if (StringUtils.isNotBlank(province) && condition.get("province") == null) {
+            condition.put("province", province.trim());
+            if (StringUtils.isNotBlank(city)) {
+                condition.put("city", city.trim());
+            }
+            if (StringUtils.isNotBlank(area)) {
+                condition.put("area", area.trim());
+            }
+            if (StringUtils.isNotBlank(town)) {
+                condition.put("town", town.trim());
+            }
+            if (StringUtils.isNotBlank(community)){
+                condition.put("community", community.trim());
+            }
+        }
+        if (ismend != null){
+            condition.put("ismend",ismend);
+        }
+        condition.put("warntype", WARN_TYPE_ENTRY);
+        pageInfo.setCondition(condition);
+        warnContentService.selectStockDataGrid(pageInfo);
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    @GetMapping("/entryDetail")
+    @ApiOperation(value = "获取超期未入库明细",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "warnid",value = "警告id"),
+    })
+    public Msg getEntryDetailList(@RequestParam(defaultValue = "0") Integer pageIndex, @RequestParam(defaultValue = "10") Integer pageSize, String sort, String order,
+                                     Long warnid){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+
+        WarnContentInfo warningContentInfo = warnContentService.getById(warnid);
+        if (warningContentInfo != null){
+            //分页 datagrid  content添加周期 开始结束时间
+            HashMap<String, Object> condition = new HashMap<String, Object>();
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            Date endtime = warningContentInfo.getCreateddate();
+            Integer period = warningContentInfo.getPeriod();
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(endtime);
+            calendar.add(Calendar.DATE,-period);
+            String starttime = sdf.format(calendar.getTime());
+            condition.put("enterpriseid",warningContentInfo.getEnterpriseid());
+            condition.put("starttime", starttime);
+            pageInfo.setCondition(condition);
+            stockService.selectNoEntryDetail(pageInfo);
+        }
+        msg.setResult(pageInfo);
+        return msg;
+    }
+
+    @GetMapping("/certWarning")
+    @ApiOperation(value = "获取运输证超期",response = Msg.class)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageIndex",value = "当前页码"),
+            @ApiImplicitParam(name = "pageSize",value = "每页行数"),
+            @ApiImplicitParam(name = "sort",value = "排序规则"),
+            @ApiImplicitParam(name = "order",value = "排序字段"),
+            @ApiImplicitParam(name = "warnlevel",value = "警告级别"),
+            @ApiImplicitParam(name = "enterprisetype",value = "企业类型"),
+            @ApiImplicitParam(name = "enterprisename",value = "企业名称"),
+            @ApiImplicitParam(name = "starttime",value = "开始时间"),
+            @ApiImplicitParam(name = "endtime",value = "结束时间"),
+            @ApiImplicitParam(name = "province",value = "省份"),
+            @ApiImplicitParam(name = "city",value = "城市"),
+            @ApiImplicitParam(name = "area",value = "区县"),
+            @ApiImplicitParam(name = "town",value = "乡镇"),
+            @ApiImplicitParam(name = "community",value = "社区"),
+            @ApiImplicitParam(name = "ismend",value = "是否处理"),
+    })
+    public Msg getCertWarningList(@RequestParam(defaultValue = "0") Integer pageIndex, @RequestParam(defaultValue = "20") Integer pageSize, String sort, String order,
+                                   String warnlevel, String enterprisetype, String enterprisename, String starttime, String endttime,
+                                   String province, String city, String area, String town, String community, Byte ismend){
+        Msg msg = new Msg();
+        msg.setCode("200");
+        msg.setMessage("success");
+
+        PageInfo pageInfo = new PageInfo(pageIndex, pageSize,sort,order);
+        HashMap<String, Object> condition = new HashMap<String, Object>();
+
+        if (StringUtils.isNotBlank(warnlevel)) {
+            condition.put("warnlevel", warnlevel.trim());
+        }
+
+        if (StringUtils.isNotBlank(enterprisetype)) {
+            condition.put("enterprisetype", enterprisetype.trim());
+        }
+
+        if (StringUtils.isNotBlank(enterprisename)) {
+            condition.put("enterprisename", enterprisetype.trim());
+        }
+
+        if (StringUtils.isNotBlank(starttime)) {
+            condition.put("starttime", starttime.trim());
+        }
+
+        if (StringUtils.isNotBlank(endttime)) {
+            condition.put("endttime", endttime.trim());
+        }
+
+        UserInfo userInfo = userService.getById(getUser().getId());
+        if (userInfo.getCompanyid() != null){
+            Enterprise enterprise = enterpriseService.getById(userInfo.getCompanyid());
+            condition.put("enterprisename", enterprise.getEnterprisename());
+        }else if (userInfo.getType() == 3){
+            condition.put("province",userInfo.getProvince());
+            condition.put("city",userInfo.getCity());
+            condition.put("area",userInfo.getArea());
+            condition.put("town",userInfo.getTown());
+            condition.put("community",userInfo.getCommunity());
+        }
+
+        if (StringUtils.isNotBlank(province) && condition.get("province") == null) {
+            condition.put("province", province.trim());
+            if (StringUtils.isNotBlank(city)) {
+                condition.put("city", city.trim());
+            }
+
+            if (StringUtils.isNotBlank(area)) {
+                condition.put("area", area.trim());
+            }
+
+            if (StringUtils.isNotBlank(town)) {
+                condition.put("town", town.trim());
+            }
+
+            if (StringUtils.isNotBlank(community)){
+                condition.put("community", community.trim());
+            }
+        }
+        if (ismend != null){
+            condition.put("ismend",ismend);
+        }
+        condition.put("warntype", WARN_TYPE_CERT);
+        pageInfo.setCondition(condition);
+        warnContentService.selectStockDataGrid(pageInfo);
+        msg.setResult(pageInfo);
+        return msg;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/AccessAssessApply.java b/src/main/java/com/gk/firework/Domain/AccessAssessApply.java
new file mode 100644
index 0000000..e2a2df4
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/AccessAssessApply.java
@@ -0,0 +1,336 @@
+package com.gk.firework.Domain;
+
+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 com.gk.firework.Domain.Enum.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@TableName("assessapply")
+public class AccessAssessApply implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id  id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 类型(2准入评定)  type **/
+    private AssessType type;
+
+    /** 单子编号  code **/
+    private String code;
+
+    /** 单子状态(待提交,待审批,审批通过,驳回)  status **/
+    private AssessApplyStatus status;
+
+    /** 提出人名称  requestor **/
+    private String requestor;
+
+    private Long requestorid;
+
+    /** 单子提交时间  submittime **/
+    private Date submittime;
+
+    /** 审批人名称  approver **/
+    private String approver;
+
+    /** 审批时间  approvetime **/
+    private Date approvetime;
+
+    /** 审批备注  approvenote **/
+    private String approvenote;
+
+    /** 企业名  enterprisename **/
+    private String enterprisename;
+
+    /** 企业单位编号  enterprisenumber **/
+    private String enterprisenumber;
+
+    private PunishStatus punishstatus;
+
+    /** 上传材料  path1 **/
+    private String path1;
+
+    /** 申诉材料  path2 **/
+    private String path2;
+
+    /** 处罚原因  punishmentreason **/
+    private String punishmentreason;
+
+    /** 处罚措施(吊销或者停用一段时间)  punishmentmeasure **/
+    private AssessPunishment punishmentmeasure;
+
+    /** 创建时间  createtime **/
+    private Date createtime;
+
+    /** 修改时间  modifytime **/
+    private Date modifytime;
+
+    /** 最后一次驳回的时间  lastrejecttime **/
+    private Date lastrejecttime;
+
+    private String lastrejectreason;
+
+    private Date deadline;
+
+    private String appealcontent;
+
+    private Date appealtime;
+
+    private AssessAppealStatus appealstatus;
+
+    private String appealrejectreason;
+
+    private String appealapprover;
+
+    private Date appealapprovetime;
+
+    @TableField(exist = false)
+    private MultipartFile file;
+
+    private boolean validflag;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public AssessType getType() {
+        return type;
+    }
+
+    public void setType(AssessType type) {
+        this.type = type;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public AssessApplyStatus getStatus() {
+        return status;
+    }
+
+    public void setStatus(AssessApplyStatus status) {
+        this.status = status;
+    }
+
+    public String getRequestor() {
+        return requestor;
+    }
+
+    public void setRequestor(String requestor) {
+        this.requestor = requestor;
+    }
+
+    public Long getRequestorid() {
+        return requestorid;
+    }
+
+    public void setRequestorid(Long requestorid) {
+        this.requestorid = requestorid;
+    }
+
+    public Date getSubmittime() {
+        return submittime;
+    }
+
+    public void setSubmittime(Date submittime) {
+        this.submittime = submittime;
+    }
+
+    public String getApprover() {
+        return approver;
+    }
+
+    public void setApprover(String approver) {
+        this.approver = approver;
+    }
+
+    public Date getApprovetime() {
+        return approvetime;
+    }
+
+    public void setApprovetime(Date approvetime) {
+        this.approvetime = approvetime;
+    }
+
+    public String getApprovenote() {
+        return approvenote;
+    }
+
+    public void setApprovenote(String approvenote) {
+        this.approvenote = approvenote;
+    }
+
+    public String getEnterprisename() {
+        return enterprisename;
+    }
+
+    public void setEnterprisename(String enterprisename) {
+        this.enterprisename = enterprisename;
+    }
+
+    public String getEnterprisenumber() {
+        return enterprisenumber;
+    }
+
+    public void setEnterprisenumber(String enterprisenumber) {
+        this.enterprisenumber = enterprisenumber;
+    }
+
+    public PunishStatus getPunishstatus() {
+        return punishstatus;
+    }
+
+    public void setPunishstatus(PunishStatus punishstatus) {
+        this.punishstatus = punishstatus;
+    }
+
+    public String getPath1() {
+        return path1;
+    }
+
+    public void setPath1(String path1) {
+        this.path1 = path1;
+    }
+
+    public String getPath2() {
+        return path2;
+    }
+
+    public void setPath2(String path2) {
+        this.path2 = path2;
+    }
+
+    public String getPunishmentreason() {
+        return punishmentreason;
+    }
+
+    public void setPunishmentreason(String punishmentreason) {
+        this.punishmentreason = punishmentreason;
+    }
+
+    public AssessPunishment getPunishmentmeasure() {
+        return punishmentmeasure;
+    }
+
+    public void setPunishmentmeasure(AssessPunishment punishmentmeasure) {
+        this.punishmentmeasure = punishmentmeasure;
+    }
+
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    public Date getModifytime() {
+        return modifytime;
+    }
+
+    public void setModifytime(Date modifytime) {
+        this.modifytime = modifytime;
+    }
+
+    public Date getLastrejecttime() {
+        return lastrejecttime;
+    }
+
+    public void setLastrejecttime(Date lastrejecttime) {
+        this.lastrejecttime = lastrejecttime;
+    }
+
+    public String getLastrejectreason() {
+        return lastrejectreason;
+    }
+
+    public void setLastrejectreason(String lastrejectreason) {
+        this.lastrejectreason = lastrejectreason;
+    }
+
+    public Date getDeadline() {
+        return deadline;
+    }
+
+    public void setDeadline(Date deadline) {
+        this.deadline = deadline;
+    }
+
+    public String getAppealcontent() {
+        return appealcontent;
+    }
+
+    public void setAppealcontent(String appealcontent) {
+        this.appealcontent = appealcontent;
+    }
+
+    public Date getAppealtime() {
+        return appealtime;
+    }
+
+    public void setAppealtime(Date appealtime) {
+        this.appealtime = appealtime;
+    }
+
+    public AssessAppealStatus getAppealstatus() {
+        return appealstatus;
+    }
+
+    public void setAppealstatus(AssessAppealStatus appealstatus) {
+        this.appealstatus = appealstatus;
+    }
+
+    public MultipartFile getFile() {
+        return file;
+    }
+
+    public void setFile(MultipartFile file) {
+        this.file = file;
+    }
+
+    public boolean isValidflag() {
+        return validflag;
+    }
+
+    public void setValidflag(boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    public String getAppealrejectreason() {
+        return appealrejectreason;
+    }
+
+    public void setAppealrejectreason(String appealrejectreason) {
+        this.appealrejectreason = appealrejectreason;
+    }
+
+    public String getAppealapprover() {
+        return appealapprover;
+    }
+
+    public void setAppealapprover(String appealapprover) {
+        this.appealapprover = appealapprover;
+    }
+
+    public Date getAppealapprovetime() {
+        return appealapprovetime;
+    }
+
+    public void setAppealapprovetime(Date appealapprovetime) {
+        this.appealapprovetime = appealapprovetime;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/AppFileInfo.java b/src/main/java/com/gk/firework/Domain/AppFileInfo.java
new file mode 100644
index 0000000..9cf920b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/AppFileInfo.java
@@ -0,0 +1,119 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.util.Date;
+
+@TableName("appfile")
+public class AppFileInfo implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 文件类型  filetype 仓储、监管**/
+    private String filetype;
+
+    /** 文件名称  filename **/
+    private String filename;
+
+    /** 文件链接  fileurl **/
+    private String fileurl;
+
+    /** 版本号  version **/
+    private Integer version;
+
+    /** 备注  remark **/
+    private String remark;
+
+    /** 创建时间  created **/
+    private Date created;
+
+    /** 更新时间  updated **/
+    private Date updated;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   文件类型  filetype   **/
+    public String getFiletype() {
+        return filetype;
+    }
+
+    /**   文件类型  filetype   **/
+    public void setFiletype(String filetype) {
+        this.filetype = filetype == null ? null : filetype.trim();
+    }
+
+    /**   文件名称  filename   **/
+    public String getFilename() {
+        return filename;
+    }
+
+    /**   文件名称  filename   **/
+    public void setFilename(String filename) {
+        this.filename = filename == null ? null : filename.trim();
+    }
+
+    /**   文件链接  fileurl   **/
+    public String getFileurl() {
+        return fileurl;
+    }
+
+    /**   文件链接  fileurl   **/
+    public void setFileurl(String fileurl) {
+        this.fileurl = fileurl == null ? null : fileurl.trim();
+    }
+
+    /**   版本号  version   **/
+    public Integer getVersion() {
+        return version;
+    }
+
+    /**   版本号  version   **/
+    public void setVersion(Integer version) {
+        this.version = version;
+    }
+
+    /**   备注  remark   **/
+    public String getRemark() {
+        return remark;
+    }
+
+    /**   备注  remark   **/
+    public void setRemark(String remark) {
+        this.remark = remark == null ? null : remark.trim();
+    }
+
+    /**   创建时间  created   **/
+    public Date getCreated() {
+        return created;
+    }
+
+    /**   创建时间  created   **/
+    public void setCreated(Date created) {
+        this.created = created;
+    }
+
+    /**   更新时间  updated   **/
+    public Date getUpdated() {
+        return updated;
+    }
+
+    /**   更新时间  updated   **/
+    public void setUpdated(Date updated) {
+        this.updated = updated;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/AssessApply.java b/src/main/java/com/gk/firework/Domain/AssessApply.java
new file mode 100644
index 0000000..06a1098
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/AssessApply.java
@@ -0,0 +1,287 @@
+package com.gk.firework.Domain;
+
+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 com.gk.firework.Domain.Enum.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@TableName("assessapply")
+public class AssessApply implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id  id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 类型(1销售评定,2准入评定)  type **/
+    private AssessType type;
+
+    /** 单子编号  code **/
+    private String code;
+
+    /** 单子状态(待提交,待审批,审批通过,驳回)  status **/
+    private AssessApplyStatus status;
+
+    /** 提出人名称  requestor **/
+    private String requestor;
+
+    private Long requestorid;
+
+    /** 单子提交时间  submittime **/
+    private Date submittime;
+
+    /** 审批人名称  approver **/
+    private String approver;
+
+    /** 审批时间  approvetime **/
+    private Date approvetime;
+
+    /** 审批备注  approvenote **/
+    private String approvenote;
+
+    /** 企业名  enterprisename **/
+    private String enterprisename;
+
+    /** 企业单位编号  enterprisenumber **/
+    private String enterprisenumber;
+
+    private PunishStatus punishstatus;
+
+    /** 上传材料  path1 **/
+    private String path1;
+
+    /** 处罚原因  punishmentreason **/
+    private String punishmentreason;
+
+    /** 处罚措施(吊销或者停用一段时间)  punishmentmeasure **/
+    private AssessPunishment punishmentmeasure;
+
+    /** 创建时间  createtime **/
+    private Date createtime;
+
+    /** 修改时间  modifytime **/
+    private Date modifytime;
+
+    /** 最后一次驳回的时间  lastrejecttime **/
+    private Date lastrejecttime;
+
+    private String lastrejectreason;
+
+
+    @TableField(exist = false)
+    private MultipartFile file;
+
+    private boolean validflag;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public AssessType getType() {
+        return type;
+    }
+
+    public void setType(AssessType type) {
+        this.type = type;
+    }
+
+    /**   单子编号  code   **/
+    public String getCode() {
+        return code;
+    }
+
+    /**   单子编号  code   **/
+    public void setCode(String code) {
+        this.code = code == null ? null : code.trim();
+    }
+
+    public AssessApplyStatus getStatus() {
+        return status;
+    }
+
+    public void setStatus(AssessApplyStatus status) {
+        this.status = status;
+    }
+
+    /**   提出人名称  requestor   **/
+    public String getRequestor() {
+        return requestor;
+    }
+
+    /**   提出人名称  requestor   **/
+    public void setRequestor(String requestor) {
+        this.requestor = requestor == null ? null : requestor.trim();
+    }
+
+    /**   单子提交时间  submittime   **/
+    public Date getSubmittime() {
+        return submittime;
+    }
+
+    /**   单子提交时间  submittime   **/
+    public void setSubmittime(Date submittime) {
+        this.submittime = submittime;
+    }
+
+    /**   审批人名称  approver   **/
+    public String getApprover() {
+        return approver;
+    }
+
+    /**   审批人名称  approver   **/
+    public void setApprover(String approver) {
+        this.approver = approver == null ? null : approver.trim();
+    }
+
+    /**   审批时间  approvetime   **/
+    public Date getApprovetime() {
+        return approvetime;
+    }
+
+    /**   审批时间  approvetime   **/
+    public void setApprovetime(Date approvetime) {
+        this.approvetime = approvetime;
+    }
+
+    /**   审批备注  approvenote   **/
+    public String getApprovenote() {
+        return approvenote;
+    }
+
+    /**   审批备注  approvenote   **/
+    public void setApprovenote(String approvenote) {
+        this.approvenote = approvenote == null ? null : approvenote.trim();
+    }
+
+    /**   企业名  enterprisename   **/
+    public String getEnterprisename() {
+        return enterprisename;
+    }
+
+    /**   企业名  enterprisename   **/
+    public void setEnterprisename(String enterprisename) {
+        this.enterprisename = enterprisename == null ? null : enterprisename.trim();
+    }
+
+    /**   企业单位编号  enterprisenumber   **/
+    public String getEnterprisenumber() {
+        return enterprisenumber;
+    }
+
+    /**   企业单位编号  enterprisenumber   **/
+    public void setEnterprisenumber(String enterprisenumber) {
+        this.enterprisenumber = enterprisenumber == null ? null : enterprisenumber.trim();
+    }
+
+
+    public PunishStatus getPunishstatus() {
+        return punishstatus;
+    }
+
+    public void setPunishstatus(PunishStatus punishstatus) {
+        this.punishstatus = punishstatus;
+    }
+
+    /**   上传材料  path1   **/
+    public String getPath1() {
+        return path1;
+    }
+
+    /**   上传材料  path1   **/
+    public void setPath1(String path1) {
+        this.path1 = path1 == null ? null : path1.trim();
+    }
+
+    /**   处罚原因  punishmentreason   **/
+    public String getPunishmentreason() {
+        return punishmentreason;
+    }
+
+    /**   处罚原因  punishmentreason   **/
+    public void setPunishmentreason(String punishmentreason) {
+        this.punishmentreason = punishmentreason == null ? null : punishmentreason.trim();
+    }
+
+    public AssessPunishment getPunishmentmeasure() {
+        return punishmentmeasure;
+    }
+
+    public void setPunishmentmeasure(AssessPunishment punishmentmeasure) {
+        this.punishmentmeasure = punishmentmeasure;
+    }
+
+    /**   创建时间  createtime   **/
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    /**   创建时间  createtime   **/
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    /**   修改时间  modifytime   **/
+    public Date getModifytime() {
+        return modifytime;
+    }
+
+    /**   修改时间  modifytime   **/
+    public void setModifytime(Date modifytime) {
+        this.modifytime = modifytime;
+    }
+
+    /**   最后一次驳回的时间  lastrejecttime   **/
+    public Date getLastrejecttime() {
+        return lastrejecttime;
+    }
+
+    /**   最后一次驳回的时间  lastrejecttime   **/
+    public void setLastrejecttime(Date lastrejecttime) {
+        this.lastrejecttime = lastrejecttime;
+    }
+
+    public MultipartFile getFile() {
+        return file;
+    }
+
+    public void setFile(MultipartFile file) {
+        this.file = file;
+    }
+
+    public boolean isValidflag() {
+        return validflag;
+    }
+
+    public void setValidflag(boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    public Long getRequestorid() {
+        return requestorid;
+    }
+
+    public void setRequestorid(Long requestorid) {
+        this.requestorid = requestorid;
+    }
+
+    public String getLastrejectreason() {
+        return lastrejectreason;
+    }
+
+    public void setLastrejectreason(String lastrejectreason) {
+        this.lastrejectreason = lastrejectreason;
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Domain/AuthorizationInfo.java b/src/main/java/com/gk/firework/Domain/AuthorizationInfo.java
new file mode 100644
index 0000000..509733f
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/AuthorizationInfo.java
@@ -0,0 +1,144 @@
+package com.gk.firework.Domain;
+
+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 java.util.Date;
+
+@TableName("authorization")
+public class AuthorizationInfo {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 企业编号  enterprisenumber **/
+    private String enterprisenumber;
+
+    /** 授权码  authcode **/
+    private String authcode;
+
+    /** 授权码前三位(唯一确定一家企业)  authcodeprefix **/
+    private String authcodeprefix;
+
+    /** 合同编号  contractcode **/
+    private String contractcode;
+
+    /** 创建时间  createdat **/
+    private Date createdat;
+
+    /** 创建人  createdby **/
+    private String createdby;
+
+    /** 标记  flag 0标配  1无身份证阅读器  2无扫码枪 3全无**/
+    private Byte flag;
+
+    /** 最后使用时间  lasttime **/
+    private Date lasttime;
+
+    /** 是否使用(0.未启用;1.已启用)  status **/
+    private Byte status;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   企业编号  enterprisenumber   **/
+    public String getEnterprisenumber() {
+        return enterprisenumber;
+    }
+
+    /**   企业编号  enterprisenumber   **/
+    public void setEnterprisenumber(String enterprisenumber) {
+        this.enterprisenumber = enterprisenumber == null ? null : enterprisenumber.trim();
+    }
+
+    /**   授权码  authcode   **/
+    public String getAuthcode() {
+        return authcode;
+    }
+
+    /**   授权码  authcode   **/
+    public void setAuthcode(String authcode) {
+        this.authcode = authcode == null ? null : authcode.trim();
+    }
+
+    /**   授权码前三位(唯一确定一家企业)  authcodeprefix   **/
+    public String getAuthcodeprefix() {
+        return authcodeprefix;
+    }
+
+    /**   授权码前三位(唯一确定一家企业)  authcodeprefix   **/
+    public void setAuthcodeprefix(String authcodeprefix) {
+        this.authcodeprefix = authcodeprefix == null ? null : authcodeprefix.trim();
+    }
+
+    /**   合同编号  contractcode   **/
+    public String getContractcode() {
+        return contractcode;
+    }
+
+    /**   合同编号  contractcode   **/
+    public void setContractcode(String contractcode) {
+        this.contractcode = contractcode == null ? null : contractcode.trim();
+    }
+
+    /**   创建时间  createdat   **/
+    public Date getCreatedat() {
+        return createdat;
+    }
+
+    /**   创建时间  createdat   **/
+    public void setCreatedat(Date createdat) {
+        this.createdat = createdat;
+    }
+
+    /**   创建人  createdby   **/
+    public String getCreatedby() {
+        return createdby;
+    }
+
+    /**   创建人  createdby   **/
+    public void setCreatedby(String createdby) {
+        this.createdby = createdby == null ? null : createdby.trim();
+    }
+
+    /**   标记  flag   **/
+    public Byte getFlag() {
+        return flag;
+    }
+
+    /**   标记  flag   **/
+    public void setFlag(Byte flag) {
+        this.flag = flag;
+    }
+
+    /**   最后使用时间  lasttime   **/
+    public Date getLasttime() {
+        return lasttime;
+    }
+
+    /**   最后使用时间  lasttime   **/
+    public void setLasttime(Date lasttime) {
+        this.lasttime = lasttime;
+    }
+
+    /**   是否使用(0.未启用;1.已启用)  status   **/
+    public Byte getStatus() {
+        return status;
+    }
+
+    /**   是否使用(0.未启用;1.已启用)  status   **/
+    public void setStatus(Byte status) {
+        this.status = status;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/BO/DirectionProductBO.java b/src/main/java/com/gk/firework/Domain/BO/DirectionProductBO.java
new file mode 100644
index 0000000..abb7244
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/BO/DirectionProductBO.java
@@ -0,0 +1,39 @@
+package com.gk.firework.Domain.BO;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+public class DirectionProductBO implements Serializable {
+
+    // 22|19 位码
+    private String directionCode;
+    // 产品10位码
+    private String itemCode;
+    // 分表后缀
+    private String slice;
+
+    public String getDirectionCode() {
+        return directionCode;
+    }
+
+    public void setDirectionCode(String directionCode) {
+        this.directionCode = directionCode;
+    }
+
+    public String getItemCode() {
+        return itemCode;
+    }
+
+    public void setItemCode(String itemCode) {
+        this.itemCode = itemCode;
+    }
+
+    public String getSlice() {
+        return slice;
+    }
+
+    public void setSlice(String slice) {
+        this.slice = slice;
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Domain/BO/ProductLocusInfoBO.java b/src/main/java/com/gk/firework/Domain/BO/ProductLocusInfoBO.java
new file mode 100644
index 0000000..b4ac373
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/BO/ProductLocusInfoBO.java
@@ -0,0 +1,16 @@
+package com.gk.firework.Domain.BO;
+
+import com.gk.firework.Domain.ProductLocusInfo;
+
+public class ProductLocusInfoBO extends ProductLocusInfo {
+
+    private String slice;
+
+    public String getSlice() {
+        return slice;
+    }
+
+    public void setSlice(String slice) {
+        this.slice = slice;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/BO/SaleOrderDetailInfoBO.java b/src/main/java/com/gk/firework/Domain/BO/SaleOrderDetailInfoBO.java
new file mode 100644
index 0000000..da6e3b9
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/BO/SaleOrderDetailInfoBO.java
@@ -0,0 +1,30 @@
+package com.gk.firework.Domain.BO;
+
+import com.gk.firework.Domain.DO.ProductDO;
+import com.gk.firework.Domain.SaleOrderDetailInfo;
+import com.gk.firework.Domain.SaleOrderInfo;
+import com.gk.firework.Domain.StockInfo;
+import org.apache.commons.math3.stat.descriptive.summary.Product;
+
+public class SaleOrderDetailInfoBO extends SaleOrderDetailInfo {
+
+    private ProductDO productDO;
+
+    private StockInfo stockInfo;
+
+    public ProductDO getProductDO() {
+        return productDO;
+    }
+
+    public void setProductDO(ProductDO productDO) {
+        this.productDO = productDO;
+    }
+
+    public StockInfo getStockInfo() {
+        return stockInfo;
+    }
+
+    public void setStockInfo(StockInfo stockInfo) {
+        this.stockInfo = stockInfo;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/BlackList.java b/src/main/java/com/gk/firework/Domain/BlackList.java
new file mode 100644
index 0000000..de5b154
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/BlackList.java
@@ -0,0 +1,130 @@
+package com.gk.firework.Domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@TableName("blacklist")
+public class BlackList implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id  id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 企业编号  enterprisenumber **/
+    private String enterprisenumber;
+
+    /** 企业名称  enterprisename **/
+    private String enterprisename;
+
+    /** 创建时间  createtime **/
+    private Date createtime;
+
+    /** 创建人姓名  createby **/
+    private String createby;
+
+    /** 创建人id createbyid **/
+    private Long createbyid;
+
+    /** 更新时间  modifytime **/
+    private Date modifytime;
+
+    /** 更信人  modifyby **/
+    private String modifyby;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   企业编号  enterprisenumber   **/
+    public String getEnterprisenumber() {
+        return enterprisenumber;
+    }
+
+    /**   企业编号  enterprisenumber   **/
+    public void setEnterprisenumber(String enterprisenumber) {
+        this.enterprisenumber = enterprisenumber == null ? null : enterprisenumber.trim();
+    }
+
+    /**   企业名称  enterprisename   **/
+    public String getEnterprisename() {
+        return enterprisename;
+    }
+
+    /**   企业名称  enterprisename   **/
+    public void setEnterprisename(String enterprisename) {
+        this.enterprisename = enterprisename == null ? null : enterprisename.trim();
+    }
+
+    /**   创建时间  createtime   **/
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    /**   创建时间  createtime   **/
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    /**   创建人姓名  createby   **/
+    public String getCreateby() {
+        return createby;
+    }
+
+    /**   创建人姓名  createby   **/
+    public void setCreateby(String createby) {
+        this.createby = createby == null ? null : createby.trim();
+    }
+
+    /**   更新时间  modifytime   **/
+    public Date getModifytime() {
+        return modifytime;
+    }
+
+    /**   更新时间  modifytime   **/
+    public void setModifytime(Date modifytime) {
+        this.modifytime = modifytime;
+    }
+
+    /**   更信人  modifyby   **/
+    public String getModifyby() {
+        return modifyby;
+    }
+
+    /**   更信人  modifyby   **/
+    public void setModifyby(String modifyby) {
+        this.modifyby = modifyby == null ? null : modifyby.trim();
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    public Long getCreatebyid() {
+        return createbyid;
+    }
+
+    public void setCreatebyid(Long createbyid) {
+        this.createbyid = createbyid;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/ContractDetailInfo.java b/src/main/java/com/gk/firework/Domain/ContractDetailInfo.java
new file mode 100644
index 0000000..9226403
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/ContractDetailInfo.java
@@ -0,0 +1,102 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.math.BigDecimal;
+
+@TableName("contractdetail")
+public class ContractDetailInfo implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 合同单号  ordercode **/
+    private String ordercode;
+
+    /** 流向码(十位)  directioncode **/
+    private String directioncode;
+
+    /** 产品名(限制长度255)  name **/
+    private String name;
+
+    /** 订货数量  num **/
+    private Integer num;
+
+    /** 单箱进货价  price **/
+    private BigDecimal price;
+
+    private Integer changenum;
+
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   合同单号  ordercode   **/
+    public String getOrdercode() {
+        return ordercode;
+    }
+
+    /**   合同单号  ordercode   **/
+    public void setOrdercode(String ordercode) {
+        this.ordercode = ordercode == null ? null : ordercode.trim();
+    }
+
+    /**   流向码(十位)  directioncode   **/
+    public String getDirectioncode() {
+        return directioncode;
+    }
+
+    /**   流向码(十位)  directioncode   **/
+    public void setDirectioncode(String directioncode) {
+        this.directioncode = directioncode == null ? null : directioncode.trim();
+    }
+
+    /**   产品名(限制长度255)  name   **/
+    public String getName() {
+        return name;
+    }
+
+    /**   产品名(限制长度255)  name   **/
+    public void setName(String name) {
+        this.name = name == null ? null : name.trim();
+    }
+
+    /**   订货数量  num   **/
+    public Integer getNum() {
+        return num;
+    }
+
+    /**   订货数量  num   **/
+    public void setNum(Integer num) {
+        this.num = num;
+    }
+
+    public BigDecimal getPrice() {
+        return price;
+    }
+
+    public void setPrice(BigDecimal price) {
+        this.price = price;
+    }
+
+    public Integer getChangenum() {
+        return changenum;
+    }
+
+    public void setChangenum(Integer changenum) {
+        this.changenum = changenum;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/ContractFile.java b/src/main/java/com/gk/firework/Domain/ContractFile.java
new file mode 100644
index 0000000..fbff14b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/ContractFile.java
@@ -0,0 +1,160 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.util.Date;
+
+@TableName("contractfile")
+public class ContractFile implements Serializable {
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id  id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 合同单号  ordercode **/
+    private String ordercode;
+
+    /** 文件名  filename **/
+    private String filename;
+
+    /** 地址  url **/
+    private String url;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /** 创建时间  createtime **/
+    private Date createtime;
+
+    /** 创建人id  createby **/
+    private Long createby;
+
+    /** 创建人name  createbyname **/
+    private String createbyname;
+
+    /** 更新时间  updatetime **/
+    private Date updatetime;
+
+    /** 更新人id  updateby **/
+    private Long updateby;
+
+    /** 更新人name  updatebyname **/
+    private String updatebyname;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   合同单号  ordercode   **/
+    public String getOrdercode() {
+        return ordercode;
+    }
+
+    /**   合同单号  ordercode   **/
+    public void setOrdercode(String ordercode) {
+        this.ordercode = ordercode == null ? null : ordercode.trim();
+    }
+
+    /**   文件名  filename   **/
+    public String getFilename() {
+        return filename;
+    }
+
+    /**   文件名  filename   **/
+    public void setFilename(String filename) {
+        this.filename = filename == null ? null : filename.trim();
+    }
+
+    /**   地址  url   **/
+    public String getUrl() {
+        return url;
+    }
+
+    /**   地址  url   **/
+    public void setUrl(String url) {
+        this.url = url == null ? null : url.trim();
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    /**   创建时间  createtime   **/
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    /**   创建时间  createtime   **/
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    /**   创建人id  createby   **/
+    public Long getCreateby() {
+        return createby;
+    }
+
+    /**   创建人id  createby   **/
+    public void setCreateby(Long createby) {
+        this.createby = createby;
+    }
+
+    /**   创建人name  createbyname   **/
+    public String getCreatebyname() {
+        return createbyname;
+    }
+
+    /**   创建人name  createbyname   **/
+    public void setCreatebyname(String createbyname) {
+        this.createbyname = createbyname == null ? null : createbyname.trim();
+    }
+
+    /**   更新时间  updatetime   **/
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    /**   更新时间  updatetime   **/
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    /**   更新人id  updateby   **/
+    public Long getUpdateby() {
+        return updateby;
+    }
+
+    /**   更新人id  updateby   **/
+    public void setUpdateby(Long updateby) {
+        this.updateby = updateby;
+    }
+
+    /**   更新人name  updatebyname   **/
+    public String getUpdatebyname() {
+        return updatebyname;
+    }
+
+    /**   更新人name  updatebyname   **/
+    public void setUpdatebyname(String updatebyname) {
+        this.updatebyname = updatebyname == null ? null : updatebyname.trim();
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/ContractLogInfo.java b/src/main/java/com/gk/firework/Domain/ContractLogInfo.java
new file mode 100644
index 0000000..6b4a74c
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/ContractLogInfo.java
@@ -0,0 +1,80 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.util.Date;
+
+@TableName("contractlog")
+public class ContractLogInfo implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 操作时间  operatordate **/
+    private Date operatordate;
+
+    /** 操作日志  optlog **/
+    private String optlog;
+
+    /** 操作人  operator **/
+    private String operator;
+
+    /** 合同单号  ordercode **/
+    private String ordercode;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   操作时间  operatordate   **/
+    public Date getOperatordate() {
+        return operatordate;
+    }
+
+    /**   操作时间  operatordate   **/
+    public void setOperatordate(Date operatordate) {
+        this.operatordate = operatordate;
+    }
+
+    /**   操作日志  optlog   **/
+    public String getOptlog() {
+        return optlog;
+    }
+
+    /**   操作日志  optlog   **/
+    public void setOptlog(String optlog) {
+        this.optlog = optlog == null ? null : optlog.trim();
+    }
+
+    /**   操作人  operator   **/
+    public String getOperator() {
+        return operator;
+    }
+
+    /**   操作人  operator   **/
+    public void setOperator(String operator) {
+        this.operator = operator == null ? null : operator.trim();
+    }
+
+    /**   合同单号  ordercode   **/
+    public String getOrdercode() {
+        return ordercode;
+    }
+
+    /**   合同单号  ordercode   **/
+    public void setOrdercode(String ordercode) {
+        this.ordercode = ordercode == null ? null : ordercode.trim();
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/ContractOrderInfo.java b/src/main/java/com/gk/firework/Domain/ContractOrderInfo.java
new file mode 100644
index 0000000..50d4ab2
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/ContractOrderInfo.java
@@ -0,0 +1,696 @@
+package com.gk.firework.Domain;
+
+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 io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+@ApiModel("合同订单类")
+@TableName("contractorder")
+public class ContractOrderInfo implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("合同订单id")
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 合同单号  ordercode **/
+    @ApiModelProperty("合同单号")
+    private String ordercode;
+
+    /** 规律合同编号  regularcode **/
+    @ApiModelProperty("规律合同编号")
+    private String regularcode;
+
+    /** 合同状态(待提交、待审核、待确认、已驳回、确认生产、拒绝生产)  status **/
+    @ApiModelProperty("合同状态")
+    private String status;
+
+    @ApiModelProperty("标签退回状态")
+    // 未退回,有退回
+    private String returnstatus;
+
+    /** 甲方(经营企业)  operator **/
+    private String operator;
+
+    /** 乙方(生产企业)  manufacturer **/
+    private String manufacturer;
+
+    /** 初始合同  origincontract **/
+    private String origincontract;
+
+    /** 确认合同  confirmcontract **/
+    private String confirmcontract;
+
+    /** 创建人  createdby **/
+    private String createdby;
+
+    /** 创建时间  createddate **/
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createddate;
+
+    /** 更新人  modifiedby **/
+    private String modifiedby;
+
+    /** 生产条码时间  producedate **/
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date producedate;
+
+    /** 更新时间  modifieddate **/
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date modifieddate;
+
+    /** 是否删除  isdel  1删除 0未删**/
+    private Byte isdel;
+
+    /**审批意见**/
+    private String comments;
+
+    /**生产意见**/
+    private String opinion;
+    /**购买单位**/
+    //企业编号 甲方
+    private String purchaseenterprisenumber;
+    //单位名称
+    private String purchaseunitname;
+    //单位地址
+    private String purchaseunitaddress;
+    //法定代表人
+    private String purchaserepresentative;
+    //法定代表人联系电话
+    private String purchaserepresentativephone;
+    //法定代表人电子邮箱
+    private String purchaserepresentativeemail;
+    //开户银行
+    private String purchasebank;
+    //许可证编号
+    private String purchaselicensenumber;
+    //邮政编码
+    private String purchasezipcode;
+    //委托代理人
+    private String purchaseagent;
+    //委托代理人联系电话
+    private String purchaseagentphone;
+    //委托代理人电子邮箱
+    private String purchaseagentemail;
+    //账户
+    private String purchaseaccount;
+    /**供货单位**/
+
+    //企业编号 乙方
+    private String supplyenterprisenumber;
+    //单位名称
+    private String supplyunitname;
+    //单位地址
+    private String supplyunitaddress;
+    //法定代表人
+    private String supplyrepresentative;
+    //法定代表人联系电话
+    private String supplyrepresentativephone;
+    //法定代表人电子邮箱
+    private String supplyrepresentativeemail;
+    //开户银行
+    private String supplybank;
+    //许可证编号
+    private String supplylicensenumber;
+    //邮政编码
+    private String supplyzipcode;
+    //委托代理人
+    private String supplyagent;
+    //委托代理人联系电话
+    private String supplyagentphone;
+    //委托代理人电子邮箱
+    private String supplyagentemail;
+    //账户
+    private String supplyaccount;
+
+    //签订时间
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date signtime;
+    //签订地点
+    private String signlocation;
+    //合同内容
+    //合同内容:产品质量标准及要求
+    private String qualitystandard;
+    //合同内容:禁(限)用药物要求
+    private String prohibiteddrug;
+    //合同内容:产品包装标准及要求
+    private String packingstandard;
+    //合同内容:提(交)货时间和地点
+    private String timeandlocation;
+    //合同内容:运输方式及费用负担
+    private String transportandcost;
+    //合同内容:验收标准与方法
+    private String acceptstandard;
+    //合同内容:提出异议期限
+    private String objectdeadline;
+    //合同内容:结算方式与期限
+    private String settlemethod;
+    //合同内容:产品安全与质量责任
+    private String productsafetyandquality;
+    //合同内容:运输安全责任
+    private String transportsafety;
+    //合同内容:违约责任
+    private String breakcontract;
+    //合同内容:合同争议的解决方式:序号
+    private String contractdisputesfelid;
+    //合同内容:合同争议的解决方式:序号内容
+    private String contractdisputesfelidcontent;
+    //合同内容:其他约定事项
+    private String otheragreedmatters;
+    //合同有效期
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date validstarttime;
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date validendtime;
+
+    @TableField(exist = false)
+    private ContractFile  contractFile;
+
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   合同单号  ordercode   **/
+    public String getOrdercode() {
+        return ordercode;
+    }
+
+    /**   合同单号  ordercode   **/
+    public void setOrdercode(String ordercode) {
+        this.ordercode = ordercode == null ? null : ordercode.trim();
+    }
+
+    /**   合同状态(待提交、待审核、已通过、已拒绝)  status   **/
+    public String getStatus() {
+        return status;
+    }
+
+    /**   合同状态(待提交、待审核、已通过、已拒绝)  status   **/
+    public void setStatus(String status) {
+        this.status = status == null ? null : status.trim();
+    }
+
+    /**   甲方(经营企业)  operator   **/
+    public String getOperator() {
+        return operator;
+    }
+
+    /**   甲方(经营企业)  operator   **/
+    public void setOperator(String operator) {
+        this.operator = operator == null ? null : operator.trim();
+    }
+
+    /**   乙方(生产企业)  manufacturer   **/
+    public String getManufacturer() {
+        return manufacturer;
+    }
+
+    /**   乙方(生产企业)  manufacturer   **/
+    public void setManufacturer(String manufacturer) {
+        this.manufacturer = manufacturer == null ? null : manufacturer.trim();
+    }
+
+    /**   初始合同  origincontract   **/
+    public String getOrigincontract() {
+        return origincontract;
+    }
+
+    /**   初始合同  origincontract   **/
+    public void setOrigincontract(String origincontract) {
+        this.origincontract = origincontract == null ? null : origincontract.trim();
+    }
+
+    /**   确认合同  confirmcontract   **/
+    public String getConfirmcontract() {
+        return confirmcontract;
+    }
+
+    /**   确认合同  confirmcontract   **/
+    public void setConfirmcontract(String confirmcontract) {
+        this.confirmcontract = confirmcontract == null ? null : confirmcontract.trim();
+    }
+
+    /**   创建人  createdby   **/
+    public String getCreatedby() {
+        return createdby;
+    }
+
+    /**   创建人  createdby   **/
+    public void setCreatedby(String createdby) {
+        this.createdby = createdby == null ? null : createdby.trim();
+    }
+
+    /**   创建时间  createddate   **/
+    public Date getCreateddate() {
+        return createddate;
+    }
+
+    /**   创建时间  createddate   **/
+    public void setCreateddate(Date createddate) {
+        this.createddate = createddate;
+    }
+
+    /**   更新人  modifiedby   **/
+    public String getModifiedby() {
+        return modifiedby;
+    }
+
+    /**   更新人  modifiedby   **/
+    public void setModifiedby(String modifiedby) {
+        this.modifiedby = modifiedby == null ? null : modifiedby.trim();
+    }
+
+    /**   更新时间  modifieddate   **/
+    public Date getModifieddate() {
+        return modifieddate;
+    }
+
+    /**   更新时间  modifieddate   **/
+    public void setModifieddate(Date modifieddate) {
+        this.modifieddate = modifieddate;
+    }
+
+    public Byte getIsdel() {
+        return isdel;
+    }
+
+    public void setIsdel(Byte isdel) {
+        this.isdel = isdel;
+    }
+
+    public String getComments() {
+        return comments;
+    }
+
+    public void setComments(String comments) {
+        this.comments = comments;
+    }
+
+    public String getOpinion() {
+        return opinion;
+    }
+
+    public void setOpinion(String opinion) {
+        this.opinion = opinion;
+    }
+
+    public String getRegularcode() {
+        return regularcode;
+    }
+
+    public void setRegularcode(String regularcode) {
+        this.regularcode = regularcode;
+    }
+
+    public String getPurchaseunitname() {
+        return purchaseunitname;
+    }
+
+    public void setPurchaseunitname(String purchaseunitname) {
+        this.purchaseunitname = purchaseunitname;
+    }
+
+    public String getPurchaseunitaddress() {
+        return purchaseunitaddress;
+    }
+
+    public void setPurchaseunitaddress(String purchaseunitaddress) {
+        this.purchaseunitaddress = purchaseunitaddress;
+    }
+
+    public String getPurchaserepresentative() {
+        return purchaserepresentative;
+    }
+
+    public void setPurchaserepresentative(String purchaserepresentative) {
+        this.purchaserepresentative = purchaserepresentative;
+    }
+
+    public String getPurchaserepresentativephone() {
+        return purchaserepresentativephone;
+    }
+
+    public void setPurchaserepresentativephone(String purchaserepresentativephone) {
+        this.purchaserepresentativephone = purchaserepresentativephone;
+    }
+
+    public String getPurchasebank() {
+        return purchasebank;
+    }
+
+    public void setPurchasebank(String purchasebank) {
+        this.purchasebank = purchasebank;
+    }
+
+    public String getPurchaselicensenumber() {
+        return purchaselicensenumber;
+    }
+
+    public void setPurchaselicensenumber(String purchaselicensenumber) {
+        this.purchaselicensenumber = purchaselicensenumber;
+    }
+
+    public String getPurchasezipcode() {
+        return purchasezipcode;
+    }
+
+    public void setPurchasezipcode(String purchasezipcode) {
+        this.purchasezipcode = purchasezipcode;
+    }
+
+    public String getPurchaseagent() {
+        return purchaseagent;
+    }
+
+    public void setPurchaseagent(String purchaseagent) {
+        this.purchaseagent = purchaseagent;
+    }
+
+    public String getPurchaseagentphone() {
+        return purchaseagentphone;
+    }
+
+    public void setPurchaseagentphone(String purchaseagentphone) {
+        this.purchaseagentphone = purchaseagentphone;
+    }
+
+    public String getPurchaseagentemail() {
+        return purchaseagentemail;
+    }
+
+    public void setPurchaseagentemail(String purchaseagentemail) {
+        this.purchaseagentemail = purchaseagentemail;
+    }
+
+    public String getPurchaseaccount() {
+        return purchaseaccount;
+    }
+
+    public void setPurchaseaccount(String purchaseaccount) {
+        this.purchaseaccount = purchaseaccount;
+    }
+
+    public String getSupplyunitname() {
+        return supplyunitname;
+    }
+
+    public void setSupplyunitname(String supplyunitname) {
+        this.supplyunitname = supplyunitname;
+    }
+
+    public String getSupplyunitaddress() {
+        return supplyunitaddress;
+    }
+
+    public void setSupplyunitaddress(String supplyunitaddress) {
+        this.supplyunitaddress = supplyunitaddress;
+    }
+
+    public String getSupplyrepresentative() {
+        return supplyrepresentative;
+    }
+
+    public void setSupplyrepresentative(String supplyrepresentative) {
+        this.supplyrepresentative = supplyrepresentative;
+    }
+
+    public String getSupplyrepresentativephone() {
+        return supplyrepresentativephone;
+    }
+
+    public void setSupplyrepresentativephone(String supplyrepresentativephone) {
+        this.supplyrepresentativephone = supplyrepresentativephone;
+    }
+
+    public String getSupplybank() {
+        return supplybank;
+    }
+
+    public void setSupplybank(String supplybank) {
+        this.supplybank = supplybank;
+    }
+
+    public String getSupplylicensenumber() {
+        return supplylicensenumber;
+    }
+
+    public void setSupplylicensenumber(String supplylicensenumber) {
+        this.supplylicensenumber = supplylicensenumber;
+    }
+
+    public String getSupplyzipcode() {
+        return supplyzipcode;
+    }
+
+    public void setSupplyzipcode(String supplyzipcode) {
+        this.supplyzipcode = supplyzipcode;
+    }
+
+    public String getSupplyagent() {
+        return supplyagent;
+    }
+
+    public void setSupplyagent(String supplyagent) {
+        this.supplyagent = supplyagent;
+    }
+
+    public String getSupplyagentphone() {
+        return supplyagentphone;
+    }
+
+    public void setSupplyagentphone(String supplyagentphone) {
+        this.supplyagentphone = supplyagentphone;
+    }
+
+    public String getSupplyagentemail() {
+        return supplyagentemail;
+    }
+
+    public void setSupplyagentemail(String supplyagentemail) {
+        this.supplyagentemail = supplyagentemail;
+    }
+
+    public String getSupplyaccount() {
+        return supplyaccount;
+    }
+
+    public void setSupplyaccount(String supplyaccount) {
+        this.supplyaccount = supplyaccount;
+    }
+
+    public Date getSigntime() {
+        return signtime;
+    }
+
+    public void setSigntime(Date signtime) {
+        this.signtime = signtime;
+    }
+
+    public String getSignlocation() {
+        return signlocation;
+    }
+
+    public void setSignlocation(String signlocation) {
+        this.signlocation = signlocation;
+    }
+
+    public String getQualitystandard() {
+        return qualitystandard;
+    }
+
+    public void setQualitystandard(String qualitystandard) {
+        this.qualitystandard = qualitystandard;
+    }
+
+    public String getProhibiteddrug() {
+        return prohibiteddrug;
+    }
+
+    public void setProhibiteddrug(String prohibiteddrug) {
+        this.prohibiteddrug = prohibiteddrug;
+    }
+
+    public String getPackingstandard() {
+        return packingstandard;
+    }
+
+    public void setPackingstandard(String packingstandard) {
+        this.packingstandard = packingstandard;
+    }
+
+    public String getTimeandlocation() {
+        return timeandlocation;
+    }
+
+    public void setTimeandlocation(String timeandlocation) {
+        this.timeandlocation = timeandlocation;
+    }
+
+    public String getTransportandcost() {
+        return transportandcost;
+    }
+
+    public void setTransportandcost(String transportandcost) {
+        this.transportandcost = transportandcost;
+    }
+
+    public String getAcceptstandard() {
+        return acceptstandard;
+    }
+
+    public void setAcceptstandard(String acceptstandard) {
+        this.acceptstandard = acceptstandard;
+    }
+
+    public String getObjectdeadline() {
+        return objectdeadline;
+    }
+
+    public void setObjectdeadline(String objectdeadline) {
+        this.objectdeadline = objectdeadline;
+    }
+
+    public String getSettlemethod() {
+        return settlemethod;
+    }
+
+    public void setSettlemethod(String settlemethod) {
+        this.settlemethod = settlemethod;
+    }
+
+    public String getProductsafetyandquality() {
+        return productsafetyandquality;
+    }
+
+    public void setProductsafetyandquality(String productsafetyandquality) {
+        this.productsafetyandquality = productsafetyandquality;
+    }
+
+    public String getTransportsafety() {
+        return transportsafety;
+    }
+
+    public void setTransportsafety(String transportsafety) {
+        this.transportsafety = transportsafety;
+    }
+
+    public String getBreakcontract() {
+        return breakcontract;
+    }
+
+    public void setBreakcontract(String breakcontract) {
+        this.breakcontract = breakcontract;
+    }
+
+    public String getContractdisputesfelid() {
+        return contractdisputesfelid;
+    }
+
+    public void setContractdisputesfelid(String contractdisputesfelid) {
+        this.contractdisputesfelid = contractdisputesfelid;
+    }
+
+    public String getContractdisputesfelidcontent() {
+        return contractdisputesfelidcontent;
+    }
+
+    public void setContractdisputesfelidcontent(String contractdisputesfelidcontent) {
+        this.contractdisputesfelidcontent = contractdisputesfelidcontent;
+    }
+
+    public String getOtheragreedmatters() {
+        return otheragreedmatters;
+    }
+
+    public void setOtheragreedmatters(String otheragreedmatters) {
+        this.otheragreedmatters = otheragreedmatters;
+    }
+
+    public Date getValidstarttime() {
+        return validstarttime;
+    }
+
+    public void setValidstarttime(Date validstarttime) {
+        this.validstarttime = validstarttime;
+    }
+
+    public Date getValidendtime() {
+        return validendtime;
+    }
+
+    public void setValidendtime(Date validendtime) {
+        this.validendtime = validendtime;
+    }
+
+    public String getPurchaseenterprisenumber() {
+        return purchaseenterprisenumber;
+    }
+
+    public void setPurchaseenterprisenumber(String purchaseenterprisenumber) {
+        this.purchaseenterprisenumber = purchaseenterprisenumber;
+    }
+
+    public String getSupplyenterprisenumber() {
+        return supplyenterprisenumber;
+    }
+
+    public void setSupplyenterprisenumber(String supplyenterprisenumber) {
+        this.supplyenterprisenumber = supplyenterprisenumber;
+    }
+
+    public String getPurchaserepresentativeemail() {
+        return purchaserepresentativeemail;
+    }
+
+    public void setPurchaserepresentativeemail(String purchaserepresentativeemail) {
+        this.purchaserepresentativeemail = purchaserepresentativeemail;
+    }
+
+    public String getSupplyrepresentativeemail() {
+        return supplyrepresentativeemail;
+    }
+
+    public void setSupplyrepresentativeemail(String supplyrepresentativeemail) {
+        this.supplyrepresentativeemail = supplyrepresentativeemail;
+    }
+
+    public ContractFile getContractFile() {
+        return contractFile;
+    }
+
+    public void setContractFile(ContractFile contractFile) {
+        this.contractFile = contractFile;
+    }
+
+    public String getReturnstatus() {
+        return returnstatus;
+    }
+
+    public void setReturnstatus(String returnstatus) {
+        this.returnstatus = returnstatus;
+    }
+
+    public Date getProducedate() {
+        return producedate;
+    }
+
+    public void setProducedate(Date producedate) {
+        this.producedate = producedate;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/ContractUnitDetail.java b/src/main/java/com/gk/firework/Domain/ContractUnitDetail.java
new file mode 100644
index 0000000..b06b5c0
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/ContractUnitDetail.java
@@ -0,0 +1,294 @@
+package com.gk.firework.Domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@TableName("contractunitdetail")
+public class ContractUnitDetail implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id  id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 购买单位|供货单位(0|1)  type **/
+    private Integer type;
+
+    /** 单位:单位名称  unitname **/
+    private String unitname;
+
+    /** 单位:单位地址  unitaddress **/
+    private String unitaddress;
+
+    /** 单位:法定代表人  representative **/
+    private String representative;
+
+    /** 单位:法定代表人联系电话  representativephone **/
+    private String representativephone;
+
+    private String representativeemail;
+
+    /** 单位:开户银行  bank **/
+    private String bank;
+
+    /** 单位:许可证编号  licensenumber **/
+    private String licensenumber;
+
+    /** 单位:邮政编码  zipcode **/
+    private String zipcode;
+
+    /** 单位:委托代理人  agent **/
+    private String agent;
+
+    /** 单位:委托代理人联系电话  agentphone **/
+    private String agentphone;
+
+    /** 单位:委托代理人电子邮箱  agentemail **/
+    private String agentemail;
+
+    /** 单位:账户  account **/
+    private String account;
+
+    /** 创建人id  createby **/
+    private Long createby;
+
+    /** 创建人name  createbyname **/
+    private String createbyname;
+
+    /** 创建时间  createtime **/
+    private Date createtime;
+
+    /** 更信人id  updateby **/
+    private Long updateby;
+
+    /** 更新时间  updatetime **/
+    private Date updatetime;
+
+    /** 更新人name  updatebyname **/
+    private String updatebyname;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    private String enterprisenumber;
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   购买单位|供货单位(0|1)  type   **/
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    /**   单位:单位名称  unitname   **/
+    public String getUnitname() {
+        return unitname;
+    }
+
+    /**   单位:单位名称  unitname   **/
+    public void setUnitname(String unitname) {
+        this.unitname = unitname == null ? null : unitname.trim();
+    }
+
+    /**   单位:单位地址  unitaddress   **/
+    public String getUnitaddress() {
+        return unitaddress;
+    }
+
+    /**   单位:单位地址  unitaddress   **/
+    public void setUnitaddress(String unitaddress) {
+        this.unitaddress = unitaddress == null ? null : unitaddress.trim();
+    }
+
+    /**   单位:法定代表人  representative   **/
+    public String getRepresentative() {
+        return representative;
+    }
+
+    /**   单位:法定代表人  representative   **/
+    public void setRepresentative(String representative) {
+        this.representative = representative == null ? null : representative.trim();
+    }
+
+    /**   单位:法定代表人联系电话  representativephone   **/
+    public String getRepresentativephone() {
+        return representativephone;
+    }
+
+    /**   单位:法定代表人联系电话  representativephone   **/
+    public void setRepresentativephone(String representativephone) {
+        this.representativephone = representativephone == null ? null : representativephone.trim();
+    }
+
+    /**   单位:开户银行  bank   **/
+    public String getBank() {
+        return bank;
+    }
+
+    /**   单位:开户银行  bank   **/
+    public void setBank(String bank) {
+        this.bank = bank == null ? null : bank.trim();
+    }
+
+    /**   单位:许可证编号  licensenumber   **/
+    public String getLicensenumber() {
+        return licensenumber;
+    }
+
+    /**   单位:许可证编号  licensenumber   **/
+    public void setLicensenumber(String licensenumber) {
+        this.licensenumber = licensenumber == null ? null : licensenumber.trim();
+    }
+
+    /**   单位:邮政编码  zipcode   **/
+    public String getZipcode() {
+        return zipcode;
+    }
+
+    /**   单位:邮政编码  zipcode   **/
+    public void setZipcode(String zipcode) {
+        this.zipcode = zipcode == null ? null : zipcode.trim();
+    }
+
+    /**   单位:委托代理人  agent   **/
+    public String getAgent() {
+        return agent;
+    }
+
+    /**   单位:委托代理人  agent   **/
+    public void setAgent(String agent) {
+        this.agent = agent == null ? null : agent.trim();
+    }
+
+    /**   单位:委托代理人联系电话  agentphone   **/
+    public String getAgentphone() {
+        return agentphone;
+    }
+
+    /**   单位:委托代理人联系电话  agentphone   **/
+    public void setAgentphone(String agentphone) {
+        this.agentphone = agentphone == null ? null : agentphone.trim();
+    }
+
+    /**   单位:委托代理人电子邮箱  agentemail   **/
+    public String getAgentemail() {
+        return agentemail;
+    }
+
+    /**   单位:委托代理人电子邮箱  agentemail   **/
+    public void setAgentemail(String agentemail) {
+        this.agentemail = agentemail == null ? null : agentemail.trim();
+    }
+
+    /**   单位:账户  account   **/
+    public String getAccount() {
+        return account;
+    }
+
+    /**   单位:账户  account   **/
+    public void setAccount(String account) {
+        this.account = account == null ? null : account.trim();
+    }
+
+    /**   创建人id  createby   **/
+    public Long getCreateby() {
+        return createby;
+    }
+
+    /**   创建人id  createby   **/
+    public void setCreateby(Long createby) {
+        this.createby = createby;
+    }
+
+    /**   创建人name  createbyname   **/
+    public String getCreatebyname() {
+        return createbyname;
+    }
+
+    /**   创建人name  createbyname   **/
+    public void setCreatebyname(String createbyname) {
+        this.createbyname = createbyname == null ? null : createbyname.trim();
+    }
+
+    /**   创建时间  createtime   **/
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    /**   创建时间  createtime   **/
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    /**   更信人id  updateby   **/
+    public Long getUpdateby() {
+        return updateby;
+    }
+
+    /**   更信人id  updateby   **/
+    public void setUpdateby(Long updateby) {
+        this.updateby = updateby;
+    }
+
+    /**   更新时间  updatetime   **/
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    /**   更新时间  updatetime   **/
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    /**   更新人name  updatebyname   **/
+    public String getUpdatebyname() {
+        return updatebyname;
+    }
+
+    /**   更新人name  updatebyname   **/
+    public void setUpdatebyname(String updatebyname) {
+        this.updatebyname = updatebyname == null ? null : updatebyname.trim();
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+
+    public String getRepresentativeemail() {
+        return representativeemail;
+    }
+
+    public void setRepresentativeemail(String representativeemail) {
+        this.representativeemail = representativeemail;
+    }
+
+    public String getEnterprisenumber() {
+        return enterprisenumber;
+    }
+
+    public void setEnterprisenumber(String enterprisenumber) {
+        this.enterprisenumber = enterprisenumber;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/ControlPrintParam.java b/src/main/java/com/gk/firework/Domain/ControlPrintParam.java
new file mode 100644
index 0000000..0d1ddf8
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/ControlPrintParam.java
@@ -0,0 +1,424 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+
+@TableName(value = "controlprintparam",resultMap = "BaseResultMap")
+public class ControlPrintParam implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+    /**   id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 归属设置  owner **/
+    private String owner;
+
+    /** 类型(1.内包装打印;2.外包装打印)  type **/
+    private Byte type;
+
+    /** 左标签X轴基准值  leftbasex **/
+    @TableField(value = "leftbasex")
+    private Integer leftBaseX;
+
+    /** 右标签X轴基准值  rightbasex **/
+    @TableField(value = "rightbasex")
+    private Integer rightBaseX;
+
+    /** 左标签二维码X轴值  leftqrx **/
+    @TableField(value = "leftqrx")
+    private Integer leftQrX;
+
+    /** 右标签二维码X轴值  rightqrx **/
+    @TableField(value = "rightqrx")
+    private Integer rightQrX;
+
+    /** 左标签边框基准值  leftframex **/
+    @TableField(value = "leftframex")
+    private Integer leftFrameX;
+
+    /** 右标签边框基准值  rightframex **/
+    @TableField(value = "rightframex")
+    private Integer rightFrameX;
+
+    /** 标签边框Y轴基准值  framey **/
+    @TableField(value = "framey")
+    private Integer frameY;
+
+    /** 标签边框宽度  framewidth **/
+    @TableField(value = "framewidth")
+    private Integer frameWidth;
+
+    /** 标签边框高度  frameheight **/
+    @TableField(value = "frameheight")
+    private Integer frameHeight;
+
+    /** 标题与基准X值的偏移量  titlexoffset **/
+    @TableField(value = "titleoffsetx")
+    private Integer titleOffsetX;
+
+    /** 标题Y轴值  titley **/
+    @TableField(value = "titley")
+    private Integer titleY;
+
+    /** 条形码Y轴值  barcodey **/
+    @TableField(value = "barcodey")
+    private Integer barcodeY;
+
+    /** 条形码宽度值  barcodewidth **/
+    @TableField(value = "barcodewidth")
+    private Integer barcodeWidth;
+
+    /** 条形码宽度倍率  barcodewidthradio **/
+    @TableField(value = "barcodewidthradio")
+    private Integer barcodeWidthRadio;
+
+    /** 条形码高度值  barcodeheight **/
+    @TableField(value = "barcodeheight")
+    private Integer barcodeHeight;
+
+    /** 二维码标准值  qrcodemodel **/
+    @TableField(value = "qrcodemodel")
+    private Integer qrCodeModel;
+
+    /** 二维码放大倍率  qrcodemagnification **/
+    @TableField(value = "qrcodemagnification")
+    private Integer qrCodeMagnification;
+
+    /** 二维码X轴值  qrx **/
+    @TableField(value = "qrx")
+    private Integer qrX;
+
+    /** 二维码Y轴值  qry **/
+    @TableField(value = "qry")
+    private Integer qrY;
+
+    /** 字体大小1号  fontsize1 **/
+    private Integer fontsize1;
+
+    /** 字体大小2号  fontsize2 **/
+    private Integer fontsize2;
+
+    /** 字体大小3号  fontsize3 **/
+    private Integer fontsize3;
+
+    /** 条形码文字Y轴值  barcodetexty **/
+    @TableField(value = "barcodetexty")
+    private Integer barcodeTextY;
+
+    /** 商品名称Y轴值  itemnamey **/
+    @TableField(value = "itemnamey")
+    private Integer itemNameY;
+
+    /** 类型Y轴值  typey **/
+    @TableField(value = "typey")
+    private Integer typeY;
+
+    /** 日期Y轴值  datey **/
+    @TableField(value = "datey")
+    private Integer dateY;
+
+    /** 生产厂家Y轴值  manufacturery **/
+    @TableField(value = "manufacturery")
+    private Integer manufacturerY;
+
+    /** 生产厂家Y轴值2  manufacturery2 **/
+    @TableField(value = "manufacturery2")
+    private Integer manufacturerY2;
+
+    /** 总装药量Y轴值2  totaly **/
+    @TableField(value = "totaly")
+    private Integer totalY;
+
+    private Integer darkness;
+
+    /** 标记  flag **/
+    private Byte flag;
+
+    /** 扩展内容  content **/
+    private String content;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Byte getType() {
+        return type;
+    }
+
+    public void setType(Byte type) {
+        this.type = type;
+    }
+
+    public String getOwner() {
+        return owner;
+    }
+
+    public void setOwner(String owner) {
+        this.owner = owner;
+    }
+
+    public Integer getLeftBaseX() {
+        return leftBaseX;
+    }
+
+    public void setLeftBaseX(Integer leftBaseX) {
+        this.leftBaseX = leftBaseX;
+    }
+
+    public Integer getRightBaseX() {
+        return rightBaseX;
+    }
+
+    public void setRightBaseX(Integer rightBaseX) {
+        this.rightBaseX = rightBaseX;
+    }
+
+    public Integer getLeftQrX() {
+        return leftQrX;
+    }
+
+    public void setLeftQrX(Integer leftQrX) {
+        this.leftQrX = leftQrX;
+    }
+
+    public Integer getRightQrX() {
+        return rightQrX;
+    }
+
+    public void setRightQrX(Integer rightQrX) {
+        this.rightQrX = rightQrX;
+    }
+
+    public Integer getLeftFrameX() {
+        return leftFrameX;
+    }
+
+    public void setLeftFrameX(Integer leftFrameX) {
+        this.leftFrameX = leftFrameX;
+    }
+
+    public Integer getFrameWidth() {
+        return frameWidth;
+    }
+
+    public void setFrameWidth(Integer frameWidth) {
+        this.frameWidth = frameWidth;
+    }
+
+    public Integer getFrameHeight() {
+        return frameHeight;
+    }
+
+    public void setFrameHeight(Integer frameHeight) {
+        this.frameHeight = frameHeight;
+    }
+
+    public Integer getRightFrameX() {
+        return rightFrameX;
+    }
+
+    public void setRightFrameX(Integer rightFrameX) {
+        this.rightFrameX = rightFrameX;
+    }
+
+    public Integer getFrameY() {
+        return frameY;
+    }
+
+    public void setFrameY(Integer frameY) {
+        this.frameY = frameY;
+    }
+
+    public Integer getTitleOffsetX() {
+        return titleOffsetX;
+    }
+
+    public void setTitleOffsetX(Integer titleOffsetX) {
+        this.titleOffsetX = titleOffsetX;
+    }
+
+    public Integer getTitleY() {
+        return titleY;
+    }
+
+    public void setTitleY(Integer titleY) {
+        this.titleY = titleY;
+    }
+
+    public Integer getBarcodeY() {
+        return barcodeY;
+    }
+
+    public void setBarcodeY(Integer barcodeY) {
+        this.barcodeY = barcodeY;
+    }
+
+    public Integer getBarcodeWidth() {
+        return barcodeWidth;
+    }
+
+    public void setBarcodeWidth(Integer barcodeWidth) {
+        this.barcodeWidth = barcodeWidth;
+    }
+
+    public Integer getBarcodeWidthRadio() {
+        return barcodeWidthRadio;
+    }
+
+    public void setBarcodeWidthRadio(Integer barcodeWidthRadio) {
+        this.barcodeWidthRadio = barcodeWidthRadio;
+    }
+
+    public Integer getBarcodeHeight() {
+        return barcodeHeight;
+    }
+
+    public void setBarcodeHeight(Integer barcodeHeight) {
+        this.barcodeHeight = barcodeHeight;
+    }
+
+    public Integer getQrCodeModel() {
+        return qrCodeModel;
+    }
+
+    public void setQrCodeModel(Integer qrCodeModel) {
+        this.qrCodeModel = qrCodeModel;
+    }
+
+    public Integer getQrCodeMagnification() {
+        return qrCodeMagnification;
+    }
+
+    public void setQrCodeMagnification(Integer qrCodeMagnification) {
+        this.qrCodeMagnification = qrCodeMagnification;
+    }
+
+    public Integer getQrX() {
+        return qrX;
+    }
+
+    public void setQrX(Integer qrX) {
+        this.qrX = qrX;
+    }
+
+    public Integer getQrY() {
+        return qrY;
+    }
+
+    public void setQrY(Integer qrY) {
+        this.qrY = qrY;
+    }
+
+    public Integer getFontsize1() {
+        return fontsize1;
+    }
+
+    public void setFontsize1(Integer fontsize1) {
+        this.fontsize1 = fontsize1;
+    }
+
+    public Integer getFontsize2() {
+        return fontsize2;
+    }
+
+    public void setFontsize2(Integer fontsize2) {
+        this.fontsize2 = fontsize2;
+    }
+
+    public Integer getFontsize3() {
+        return fontsize3;
+    }
+
+    public void setFontsize3(Integer fontsize3) {
+        this.fontsize3 = fontsize3;
+    }
+
+    public Integer getBarcodeTextY() {
+        return barcodeTextY;
+    }
+
+    public void setBarcodeTextY(Integer barcodeTextY) {
+        this.barcodeTextY = barcodeTextY;
+    }
+
+    public Integer getItemNameY() {
+        return itemNameY;
+    }
+
+    public void setItemNameY(Integer itemNameY) {
+        this.itemNameY = itemNameY;
+    }
+
+    public Integer getTypeY() {
+        return typeY;
+    }
+
+    public void setTypeY(Integer typeY) {
+        this.typeY = typeY;
+    }
+
+    public Integer getDateY() {
+        return dateY;
+    }
+
+    public void setDateY(Integer dateY) {
+        this.dateY = dateY;
+    }
+
+    public Integer getManufacturerY() {
+        return manufacturerY;
+    }
+
+    public void setManufacturerY(Integer manufacturerY) {
+        this.manufacturerY = manufacturerY;
+    }
+
+    public Integer getManufacturerY2() {
+        return manufacturerY2;
+    }
+
+    public void setManufacturerY2(Integer manufacturerY2) {
+        this.manufacturerY2 = manufacturerY2;
+    }
+
+    public Integer getTotalY() {
+        return totalY;
+    }
+
+    public void setTotalY(Integer totalY) {
+        this.totalY = totalY;
+    }
+
+    public Byte getFlag() {
+        return flag;
+    }
+
+    public void setFlag(Byte flag) {
+        this.flag = flag;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Integer getDarkness() {
+        return darkness;
+    }
+
+    public void setDarkness(Integer darkness) {
+        this.darkness = darkness;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/CustomerInfo.java b/src/main/java/com/gk/firework/Domain/CustomerInfo.java
new file mode 100644
index 0000000..4dad440
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/CustomerInfo.java
@@ -0,0 +1,216 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.util.Date;
+
+@TableName("customer")
+public class CustomerInfo implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    public static final String GENDER_MALE = "男";
+    public static final String GENDER_FEMALE = "女";
+
+    /**   id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 购买人  name **/
+    private String name;
+
+    /** 1.男性、2.女性  gender **/
+    private Byte gender;
+
+    /** 身份证号码  idcardnum **/
+    private String idcardnum;
+
+    /** 民族  nation **/
+    private String nation;
+
+    /** 出生年月日  bornday **/
+    private Date bornday;
+
+    /** 身份证住址  address **/
+    private String address;
+
+    /** 购买次数  frequency **/
+    private Integer frequency;
+
+    /** 购买单品数量  num **/
+    private Integer num;
+
+    /** 最近购买时间  lasttime **/
+    private Date lasttime;
+
+    /** 最近购买数量  lastnum **/
+    private Integer lastnum;
+
+    /** 创建时间  createddate **/
+    private Date createddate;
+
+    /** 更新时间  modifieddate **/
+    private Date modifieddate;
+
+    private String path;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   购买人  name   **/
+    public String getName() {
+        return name;
+    }
+
+    /**   购买人  name   **/
+    public void setName(String name) {
+        this.name = name == null ? null : name.trim();
+    }
+
+    /**   1.男性、2.女性  gender   **/
+    public Byte getGender() {
+        return gender;
+    }
+
+    /**   1.男性、2.女性  gender   **/
+    public void setGender(Byte gender) {
+        this.gender = gender;
+    }
+
+    /**   身份证号码  idcardnum   **/
+    public String getIdcardnum() {
+        return idcardnum;
+    }
+
+    /**   身份证号码  idcardnum   **/
+    public void setIdcardnum(String idcardnum) {
+        this.idcardnum = idcardnum == null ? null : idcardnum.trim();
+    }
+
+    /**   民族  nation   **/
+    public String getNation() {
+        return nation;
+    }
+
+    /**   民族  nation   **/
+    public void setNation(String nation) {
+        this.nation = nation == null ? null : nation.trim();
+    }
+
+    /**   出生年月日  bornday   **/
+    public Date getBornday() {
+        return bornday;
+    }
+
+    /**   出生年月日  bornday   **/
+    public void setBornday(Date bornday) {
+        this.bornday = bornday;
+    }
+
+    /**   身份证住址  address   **/
+    public String getAddress() {
+        return address;
+    }
+
+    /**   身份证住址  address   **/
+    public void setAddress(String address) {
+        this.address = address == null ? null : address.trim();
+    }
+
+    /**   购买次数  frequency   **/
+    public Integer getFrequency() {
+        return frequency;
+    }
+
+    /**   购买次数  frequency   **/
+    public void setFrequency(Integer frequency) {
+        this.frequency = frequency;
+    }
+
+    /**   购买单品数量  num   **/
+    public Integer getNum() {
+        return num;
+    }
+
+    /**   购买单品数量  num   **/
+    public void setNum(Integer num) {
+        this.num = num;
+    }
+
+    /**   最近购买时间  lasttime   **/
+    public Date getLasttime() {
+        return lasttime;
+    }
+
+    /**   最近购买时间  lasttime   **/
+    public void setLasttime(Date lasttime) {
+        this.lasttime = lasttime;
+    }
+
+    /**   最近购买数量  lastnum   **/
+    public Integer getLastnum() {
+        return lastnum;
+    }
+
+    /**   最近购买数量  lastnum   **/
+    public void setLastnum(Integer lastnum) {
+        this.lastnum = lastnum;
+    }
+
+    /**   创建时间  createddate   **/
+    public Date getCreateddate() {
+        return createddate;
+    }
+
+    /**   创建时间  createddate   **/
+    public void setCreateddate(Date createddate) {
+        this.createddate = createddate;
+    }
+
+    /**   更新时间  modifieddate   **/
+    public Date getModifieddate() {
+        return modifieddate;
+    }
+
+    /**   更新时间  modifieddate   **/
+    public void setModifieddate(Date modifieddate) {
+        this.modifieddate = modifieddate;
+    }
+
+    public CustomerInfo() {
+    }
+
+    public CustomerInfo(String name, String idCardNum) {
+        this.name = name;
+        this.idcardnum = idCardNum;
+    }
+
+    public CustomerInfo(String name, Byte gender, String idcardnum, String nation, Date bornday, String address) {
+        this.name = name;
+        this.gender = gender;
+        this.idcardnum = idcardnum;
+        this.nation = nation;
+        this.bornday = bornday;
+        this.address = address;
+    }
+
+
+    public String getPath() {
+        return path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/DO/ProductDO.java b/src/main/java/com/gk/firework/Domain/DO/ProductDO.java
new file mode 100644
index 0000000..0d9d241
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/DO/ProductDO.java
@@ -0,0 +1,20 @@
+package com.gk.firework.Domain.DO;
+
+import com.gk.firework.Domain.ProductInfo;
+
+import java.math.BigDecimal;
+
+public class ProductDO extends ProductInfo {
+
+    // 获取分表
+    private String slice;
+
+    public String getSlice() {
+        return slice;
+    }
+
+    public void setSlice(String slice) {
+        this.slice = slice;
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Domain/DTO/JiangWaiDeadlineReqDTO.java b/src/main/java/com/gk/firework/Domain/DTO/JiangWaiDeadlineReqDTO.java
new file mode 100644
index 0000000..57cd4d8
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/DTO/JiangWaiDeadlineReqDTO.java
@@ -0,0 +1,30 @@
+package com.gk.firework.Domain.DTO;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+public class JiangWaiDeadlineReqDTO implements Serializable {
+
+    private Long uid;
+
+    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
+    private Date deadline;
+
+    public Long getUid() {
+        return uid;
+    }
+
+    public void setUid(Long uid) {
+        this.uid = uid;
+    }
+
+    public Date getDeadline() {
+        return deadline;
+    }
+
+    public void setDeadline(Date deadline) {
+        this.deadline = deadline;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/DeliveryDetailInfo.java b/src/main/java/com/gk/firework/Domain/DeliveryDetailInfo.java
new file mode 100644
index 0000000..3ea8da7
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/DeliveryDetailInfo.java
@@ -0,0 +1,115 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.util.Date;
+@TableName("deliverydetail")
+public class DeliveryDetailInfo implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 出库单号  deliverycode **/
+    private String deliverycode;
+
+    /** 商品编码(10位)  itemcode **/
+    private String itemcode;
+
+    /** 商品名称  itemname **/
+    private String itemname;
+
+    /** 流向码(19位或22位)  directioncode **/
+    private String directioncode;
+
+    /** 创建时间  createat **/
+    private Date createat;
+
+    /** 创建人  createby **/
+    private String createby;
+
+    private Integer num;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   出库单号  deliverycode   **/
+    public String getDeliverycode() {
+        return deliverycode;
+    }
+
+    /**   出库单号  deliverycode   **/
+    public void setDeliverycode(String deliverycode) {
+        this.deliverycode = deliverycode == null ? null : deliverycode.trim();
+    }
+
+    /**   商品编码(10位)  itemcode   **/
+    public String getItemcode() {
+        return itemcode;
+    }
+
+    /**   商品编码(10位)  itemcode   **/
+    public void setItemcode(String itemcode) {
+        this.itemcode = itemcode == null ? null : itemcode.trim();
+    }
+
+    /**   商品名称  itemname   **/
+    public String getItemname() {
+        return itemname;
+    }
+
+    /**   商品名称  itemname   **/
+    public void setItemname(String itemname) {
+        this.itemname = itemname == null ? null : itemname.trim();
+    }
+
+    /**   流向码(19位或22位)  directioncode   **/
+    public String getDirectioncode() {
+        return directioncode;
+    }
+
+    /**   流向码(19位或22位)  directioncode   **/
+    public void setDirectioncode(String directioncode) {
+        this.directioncode = directioncode == null ? null : directioncode.trim();
+    }
+
+    /**   创建时间  createat   **/
+    public Date getCreateat() {
+        return createat;
+    }
+
+    /**   创建时间  createat   **/
+    public void setCreateat(Date createat) {
+        this.createat = createat;
+    }
+
+    /**   创建人  createby   **/
+    public String getCreateby() {
+        return createby;
+    }
+
+    /**   创建人  createby   **/
+    public void setCreateby(String createby) {
+        this.createby = createby == null ? null : createby.trim();
+    }
+
+    public Integer getNum() {
+        return num;
+    }
+
+    public void setNum(Integer num) {
+        this.num = num;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/DeliveryOrderInfo.java b/src/main/java/com/gk/firework/Domain/DeliveryOrderInfo.java
new file mode 100644
index 0000000..29ea6a5
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/DeliveryOrderInfo.java
@@ -0,0 +1,151 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+@TableName("deliveryorder")
+public class DeliveryOrderInfo implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 出库单  ordercode **/
+    private String ordercode;
+
+    /** 创建时间  createat **/
+    private Date createat;
+
+    /** 创建人  createby **/
+    private String createby;
+
+    /** 操作员  operator **/
+    private String operator;
+
+    /** 操作时间  operatat **/
+    private Date operatat;
+
+    /** 店铺  shop **/
+    private String shop;
+
+    /** 箱数  boxnum **/
+    private Integer boxnum;
+
+    /** 运输证  transportcert **/
+    private String transportcert;
+
+    /** 箱数  出库方式(1.正常出库;2.退货出库) **/
+    private Byte type;
+
+    private String companynumber;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   出库单  ordercode   **/
+    public String getOrdercode() {
+        return ordercode;
+    }
+
+    /**   出库单  ordercode   **/
+    public void setOrdercode(String ordercode) {
+        this.ordercode = ordercode == null ? null : ordercode.trim();
+    }
+
+    /**   创建时间  createat   **/
+    public Date getCreateat() {
+        return createat;
+    }
+
+    /**   创建时间  createat   **/
+    public void setCreateat(Date createat) {
+        this.createat = createat;
+    }
+
+    /**   创建人  createby   **/
+    public String getCreateby() {
+        return createby;
+    }
+
+    /**   创建人  createby   **/
+    public void setCreateby(String createby) {
+        this.createby = createby == null ? null : createby.trim();
+    }
+
+    /**   操作员  operator   **/
+    public String getOperator() {
+        return operator;
+    }
+
+    /**   操作员  operator   **/
+    public void setOperator(String operator) {
+        this.operator = operator == null ? null : operator.trim();
+    }
+
+    /**   操作时间  operatat   **/
+    public Date getOperatat() {
+        return operatat;
+    }
+
+    /**   操作时间  operatat   **/
+    public void setOperatat(Date operatat) {
+        this.operatat = operatat;
+    }
+
+    /**   店铺  shop   **/
+    public String getShop() {
+        return shop;
+    }
+
+    /**   店铺  shop   **/
+    public void setShop(String shop) {
+        this.shop = shop == null ? null : shop.trim();
+    }
+
+    /**   箱数  boxnum   **/
+    public Integer getBoxnum() {
+        return boxnum;
+    }
+
+    /**   箱数  boxnum   **/
+    public void setBoxnum(Integer boxnum) {
+        this.boxnum = boxnum;
+    }
+
+    public Byte getType() {
+        return type;
+    }
+
+    public void setType(Byte type) {
+        this.type = type;
+    }
+
+    public String getCompanynumber() {
+        return companynumber;
+    }
+
+    public void setCompanynumber(String companynumber) {
+        this.companynumber = companynumber;
+    }
+
+    public String getTransportcert() {
+        return transportcert;
+    }
+
+    public void setTransportcert(String transportcert) {
+        this.transportcert = transportcert;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/DictionaryItemInfo.java b/src/main/java/com/gk/firework/Domain/DictionaryItemInfo.java
new file mode 100644
index 0000000..7a598d6
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/DictionaryItemInfo.java
@@ -0,0 +1,158 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.util.Date;
+
+@TableName("dictionaryitem")
+public class DictionaryItemInfo implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 序号  sort **/
+    private Integer sort;
+
+    /** 是否使用1使用  0禁用  status **/
+    private Byte status;
+
+    /** 字典标签  text **/
+    private String text;
+
+    /** 字典值  value **/
+    private String value;
+
+    /** 创建人  createdby **/
+    private String createdby;
+
+    /** 创建时间  createddate **/
+    private Date createddate;
+
+    /** 更新人  modifiedby **/
+    private String modifiedby;
+
+    /** 更新时间  modifieddate **/
+    private Date modifieddate;
+
+    /** 备注  description **/
+    private String description;
+
+    /** 字典类型id  typeid **/
+    private Long typeid;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   序号  sort   **/
+    public Integer getSort() {
+        return sort;
+    }
+
+    /**   序号  sort   **/
+    public void setSort(Integer sort) {
+        this.sort = sort;
+    }
+
+    /**   是否使用1使用  0禁用  status   **/
+    public Byte getStatus() {
+        return status;
+    }
+
+    /**   是否使用1使用  0禁用  status   **/
+    public void setStatus(Byte status) {
+        this.status = status;
+    }
+
+    /**   字典标签  text   **/
+    public String getText() {
+        return text;
+    }
+
+    /**   字典标签  text   **/
+    public void setText(String text) {
+        this.text = text == null ? null : text.trim();
+    }
+
+    /**   字典值  value   **/
+    public String getValue() {
+        return value;
+    }
+
+    /**   字典值  value   **/
+    public void setValue(String value) {
+        this.value = value == null ? null : value.trim();
+    }
+
+    /**   创建人  createdby   **/
+    public String getCreatedby() {
+        return createdby;
+    }
+
+    /**   创建人  createdby   **/
+    public void setCreatedby(String createdby) {
+        this.createdby = createdby == null ? null : createdby.trim();
+    }
+
+    /**   创建时间  createddate   **/
+    public Date getCreateddate() {
+        return createddate;
+    }
+
+    /**   创建时间  createddate   **/
+    public void setCreateddate(Date createddate) {
+        this.createddate = createddate;
+    }
+
+    /**   更新人  modifiedby   **/
+    public String getModifiedby() {
+        return modifiedby;
+    }
+
+    /**   更新人  modifiedby   **/
+    public void setModifiedby(String modifiedby) {
+        this.modifiedby = modifiedby == null ? null : modifiedby.trim();
+    }
+
+    /**   更新时间  modifieddate   **/
+    public Date getModifieddate() {
+        return modifieddate;
+    }
+
+    /**   更新时间  modifieddate   **/
+    public void setModifieddate(Date modifieddate) {
+        this.modifieddate = modifieddate;
+    }
+
+    /**   备注  description   **/
+    public String getDescription() {
+        return description;
+    }
+
+    /**   备注  description   **/
+    public void setDescription(String description) {
+        this.description = description == null ? null : description.trim();
+    }
+
+    /**   字典类型id  typeid   **/
+    public Long getTypeid() {
+        return typeid;
+    }
+
+    /**   字典类型id  typeid   **/
+    public void setTypeid(Long typeid) {
+        this.typeid = typeid;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/DictionaryTypeInfo.java b/src/main/java/com/gk/firework/Domain/DictionaryTypeInfo.java
new file mode 100644
index 0000000..143002e
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/DictionaryTypeInfo.java
@@ -0,0 +1,132 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.util.Date;
+
+@TableName("dictionarytype")
+public class DictionaryTypeInfo implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 编码  code **/
+    private String code;
+
+    /** 状态1使用 0禁用  status **/
+    private Byte status;
+
+    /** 类型名称  text **/
+    private String text;
+
+    /** 创建人  createdby **/
+    private String createdby;
+
+    /** 创建时间  createddate **/
+    private Date createddate;
+
+    /** 更新人  modifiedby **/
+    private String modifiedby;
+
+    /** 更新时间  modifieddate **/
+    private Date modifieddate;
+
+    /** 备注  description **/
+    private String description;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   编码  code   **/
+    public String getCode() {
+        return code;
+    }
+
+    /**   编码  code   **/
+    public void setCode(String code) {
+        this.code = code == null ? null : code.trim();
+    }
+
+    /**   状态1使用 0禁用  status   **/
+    public Byte getStatus() {
+        return status;
+    }
+
+    /**   状态1使用 0禁用  status   **/
+    public void setStatus(Byte status) {
+        this.status = status;
+    }
+
+    /**   类型名称  text   **/
+    public String getText() {
+        return text;
+    }
+
+    /**   类型名称  text   **/
+    public void setText(String text) {
+        this.text = text == null ? null : text.trim();
+    }
+
+    /**   创建人  createdby   **/
+    public String getCreatedby() {
+        return createdby;
+    }
+
+    /**   创建人  createdby   **/
+    public void setCreatedby(String createdby) {
+        this.createdby = createdby == null ? null : createdby.trim();
+    }
+
+    /**   创建时间  createddate   **/
+    public Date getCreateddate() {
+        return createddate;
+    }
+
+    /**   创建时间  createddate   **/
+    public void setCreateddate(Date createddate) {
+        this.createddate = createddate;
+    }
+
+    /**   更新人  modifiedby   **/
+    public String getModifiedby() {
+        return modifiedby;
+    }
+
+    /**   更新人  modifiedby   **/
+    public void setModifiedby(String modifiedby) {
+        this.modifiedby = modifiedby == null ? null : modifiedby.trim();
+    }
+
+    /**   更新时间  modifieddate   **/
+    public Date getModifieddate() {
+        return modifieddate;
+    }
+
+    /**   更新时间  modifieddate   **/
+    public void setModifieddate(Date modifieddate) {
+        this.modifieddate = modifieddate;
+    }
+
+    /**   备注  description   **/
+    public String getDescription() {
+        return description;
+    }
+
+    /**   备注  description   **/
+    public void setDescription(String description) {
+        this.description = description == null ? null : description.trim();
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/DistrictInfo.java b/src/main/java/com/gk/firework/Domain/DistrictInfo.java
new file mode 100644
index 0000000..0422be3
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/DistrictInfo.java
@@ -0,0 +1,80 @@
+package com.gk.firework.Domain;
+
+
+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 java.io.Serializable;
+
+@TableName("district")
+public class DistrictInfo implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**   code **/
+    private String code;
+
+    /**   name **/
+    private String name;
+
+    /**   parentcode **/
+    private String parentcode;
+
+    /** 1省份2城市3区县4乡镇5居委会  type **/
+    private Byte type;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**     code   **/
+    public String getCode() {
+        return code;
+    }
+
+    /**     code   **/
+    public void setCode(String code) {
+        this.code = code == null ? null : code.trim();
+    }
+
+    /**     name   **/
+    public String getName() {
+        return name;
+    }
+
+    /**     name   **/
+    public void setName(String name) {
+        this.name = name == null ? null : name.trim();
+    }
+
+    /**     parentcode   **/
+    public String getParentcode() {
+        return parentcode;
+    }
+
+    /**     parentcode   **/
+    public void setParentcode(String parentcode) {
+        this.parentcode = parentcode == null ? null : parentcode.trim();
+    }
+
+    /**   1省份2城市3区县4乡镇5居委会  type   **/
+    public Byte getType() {
+        return type;
+    }
+
+    /**   1省份2城市3区县4乡镇5居委会  type   **/
+    public void setType(Byte type) {
+        this.type = type;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Enterprise.java b/src/main/java/com/gk/firework/Domain/Enterprise.java
new file mode 100644
index 0000000..944548e
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Enterprise.java
@@ -0,0 +1,870 @@
+package com.gk.firework.Domain;
+
+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 com.fasterxml.jackson.annotation.JsonFormat;
+import com.gk.firework.Domain.Enum.*;
+import com.gk.firework.Domain.Utils.Constants;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.springframework.data.annotation.Transient;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+@ApiModel("企业信息类")
+@TableName("enterprise")
+public class Enterprise implements Serializable {
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    /** 主键id  id **/
+    private Long id;
+
+    /** 安全监管分类  safetysupervision **/
+    @ApiModelProperty("安全监管分类")
+    private String safetysupervision;
+
+    /** 国民经济行业分类  economicindustry **/
+    @ApiModelProperty("国民经济行业分类")
+    private String economicindustry;
+
+    /** 单位编号  enterprisenumber **/
+    @ApiModelProperty("单位编号")
+    private String enterprisenumber;
+
+    /** 企业名称  enterprisename **/
+    @ApiModelProperty("企业名称")
+    private String enterprisename;
+
+    /** 电子邮箱  enterpriseemail **/
+    private String enterpriseemail;
+
+    /** 企业规模  enterprisesize **/
+    private EnterpriseSize enterprisesize;
+
+    /** 企业状态  enterprisestatus **/
+    private EnterpriseStatus enterprisestatus;
+
+    /** 行政主管部门  department **/
+    @ApiModelProperty("行政主管部门")
+    private String department;
+
+    /** 设备编号  devicenumber **/
+    private String devicenumber;
+
+    /** 单位办公地址  officeaddress **/
+    @ApiModelProperty("单位办公地址")
+    private String officeaddress;
+
+    /** 所属区域:省  province **/
+    private String province;
+
+    /** 所属区域:市  city **/
+    private String city;
+
+    /** 所属区域:区  district **/
+    private String district;
+
+    /** 所属区域:街道  street **/
+    private String street;
+
+    /** 所属区域:委员会  committee **/
+    private String committee;
+
+    /** 治安主管单位  securitysupervisory **/
+    @ApiModelProperty("治安主管单位")
+    private String securitysupervisory;
+
+    /** 办公电话  officephone **/
+    @ApiModelProperty("办公电话")
+    private String officephone;
+
+    /** 传真电话  faxphone **/
+    private String faxphone;
+
+    /** 单位注册地址  registeraddress **/
+    private String registeraddress;
+
+    /** 注册类型  registertype **/
+    private String registertype;
+
+    /** 成立时间  establishtime **/
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
+    private Date establishtime;
+
+    /** qq号码  qqnumber **/
+    private String qqnumber;
+
+    /** 邮编  postcode **/
+    private String postcode;
+
+    /** 工房数量  roomnumber **/
+    private Integer roomnumber;
+
+    /** 国民经济类型  economictype **/
+    private String economictype;
+
+    /** 生产经营项目  productioncontent **/
+    private String productioncontent;
+
+    /** 工商注册号  businessregisternumber **/
+    private String businessregisternumber;
+
+    /** 组织结构代码  organizationstructurecode **/
+    private String organizationstructurecode;
+
+    /** 有效期开始时间  validstarttime **/
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
+    private Date validstarttime;
+
+    /** 有效期结束时间  validendtime **/
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
+    private Date validendtime;
+
+    @ApiModelProperty("专职安全生产管理人员及仓库守护、保管人员数量")
+    private Integer personnumber;
+
+    /** 从业人数  employeenumber **/
+    private Integer employeenumber;
+
+    /** 是否缴纳安全责任险  ispaysafetyinsurance **/
+    private Boolean ispaysafetyinsurance;
+
+    /** 保险合同号码(保单号)  insurancecontractnumber **/
+    private String insurancecontractnumber;
+
+    /** 投保金额  insureamount **/
+    private BigDecimal insureamount;
+
+    /** 投保有效期开始时间  insurestarttime **/
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
+    private Date insurestarttime;
+
+    /** 投保有效期结束时间  insureendtime **/
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
+    private Date insureendtime;
+
+    /** 保险公司名称  insurancecompany **/
+    private String insurancecompany;
+
+    /** 是否有重大危险源  ismajorhazard **/
+    private Boolean ismajorhazard;
+
+    /** 是否有特种设备  isspecialequipment **/
+    private Boolean isspecialequipment;
+
+    /** 是否有职业卫生信息  isoccupationalhealthinfo **/
+    private Boolean isoccupationalhealthinfo;
+
+    /** 是否有特种人员  isspecialpersonnel **/
+    private Boolean isspecialpersonnel;
+
+    /** 自查记录周期  selfrecordingcycle **/
+    private String selfrecordingcycle;
+
+    /** 是否有上级企业  isparententerprise **/
+    private Boolean isparententerprise;
+
+    /** 上级企业id  parententerpriseid **/
+    private Long parententerpriseid;
+
+    /** 上级企业名称  parententerprisename **/
+    private String parententerprisename;
+
+    /** 信息创建时间  infocreatetime **/
+    private Date infocreatetime;
+
+    /** 信息更新时间  infoupdatetime **/
+    private Date infoupdatetime;
+
+    /** 更新用户  infoupdateby **/
+    private Long infoupdateby;
+
+    /** 创建用户  infocreateby **/
+    private Long infocreateby;
+
+    private String twobitcode;
+
+    /** 法定代表人信息  legalrepresentative **/
+
+    /** 主要负责人  mainprincipal **/
+
+    /** 安全负责人  securityofficer **/
+
+    /** 信息员  informationofficer **/
+
+    @TableField(exist = false)
+    private EnterpriseStaff  legalrepresentative;
+    @TableField(exist = false)
+    private EnterpriseStaff  mainprincipal;
+    @TableField(exist = false)
+    private EnterpriseStaff  securityofficer;
+    @TableField(exist = false)
+    private EnterpriseStaff  informationofficer;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /** 单位坐标  enterpriselocation **/
+    private String longitude;
+
+    private String latitude;
+
+    /** 信息创建人  infocreatebyname **/
+    private String infocreatebyname;
+
+    /** 信息更信人  infoupdatebyname **/
+    private String infoupdatebyname;
+
+    /** 分表标识  divideflag **/
+    private Byte divideflag;
+
+    @Transient
+    @TableField(exist = false)
+    private String password;
+
+    @ApiModelProperty("丹灵单位编号")
+    private String dlcompanycode;
+
+    @ApiModelProperty("设备id")
+    private String deviceid;
+
+    @ApiModelProperty("是否注销")
+    private Boolean loginvalidflag;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getSafetysupervision() {
+        return safetysupervision;
+    }
+
+    public void setSafetysupervision(String safetysupervision) {
+        this.safetysupervision = safetysupervision;
+    }
+
+    public String getEconomicindustry() {
+        return economicindustry;
+    }
+
+    public void setEconomicindustry(String economicindustry) {
+        this.economicindustry = economicindustry;
+    }
+
+    /**   单位编号  enterprisenumber   **/
+    public String getEnterprisenumber() {
+        return enterprisenumber;
+    }
+
+    /**   单位编号  enterprisenumber   **/
+    public void setEnterprisenumber(String enterprisenumber) {
+        this.enterprisenumber = enterprisenumber == null ? null : enterprisenumber.trim();
+    }
+
+    /**   企业名称  enterprisename   **/
+    public String getEnterprisename() {
+        return enterprisename;
+    }
+
+    /**   企业名称  enterprisename   **/
+    public void setEnterprisename(String enterprisename) {
+        this.enterprisename = enterprisename == null ? null : enterprisename.trim();
+    }
+
+    /**   电子邮箱  enterpriseemail   **/
+    public String getEnterpriseemail() {
+        return enterpriseemail;
+    }
+
+    /**   电子邮箱  enterpriseemail   **/
+    public void setEnterpriseemail(String enterpriseemail) {
+        this.enterpriseemail = enterpriseemail == null ? null : enterpriseemail.trim();
+    }
+
+    /**   企业规模  enterprisesize   **/
+    public EnterpriseSize getEnterprisesize() {
+        return enterprisesize;
+    }
+
+    /**   企业规模  enterprisesize   **/
+    public void setEnterprisesize(EnterpriseSize enterprisesize) {
+        this.enterprisesize = enterprisesize;
+    }
+
+    /**   企业状态  enterprisestatus   **/
+    public EnterpriseStatus getEnterprisestatus() {
+        return enterprisestatus;
+    }
+
+    public void setEnterprisestatus(EnterpriseStatus enterprisestatus) {
+        this.enterprisestatus = enterprisestatus;
+    }
+
+    /**   行政主管部门  department   **/
+    public String getDepartment() {
+        return department;
+    }
+
+    /**   行政主管部门  department   **/
+    public void setDepartment(String department) {
+        this.department = department == null ? null : department.trim();
+    }
+
+    /**   设备编号  devicenumber   **/
+    public String getDevicenumber() {
+        return devicenumber;
+    }
+
+    /**   设备编号  devicenumber   **/
+    public void setDevicenumber(String devicenumber) {
+        this.devicenumber = devicenumber == null ? null : devicenumber.trim();
+    }
+
+    /**   单位办公地址  officeaddress   **/
+    public String getOfficeaddress() {
+        return officeaddress;
+    }
+
+    /**   单位办公地址  officeaddress   **/
+    public void setOfficeaddress(String officeaddress) {
+        this.officeaddress = officeaddress == null ? null : officeaddress.trim();
+    }
+
+    /**   所属区域:省  province   **/
+    public String getProvince() {
+        return province;
+    }
+
+    /**   所属区域:省  province   **/
+    public void setProvince(String province) {
+        this.province = province == null ? null : province.trim();
+    }
+
+    /**   所属区域:市  city   **/
+    public String getCity() {
+        return city;
+    }
+
+    /**   所属区域:市  city   **/
+    public void setCity(String city) {
+        this.city = city == null ? null : city.trim();
+    }
+
+    /**   所属区域:区  district   **/
+    public String getDistrict() {
+        return district;
+    }
+
+    /**   所属区域:区  district   **/
+    public void setDistrict(String district) {
+        this.district = district == null ? null : district.trim();
+    }
+
+    /**   所属区域:街道  street   **/
+    public String getStreet() {
+        return street;
+    }
+
+    /**   所属区域:街道  street   **/
+    public void setStreet(String street) {
+        this.street = street == null ? null : street.trim();
+    }
+
+    /**   所属区域:委员会  committee   **/
+    public String getCommittee() {
+        return committee;
+    }
+
+    /**   所属区域:委员会  committee   **/
+    public void setCommittee(String committee) {
+        this.committee = committee == null ? null : committee.trim();
+    }
+
+    /**   治安主管单位  securitysupervisory   **/
+    public String getSecuritysupervisory() {
+        return securitysupervisory;
+    }
+
+    /**   治安主管单位  securitysupervisory   **/
+    public void setSecuritysupervisory(String securitysupervisory) {
+        this.securitysupervisory = securitysupervisory == null ? null : securitysupervisory.trim();
+    }
+
+    /**   办公电话  officephone   **/
+    public String getOfficephone() {
+        return officephone;
+    }
+
+    /**   办公电话  officephone   **/
+    public void setOfficephone(String officephone) {
+        this.officephone = officephone == null ? null : officephone.trim();
+    }
+
+    /**   传真电话  faxphone   **/
+    public String getFaxphone() {
+        return faxphone;
+    }
+
+    /**   传真电话  faxphone   **/
+    public void setFaxphone(String faxphone) {
+        this.faxphone = faxphone == null ? null : faxphone.trim();
+    }
+
+    /**   单位注册地址  registeraddress   **/
+    public String getRegisteraddress() {
+        return registeraddress;
+    }
+
+    /**   单位注册地址  registeraddress   **/
+    public void setRegisteraddress(String registeraddress) {
+        this.registeraddress = registeraddress == null ? null : registeraddress.trim();
+    }
+
+    /**   注册类型  registertype   **/
+    public String getRegistertype() {
+        return registertype;
+    }
+
+    /**   注册类型  registertype   **/
+    public void setRegistertype(String registertype) {
+        this.registertype = registertype == null ? null : registertype.trim();
+    }
+
+    /**   成立时间  establishtime   **/
+    public Date getEstablishtime() {
+        return establishtime;
+    }
+
+    /**   成立时间  establishtime   **/
+    public void setEstablishtime(Date establishtime) {
+        this.establishtime = establishtime;
+    }
+
+    /**   qq号码  qqnumber   **/
+    public String getQqnumber() {
+        return qqnumber;
+    }
+
+    /**   qq号码  qqnumber   **/
+    public void setQqnumber(String qqnumber) {
+        this.qqnumber = qqnumber == null ? null : qqnumber.trim();
+    }
+
+    /**   邮编  postcode   **/
+    public String getPostcode() {
+        return postcode;
+    }
+
+    /**   邮编  postcode   **/
+    public void setPostcode(String postcode) {
+        this.postcode = postcode == null ? null : postcode.trim();
+    }
+
+    /**   工房数量  roomnumber   **/
+    public Integer getRoomnumber() {
+        return roomnumber;
+    }
+
+    /**   工房数量  roomnumber   **/
+    public void setRoomnumber(Integer roomnumber) {
+        this.roomnumber = roomnumber;
+    }
+
+    /**   国民经济类型  economictype   **/
+    public String getEconomictype() {
+        return economictype;
+    }
+
+    /**   国民经济类型  economictype   **/
+    public void setEconomictype(String economictype) {
+        this.economictype = economictype == null ? null : economictype.trim();
+    }
+
+    /**   生产经营项目  productioncontent   **/
+    public String getProductioncontent() {
+        return productioncontent;
+    }
+
+    /**   生产经营项目  productioncontent   **/
+    public void setProductioncontent(String productioncontent) {
+        this.productioncontent = productioncontent == null ? null : productioncontent.trim();
+    }
+
+    /**   工商注册号  businessregisternumber   **/
+    public String getBusinessregisternumber() {
+        return businessregisternumber;
+    }
+
+    /**   工商注册号  businessregisternumber   **/
+    public void setBusinessregisternumber(String businessregisternumber) {
+        this.businessregisternumber = businessregisternumber == null ? null : businessregisternumber.trim();
+    }
+
+    /**   组织结构代码  organizationstructurecode   **/
+    public String getOrganizationstructurecode() {
+        return organizationstructurecode;
+    }
+
+    /**   组织结构代码  organizationstructurecode   **/
+    public void setOrganizationstructurecode(String organizationstructurecode) {
+        this.organizationstructurecode = organizationstructurecode == null ? null : organizationstructurecode.trim();
+    }
+
+    /**   有效期开始时间  validstarttime   **/
+    public Date getValidstarttime() {
+        return validstarttime;
+    }
+
+    /**   有效期开始时间  validstarttime   **/
+    public void setValidstarttime(Date validstarttime) {
+        this.validstarttime = validstarttime;
+    }
+
+    /**   有效期结束时间  validendtime   **/
+    public Date getValidendtime() {
+        return validendtime;
+    }
+
+    /**   有效期结束时间  validendtime   **/
+    public void setValidendtime(Date validendtime) {
+        this.validendtime = validendtime;
+    }
+
+    /**   从业人数  employeenumber   **/
+    public Integer getEmployeenumber() {
+        return employeenumber;
+    }
+
+    /**   从业人数  employeenumber   **/
+    public void setEmployeenumber(Integer employeenumber) {
+        this.employeenumber = employeenumber;
+    }
+
+    /**   是否缴纳安全责任险  ispaysafetyinsurance   **/
+    public Boolean getIspaysafetyinsurance() {
+        return ispaysafetyinsurance;
+    }
+
+    /**   是否缴纳安全责任险  ispaysafetyinsurance   **/
+    public void setIspaysafetyinsurance(Boolean ispaysafetyinsurance) {
+        this.ispaysafetyinsurance = ispaysafetyinsurance;
+    }
+
+    /**   保险合同号码(保单号)  insurancecontractnumber   **/
+    public String getInsurancecontractnumber() {
+        return insurancecontractnumber;
+    }
+
+    /**   保险合同号码(保单号)  insurancecontractnumber   **/
+    public void setInsurancecontractnumber(String insurancecontractnumber) {
+        this.insurancecontractnumber = insurancecontractnumber == null ? null : insurancecontractnumber.trim();
+    }
+
+    /**   投保金额  insureamount   **/
+    public BigDecimal getInsureamount() {
+        return insureamount;
+    }
+
+    /**   投保金额  insureamount   **/
+    public void setInsureamount(BigDecimal insureamount) {
+        this.insureamount = insureamount;
+    }
+
+    /**   投保有效期开始时间  insurestarttime   **/
+    public Date getInsurestarttime() {
+        return insurestarttime;
+    }
+
+    /**   投保有效期开始时间  insurestarttime   **/
+    public void setInsurestarttime(Date insurestarttime) {
+        this.insurestarttime = insurestarttime;
+    }
+
+    /**   投保有效期结束时间  insureendtime   **/
+    public Date getInsureendtime() {
+        return insureendtime;
+    }
+
+    /**   投保有效期结束时间  insureendtime   **/
+    public void setInsureendtime(Date insureendtime) {
+        this.insureendtime = insureendtime;
+    }
+
+    /**   是否有重大危险源  ismajorhazard   **/
+    public Boolean getIsmajorhazard() {
+        return ismajorhazard;
+    }
+
+    /**   是否有重大危险源  ismajorhazard   **/
+    public void setIsmajorhazard(Boolean ismajorhazard) {
+        this.ismajorhazard = ismajorhazard;
+    }
+
+    /**   是否有特种设备  isspecialequipment   **/
+    public Boolean getIsspecialequipment() {
+        return isspecialequipment;
+    }
+
+    /**   是否有特种设备  isspecialequipment   **/
+    public void setIsspecialequipment(Boolean isspecialequipment) {
+        this.isspecialequipment = isspecialequipment;
+    }
+
+    /**   是否有职业卫生信息  isoccupationalhealthinfo   **/
+    public Boolean getIsoccupationalhealthinfo() {
+        return isoccupationalhealthinfo;
+    }
+
+    /**   是否有职业卫生信息  isoccupationalhealthinfo   **/
+    public void setIsoccupationalhealthinfo(Boolean isoccupationalhealthinfo) {
+        this.isoccupationalhealthinfo = isoccupationalhealthinfo;
+    }
+
+    /**   是否有特种人员  isspecialpersonnel   **/
+    public Boolean getIsspecialpersonnel() {
+        return isspecialpersonnel;
+    }
+
+    /**   是否有特种人员  isspecialpersonnel   **/
+    public void setIsspecialpersonnel(Boolean isspecialpersonnel) {
+        this.isspecialpersonnel = isspecialpersonnel;
+    }
+
+    public String getSelfrecordingcycle() {
+        return selfrecordingcycle;
+    }
+
+    public void setSelfrecordingcycle(String selfrecordingcycle) {
+        this.selfrecordingcycle = selfrecordingcycle;
+    }
+
+    /**   是否有上级企业  isparententerprise   **/
+    public Boolean getIsparententerprise() {
+        return isparententerprise;
+    }
+
+    /**   是否有上级企业  isparententerprise   **/
+    public void setIsparententerprise(Boolean isparententerprise) {
+        this.isparententerprise = isparententerprise;
+    }
+
+    /**   上级企业id  parententerpriseid   **/
+    public Long getParententerpriseid() {
+        return parententerpriseid;
+    }
+
+    /**   上级企业id  parententerpriseid   **/
+    public void setParententerpriseid(Long parententerpriseid) {
+        this.parententerpriseid = parententerpriseid;
+    }
+
+    /**   上级企业名称  parententerprisename   **/
+    public String getParententerprisename() {
+        return parententerprisename;
+    }
+
+    /**   上级企业名称  parententerprisename   **/
+    public void setParententerprisename(String parententerprisename) {
+        this.parententerprisename = parententerprisename == null ? null : parententerprisename.trim();
+    }
+
+    /**   信息创建时间  infocreatetime   **/
+    public Date getInfocreatetime() {
+        return infocreatetime;
+    }
+
+    /**   信息创建时间  infocreatetime   **/
+    public void setInfocreatetime(Date infocreatetime) {
+        this.infocreatetime = infocreatetime;
+    }
+
+    /**   信息更新时间  infoupdatetime   **/
+    public Date getInfoupdatetime() {
+        return infoupdatetime;
+    }
+
+    /**   信息更新时间  infoupdatetime   **/
+    public void setInfoupdatetime(Date infoupdatetime) {
+        this.infoupdatetime = infoupdatetime;
+    }
+
+    /**   更新用户  infoupdateby   **/
+    public Long getInfoupdateby() {
+        return infoupdateby;
+    }
+
+    /**   更新用户  infoupdateby   **/
+    public void setInfoupdateby(Long infoupdateby) {
+        this.infoupdateby = infoupdateby;
+    }
+
+    /**   创建用户  infocreateby   **/
+    public Long getInfocreateby() {
+        return infocreateby;
+    }
+
+    /**   创建用户  infocreateby   **/
+    public void setInfocreateby(Long infocreateby) {
+        this.infocreateby = infocreateby;
+    }
+
+    public EnterpriseStaff getLegalrepresentative() {
+        return legalrepresentative == null? new EnterpriseStaff():legalrepresentative ;
+    }
+
+    public void setLegalrepresentative(EnterpriseStaff legalrepresentative) {
+        this.legalrepresentative = legalrepresentative;
+    }
+
+    public EnterpriseStaff getMainprincipal() {
+        return  mainprincipal == null?new EnterpriseStaff():mainprincipal;
+    }
+
+    public void setMainprincipal(EnterpriseStaff mainprincipal) {
+        this.mainprincipal = mainprincipal;
+    }
+
+    public EnterpriseStaff getSecurityofficer() {
+        return securityofficer == null?new EnterpriseStaff():securityofficer;
+    }
+
+    public void setSecurityofficer(EnterpriseStaff securityofficer) {
+        this.securityofficer = securityofficer;
+    }
+
+    public EnterpriseStaff getInformationofficer() {
+        return informationofficer == null?new EnterpriseStaff():informationofficer;
+    }
+
+    public void setInformationofficer(EnterpriseStaff informationofficer) {
+        this.informationofficer = informationofficer;
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+
+    /**   信息创建人  infocreatebyname   **/
+    public String getInfocreatebyname() {
+        return infocreatebyname;
+    }
+
+    /**   信息创建人  infocreatebyname   **/
+    public void setInfocreatebyname(String infocreatebyname) {
+        this.infocreatebyname = infocreatebyname == null ? null : infocreatebyname.trim();
+    }
+
+    /**   信息更信人  infoupdatebyname   **/
+    public String getInfoupdatebyname() {
+        return infoupdatebyname;
+    }
+
+    /**   信息更信人  infoupdatebyname   **/
+    public void setInfoupdatebyname(String infoupdatebyname) {
+        this.infoupdatebyname = infoupdatebyname == null ? null : infoupdatebyname.trim();
+    }
+
+    /**   分表标识  divideflag   **/
+    public Byte getDivideflag() {
+        return divideflag;
+    }
+
+    /**   分表标识  divideflag   **/
+    public void setDivideflag(Byte divideflag) {
+        this.divideflag = divideflag;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+
+    public String getLongitude() {
+        return longitude;
+    }
+
+    public void setLongitude(String longitude) {
+        this.longitude = longitude;
+    }
+
+    public String getLatitude() {
+        return latitude;
+    }
+
+    public void setLatitude(String latitude) {
+        this.latitude = latitude;
+    }
+
+    public String getTwobitcode() {
+        return twobitcode;
+    }
+
+    public void setTwobitcode(String twobitcode) {
+        this.twobitcode = twobitcode;
+    }
+
+    public String getInsurancecompany() {
+        return insurancecompany;
+    }
+
+    public void setInsurancecompany(String insurancecompany) {
+        this.insurancecompany = insurancecompany;
+    }
+
+    public Integer getPersonnumber() {
+        return personnumber;
+    }
+
+    public void setPersonnumber(Integer personnumber) {
+        this.personnumber = personnumber;
+    }
+
+    public String getDlcompanycode() {
+        return dlcompanycode;
+    }
+
+    public void setDlcompanycode(String dlcompanycode) {
+        this.dlcompanycode = dlcompanycode;
+    }
+
+    public String getDeviceid() {
+        return deviceid;
+    }
+
+    public void setDeviceid(String deviceid) {
+        this.deviceid = deviceid;
+    }
+
+    public Boolean getLoginvalidflag() {
+        return loginvalidflag;
+    }
+
+    public void setLoginvalidflag(Boolean loginvalidflag) {
+        this.loginvalidflag = loginvalidflag;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/EnterpriseAnnual.java b/src/main/java/com/gk/firework/Domain/EnterpriseAnnual.java
new file mode 100644
index 0000000..d18ddb6
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/EnterpriseAnnual.java
@@ -0,0 +1,172 @@
+package com.gk.firework.Domain;
+
+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 java.util.Date;
+
+@TableName("enterpriseannual")
+public class EnterpriseAnnual {
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    /** 主键id  id **/
+    private Long id;
+
+    /** 年度  year **/
+    private String year;
+
+    /** 数量  amount **/
+    private Integer amount;
+
+    /** 类别  type **/
+    private String type;
+
+    /** 创建时间  createtime **/
+    private Date createtime;
+
+    /** 创建人id  createby **/
+    private Long createby;
+
+    /** 创建人name  createbyname **/
+    private String createbyname;
+
+    /** 更新时间  updatetime **/
+    private Date updatetime;
+
+    /** 更新人id  updateby **/
+    private Long updateby;
+
+    /** 更信人name  updatebyname **/
+    private String updatebyname;
+
+    /** 企业id  enterpriseid **/
+    private Long enterpriseid;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   年度  year   **/
+    public String getYear() {
+        return year;
+    }
+
+    /**   年度  year   **/
+    public void setYear(String year) {
+        this.year = year == null ? null : year.trim();
+    }
+
+    /**   数量  amount   **/
+    public Integer getAmount() {
+        return amount;
+    }
+
+    /**   数量  amount   **/
+    public void setAmount(Integer amount) {
+        this.amount = amount;
+    }
+
+    /**   类别  type   **/
+    public String getType() {
+        return type;
+    }
+
+    /**   类别  type   **/
+    public void setType(String type) {
+        this.type = type == null ? null : type.trim();
+    }
+
+    /**   创建时间  createtime   **/
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    /**   创建时间  createtime   **/
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    /**   创建人id  createby   **/
+    public Long getCreateby() {
+        return createby;
+    }
+
+    /**   创建人id  createby   **/
+    public void setCreateby(Long createby) {
+        this.createby = createby;
+    }
+
+    /**   创建人name  createbyname   **/
+    public String getCreatebyname() {
+        return createbyname;
+    }
+
+    /**   创建人name  createbyname   **/
+    public void setCreatebyname(String createbyname) {
+        this.createbyname = createbyname == null ? null : createbyname.trim();
+    }
+
+    /**   更新时间  updatetime   **/
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    /**   更新时间  updatetime   **/
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    /**   更新人id  updateby   **/
+    public Long getUpdateby() {
+        return updateby;
+    }
+
+    /**   更新人id  updateby   **/
+    public void setUpdateby(Long updateby) {
+        this.updateby = updateby;
+    }
+
+    /**   更信人name  updatebyname   **/
+    public String getUpdatebyname() {
+        return updatebyname;
+    }
+
+    /**   更信人name  updatebyname   **/
+    public void setUpdatebyname(String updatebyname) {
+        this.updatebyname = updatebyname == null ? null : updatebyname.trim();
+    }
+
+    /**   企业id  enterpriseid   **/
+    public Long getEnterpriseid() {
+        return enterpriseid;
+    }
+
+    /**   企业id  enterpriseid   **/
+    public void setEnterpriseid(Long enterpriseid) {
+        this.enterpriseid = enterpriseid;
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/EnterpriseApply.java b/src/main/java/com/gk/firework/Domain/EnterpriseApply.java
new file mode 100644
index 0000000..1b61cd7
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/EnterpriseApply.java
@@ -0,0 +1,909 @@
+package com.gk.firework.Domain;
+
+
+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 com.fasterxml.jackson.annotation.JsonFormat;
+import com.gk.firework.Domain.Enum.*;
+import org.springframework.data.annotation.Transient;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@TableName("enterpriseapply")
+public class EnterpriseApply implements Serializable {
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id  id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 安全监管分类  safetysupervision **/
+    private String safetysupervision;
+
+    /** 国民经济行业分类  economicindustry **/
+    private String economicindustry;
+
+    /** 单位编号  enterprisenumber **/
+    private String enterprisenumber;
+
+    /** 企业名称  enterprisename **/
+    private String enterprisename;
+
+    /** 电子邮箱  enterpriseemail **/
+    private String enterpriseemail;
+
+    /** 企业规模  enterprisesize **/
+    private EnterpriseSize enterprisesize;
+
+    /** 企业状态  enterprisestatus **/
+    private EnterpriseStatus enterprisestatus;
+
+    /** 行政主管部门  department **/
+    private String department;
+
+    /** 设备编号  devicenumber **/
+    private String devicenumber;
+
+    /** 单位办公地址  officeaddress **/
+    private String officeaddress;
+
+    /** 所属区域:省  province **/
+    private String province;
+
+    /** 所属区域:市  city **/
+    private String city;
+
+    /** 所属区域:区  district **/
+    private String district;
+
+    /** 所属区域:街道  street **/
+    private String street;
+
+    /** 所属区域:委员会  committee **/
+    private String committee;
+
+    /** 治安主管单位  securitysupervisory **/
+    private String securitysupervisory;
+
+    /** 办公电话  officephone **/
+    private String officephone;
+
+    /** 传真电话  faxphone **/
+    private String faxphone;
+
+    /** 单位注册地址  registeraddress **/
+    private String registeraddress;
+
+    /** 注册类型  registertype **/
+    private String registertype;
+
+    /** 成立时间  establishtime **/
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
+    private Date establishtime;
+
+    /** qq号码  qqnumber **/
+    private String qqnumber;
+
+    /** 邮编  postcode **/
+    private String postcode;
+
+    /** 工房数量  roomnumber **/
+    private Integer roomnumber;
+
+    /** 国民经济类型  economictype **/
+    private String economictype;
+
+    /** 生产经营项目  productioncontent **/
+    private String productioncontent;
+
+    /** 工商注册号  businessregisternumber **/
+    private String businessregisternumber;
+
+    /** 组织结构代码  organizationstructurecode **/
+    private String organizationstructurecode;
+
+    /** 有效期开始时间  validstarttime **/
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
+    private Date validstarttime;
+
+    /** 有效期结束时间  validendtime **/
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
+    private Date validendtime;
+
+    /** 从业人数  employeenumber **/
+    private Integer employeenumber;
+
+    /** 是否缴纳安全责任险  ispaysafetyinsurance **/
+    private Boolean ispaysafetyinsurance;
+
+    /** 保险合同号码(保单号)  insurancecontractnumber **/
+    private String insurancecontractnumber;
+
+    /** 投保金额  insureamount **/
+    private Integer insureamount;
+
+    /** 投保有效期开始时间  insurestarttime **/
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
+    private Date insurestarttime;
+
+    /** 投保有效期结束时间  insureendtime **/
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
+    private Date insureendtime;
+
+    /** 是否有重大危险源  ismajorhazard **/
+    private Boolean ismajorhazard;
+
+    /** 是否有特种设备  isspecialequipment **/
+    private Boolean isspecialequipment;
+
+    /** 是否有职业卫生信息  isoccupationalhealthinfo **/
+    private Boolean isoccupationalhealthinfo;
+
+    /** 是否有特种人员  isspecialpersonnel **/
+    private Boolean isspecialpersonnel;
+
+    /** 自查记录周期  selfrecordingcycle **/
+    private String selfrecordingcycle;
+
+    /** 是否有上级企业  isparententerprise **/
+    private Boolean isparententerprise;
+
+    /** 上级企业id  isparententerprise **/
+    private Long parententerpriseid;
+
+    /** 上级企业名称  parententerprisename **/
+    private String parententerprisename;
+
+    /** 更新用户  infoupdateby **/
+    private Long infoupdateby;
+
+    /** 创建用户  infocreateby **/
+    private Long infocreateby;
+
+    /** 法定代表人信息  legalrepresentative **/
+    private String legalrepresentative;
+
+    /** 主要负责人  mainprincipal **/
+    private String mainprincipal;
+
+    /** 安全负责人  securityofficer **/
+    private String securityofficer;
+
+    /** 信息员  informationofficer **/
+    private String informationofficer;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /** 单位坐标  enterpriselocation **/
+    private String enterpriselocation;
+
+    /** 信息创建时间  infocreatetime **/
+    private Date infocreatetime;
+
+    /** 信息创建人  infocreatebyname **/
+    private String infocreatebyname;
+
+    /** 信息更新时间  infoupdatetime **/
+    private Date infoupdatetime;
+
+    /** 信息更信人  infoupdatebyname **/
+    private String infoupdatebyname;
+
+    /** 分表标识  dividelogo **/
+    private Byte dividelogo;
+
+    /** 更新字段  updatefields **/
+    private String updatefields;
+
+    /** 申请状态  applystatus **/
+    private ApplyStatus applystatus;
+
+    /** 父id  parentid **/
+    private Long parentid;
+
+    /** 提出时间  applytime **/
+    private Date applytime;
+
+    /** 处理时间  processtime **/
+    private Date processtime;
+
+    /** 提出人id  applypersonid **/
+    private Long applypersonid;
+
+    /** 提出人名  applypersonname **/
+    private String applypersonname;
+
+    /** 处理人id  processpersonid **/
+    private Long processpersonid;
+
+    /** 处理人名  processpersonname **/
+    private String processpersonname;
+
+    @Transient
+    private String password;
+
+    private CommitStatus commitstatus;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getSafetysupervision() {
+        return safetysupervision;
+    }
+
+    public void setSafetysupervision(String safetysupervision) {
+        this.safetysupervision = safetysupervision;
+    }
+
+    public String getEconomicindustry() {
+        return economicindustry;
+    }
+
+    public void setEconomicindustry(String economicindustry) {
+        this.economicindustry = economicindustry;
+    }
+
+    /**   单位编号  enterprisenumber   **/
+    public String getEnterprisenumber() {
+        return enterprisenumber;
+    }
+
+    /**   单位编号  enterprisenumber   **/
+    public void setEnterprisenumber(String enterprisenumber) {
+        this.enterprisenumber = enterprisenumber == null ? null : enterprisenumber.trim();
+    }
+
+    /**   企业名称  enterprisename   **/
+    public String getEnterprisename() {
+        return enterprisename;
+    }
+
+    /**   企业名称  enterprisename   **/
+    public void setEnterprisename(String enterprisename) {
+        this.enterprisename = enterprisename == null ? null : enterprisename.trim();
+    }
+
+    /**   电子邮箱  enterpriseemail   **/
+    public String getEnterpriseemail() {
+        return enterpriseemail;
+    }
+
+    /**   电子邮箱  enterpriseemail   **/
+    public void setEnterpriseemail(String enterpriseemail) {
+        this.enterpriseemail = enterpriseemail == null ? null : enterpriseemail.trim();
+    }
+
+    /**   企业规模  enterprisesize   **/
+    public EnterpriseSize getEnterprisesize() {
+        return enterprisesize;
+    }
+
+    /**   企业规模  enterprisesize   **/
+    public void setEnterprisesize(EnterpriseSize enterprisesize) {
+        this.enterprisesize = enterprisesize;
+    }
+
+    /**   企业状态  enterprisestatus   **/
+    public EnterpriseStatus getEnterprisestatus() {
+        return enterprisestatus;
+    }
+
+    public void setEnterprisestatus(EnterpriseStatus enterprisestatus) {
+        this.enterprisestatus = enterprisestatus;
+    }
+
+    /**   行政主管部门  department   **/
+    public String getDepartment() {
+        return department;
+    }
+
+    /**   行政主管部门  department   **/
+    public void setDepartment(String department) {
+        this.department = department == null ? null : department.trim();
+    }
+
+    /**   设备编号  devicenumber   **/
+    public String getDevicenumber() {
+        return devicenumber;
+    }
+
+    /**   设备编号  devicenumber   **/
+    public void setDevicenumber(String devicenumber) {
+        this.devicenumber = devicenumber == null ? null : devicenumber.trim();
+    }
+
+    /**   单位办公地址  officeaddress   **/
+    public String getOfficeaddress() {
+        return officeaddress;
+    }
+
+    /**   单位办公地址  officeaddress   **/
+    public void setOfficeaddress(String officeaddress) {
+        this.officeaddress = officeaddress == null ? null : officeaddress.trim();
+    }
+
+    /**   所属区域:省  province   **/
+    public String getProvince() {
+        return province;
+    }
+
+    /**   所属区域:省  province   **/
+    public void setProvince(String province) {
+        this.province = province == null ? null : province.trim();
+    }
+
+    /**   所属区域:市  city   **/
+    public String getCity() {
+        return city;
+    }
+
+    /**   所属区域:市  city   **/
+    public void setCity(String city) {
+        this.city = city == null ? null : city.trim();
+    }
+
+    /**   所属区域:区  district   **/
+    public String getDistrict() {
+        return district;
+    }
+
+    /**   所属区域:区  district   **/
+    public void setDistrict(String district) {
+        this.district = district == null ? null : district.trim();
+    }
+
+    /**   所属区域:街道  street   **/
+    public String getStreet() {
+        return street;
+    }
+
+    /**   所属区域:街道  street   **/
+    public void setStreet(String street) {
+        this.street = street == null ? null : street.trim();
+    }
+
+    /**   所属区域:委员会  committee   **/
+    public String getCommittee() {
+        return committee;
+    }
+
+    /**   所属区域:委员会  committee   **/
+    public void setCommittee(String committee) {
+        this.committee = committee == null ? null : committee.trim();
+    }
+
+    /**   治安主管单位  securitysupervisory   **/
+    public String getSecuritysupervisory() {
+        return securitysupervisory;
+    }
+
+    /**   治安主管单位  securitysupervisory   **/
+    public void setSecuritysupervisory(String securitysupervisory) {
+        this.securitysupervisory = securitysupervisory == null ? null : securitysupervisory.trim();
+    }
+
+    /**   办公电话  officephone   **/
+    public String getOfficephone() {
+        return officephone;
+    }
+
+    /**   办公电话  officephone   **/
+    public void setOfficephone(String officephone) {
+        this.officephone = officephone == null ? null : officephone.trim();
+    }
+
+    /**   传真电话  faxphone   **/
+    public String getFaxphone() {
+        return faxphone;
+    }
+
+    /**   传真电话  faxphone   **/
+    public void setFaxphone(String faxphone) {
+        this.faxphone = faxphone == null ? null : faxphone.trim();
+    }
+
+    /**   单位注册地址  registeraddress   **/
+    public String getRegisteraddress() {
+        return registeraddress;
+    }
+
+    /**   单位注册地址  registeraddress   **/
+    public void setRegisteraddress(String registeraddress) {
+        this.registeraddress = registeraddress == null ? null : registeraddress.trim();
+    }
+
+    /**   注册类型  registertype   **/
+    public String getRegistertype() {
+        return registertype;
+    }
+
+    /**   注册类型  registertype   **/
+    public void setRegistertype(String registertype) {
+        this.registertype = registertype == null ? null : registertype.trim();
+    }
+
+    /**   成立时间  establishtime   **/
+    public Date getEstablishtime() {
+        return establishtime;
+    }
+
+    /**   成立时间  establishtime   **/
+    public void setEstablishtime(Date establishtime) {
+        this.establishtime = establishtime;
+    }
+
+    /**   qq号码  qqnumber   **/
+    public String getQqnumber() {
+        return qqnumber;
+    }
+
+    /**   qq号码  qqnumber   **/
+    public void setQqnumber(String qqnumber) {
+        this.qqnumber = qqnumber == null ? null : qqnumber.trim();
+    }
+
+    /**   邮编  postcode   **/
+    public String getPostcode() {
+        return postcode;
+    }
+
+    /**   邮编  postcode   **/
+    public void setPostcode(String postcode) {
+        this.postcode = postcode == null ? null : postcode.trim();
+    }
+
+    /**   工房数量  roomnumber   **/
+    public Integer getRoomnumber() {
+        return roomnumber;
+    }
+
+    /**   工房数量  roomnumber   **/
+    public void setRoomnumber(Integer roomnumber) {
+        this.roomnumber = roomnumber;
+    }
+
+    /**   国民经济类型  economictype   **/
+    public String getEconomictype() {
+        return economictype;
+    }
+
+    /**   国民经济类型  economictype   **/
+    public void setEconomictype(String economictype) {
+        this.economictype = economictype == null ? null : economictype.trim();
+    }
+
+    /**   生产经营项目  productioncontent   **/
+    public String getProductioncontent() {
+        return productioncontent;
+    }
+
+    /**   生产经营项目  productioncontent   **/
+    public void setProductioncontent(String productioncontent) {
+        this.productioncontent = productioncontent == null ? null : productioncontent.trim();
+    }
+
+    /**   工商注册号  businessregisternumber   **/
+    public String getBusinessregisternumber() {
+        return businessregisternumber;
+    }
+
+    /**   工商注册号  businessregisternumber   **/
+    public void setBusinessregisternumber(String businessregisternumber) {
+        this.businessregisternumber = businessregisternumber == null ? null : businessregisternumber.trim();
+    }
+
+    /**   组织结构代码  organizationstructurecode   **/
+    public String getOrganizationstructurecode() {
+        return organizationstructurecode;
+    }
+
+    /**   组织结构代码  organizationstructurecode   **/
+    public void setOrganizationstructurecode(String organizationstructurecode) {
+        this.organizationstructurecode = organizationstructurecode == null ? null : organizationstructurecode.trim();
+    }
+
+    /**   有效期开始时间  validstarttime   **/
+    public Date getValidstarttime() {
+        return validstarttime;
+    }
+
+    /**   有效期开始时间  validstarttime   **/
+    public void setValidstarttime(Date validstarttime) {
+        this.validstarttime = validstarttime;
+    }
+
+    /**   有效期结束时间  validendtime   **/
+    public Date getValidendtime() {
+        return validendtime;
+    }
+
+    /**   有效期结束时间  validendtime   **/
+    public void setValidendtime(Date validendtime) {
+        this.validendtime = validendtime;
+    }
+
+    /**   从业人数  employeenumber   **/
+    public Integer getEmployeenumber() {
+        return employeenumber;
+    }
+
+    /**   从业人数  employeenumber   **/
+    public void setEmployeenumber(Integer employeenumber) {
+        this.employeenumber = employeenumber;
+    }
+
+    /**   是否缴纳安全责任险  ispaysafetyinsurance   **/
+    public Boolean getIspaysafetyinsurance() {
+        return ispaysafetyinsurance;
+    }
+
+    /**   是否缴纳安全责任险  ispaysafetyinsurance   **/
+    public void setIspaysafetyinsurance(Boolean ispaysafetyinsurance) {
+        this.ispaysafetyinsurance = ispaysafetyinsurance;
+    }
+
+    /**   保险合同号码(保单号)  insurancecontractnumber   **/
+    public String getInsurancecontractnumber() {
+        return insurancecontractnumber;
+    }
+
+    /**   保险合同号码(保单号)  insurancecontractnumber   **/
+    public void setInsurancecontractnumber(String insurancecontractnumber) {
+        this.insurancecontractnumber = insurancecontractnumber == null ? null : insurancecontractnumber.trim();
+    }
+
+    /**   投保金额  insureamount   **/
+    public Integer getInsureamount() {
+        return insureamount;
+    }
+
+    /**   投保金额  insureamount   **/
+    public void setInsureamount(Integer insureamount) {
+        this.insureamount = insureamount;
+    }
+
+    /**   投保有效期开始时间  insurestarttime   **/
+    public Date getInsurestarttime() {
+        return insurestarttime;
+    }
+
+    /**   投保有效期开始时间  insurestarttime   **/
+    public void setInsurestarttime(Date insurestarttime) {
+        this.insurestarttime = insurestarttime;
+    }
+
+    /**   投保有效期结束时间  insureendtime   **/
+    public Date getInsureendtime() {
+        return insureendtime;
+    }
+
+    /**   投保有效期结束时间  insureendtime   **/
+    public void setInsureendtime(Date insureendtime) {
+        this.insureendtime = insureendtime;
+    }
+
+    /**   是否有重大危险源  ismajorhazard   **/
+    public Boolean getIsmajorhazard() {
+        return ismajorhazard;
+    }
+
+    /**   是否有重大危险源  ismajorhazard   **/
+    public void setIsmajorhazard(Boolean ismajorhazard) {
+        this.ismajorhazard = ismajorhazard;
+    }
+
+    /**   是否有特种设备  isspecialequipment   **/
+    public Boolean getIsspecialequipment() {
+        return isspecialequipment;
+    }
+
+    /**   是否有特种设备  isspecialequipment   **/
+    public void setIsspecialequipment(Boolean isspecialequipment) {
+        this.isspecialequipment = isspecialequipment;
+    }
+
+    /**   是否有职业卫生信息  isoccupationalhealthinfo   **/
+    public Boolean getIsoccupationalhealthinfo() {
+        return isoccupationalhealthinfo;
+    }
+
+    /**   是否有职业卫生信息  isoccupationalhealthinfo   **/
+    public void setIsoccupationalhealthinfo(Boolean isoccupationalhealthinfo) {
+        this.isoccupationalhealthinfo = isoccupationalhealthinfo;
+    }
+
+    /**   是否有特种人员  isspecialpersonnel   **/
+    public Boolean getIsspecialpersonnel() {
+        return isspecialpersonnel;
+    }
+
+    /**   是否有特种人员  isspecialpersonnel   **/
+    public void setIsspecialpersonnel(Boolean isspecialpersonnel) {
+        this.isspecialpersonnel = isspecialpersonnel;
+    }
+
+    /**   自查记录周期  selfrecordingcycle   **/
+    public String getSelfrecordingcycle() {
+        return selfrecordingcycle;
+    }
+
+    public void setSelfrecordingcycle(String selfrecordingcycle) {
+        this.selfrecordingcycle = selfrecordingcycle;
+    }
+
+    /**   是否有上级企业  isparententerprise   **/
+    public Boolean getIsparententerprise() {
+        return isparententerprise;
+    }
+
+    /**   是否有上级企业  isparententerprise   **/
+    public void setIsparententerprise(Boolean isparententerprise) {
+        this.isparententerprise = isparententerprise;
+    }
+
+    /**   上级企业名称  parententerprisename   **/
+    public String getParententerprisename() {
+        return parententerprisename;
+    }
+
+    /**   上级企业名称  parententerprisename   **/
+    public void setParententerprisename(String parententerprisename) {
+        this.parententerprisename = parententerprisename == null ? null : parententerprisename.trim();
+    }
+
+    /**   更新用户  infoupdateby   **/
+    public Long getInfoupdateby() {
+        return infoupdateby;
+    }
+
+    /**   更新用户  infoupdateby   **/
+    public void setInfoupdateby(Long infoupdateby) {
+        this.infoupdateby = infoupdateby;
+    }
+
+    /**   创建用户  infocreateby   **/
+    public Long getInfocreateby() {
+        return infocreateby;
+    }
+
+    /**   创建用户  infocreateby   **/
+    public void setInfocreateby(Long infocreateby) {
+        this.infocreateby = infocreateby;
+    }
+
+    /**   法定代表人信息  legalrepresentative   **/
+    public String getLegalrepresentative() {
+        return legalrepresentative;
+    }
+
+    /**   法定代表人信息  legalrepresentative   **/
+    public void setLegalrepresentative(String legalrepresentative) {
+        this.legalrepresentative = legalrepresentative == null ? null : legalrepresentative.trim();
+    }
+
+    /**   主要负责人  mainprincipal   **/
+    public String getMainprincipal() {
+        return mainprincipal;
+    }
+
+    /**   主要负责人  mainprincipal   **/
+    public void setMainprincipal(String mainprincipal) {
+        this.mainprincipal = mainprincipal == null ? null : mainprincipal.trim();
+    }
+
+    /**   安全负责人  securityofficer   **/
+    public String getSecurityofficer() {
+        return securityofficer;
+    }
+
+    /**   安全负责人  securityofficer   **/
+    public void setSecurityofficer(String securityofficer) {
+        this.securityofficer = securityofficer == null ? null : securityofficer.trim();
+    }
+
+    /**   信息员  informationofficer   **/
+    public String getInformationofficer() {
+        return informationofficer;
+    }
+
+    /**   信息员  informationofficer   **/
+    public void setInformationofficer(String informationofficer) {
+        this.informationofficer = informationofficer == null ? null : informationofficer.trim();
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    /**   单位坐标  enterpriselocation   **/
+    public String getEnterpriselocation() {
+        return enterpriselocation;
+    }
+
+    /**   单位坐标  enterpriselocation   **/
+    public void setEnterpriselocation(String enterpriselocation) {
+        this.enterpriselocation = enterpriselocation == null ? null : enterpriselocation.trim();
+    }
+
+    /**   信息创建时间  infocreatetime   **/
+    public Date getInfocreatetime() {
+        return infocreatetime;
+    }
+
+    /**   信息创建时间  infocreatetime   **/
+    public void setInfocreatetime(Date infocreatetime) {
+        this.infocreatetime = infocreatetime;
+    }
+
+    /**   信息创建人  infocreatebyname   **/
+    public String getInfocreatebyname() {
+        return infocreatebyname;
+    }
+
+    /**   信息创建人  infocreatebyname   **/
+    public void setInfocreatebyname(String infocreatebyname) {
+        this.infocreatebyname = infocreatebyname == null ? null : infocreatebyname.trim();
+    }
+
+    /**   信息更新时间  infoupdatetime   **/
+    public Date getInfoupdatetime() {
+        return infoupdatetime;
+    }
+
+    /**   信息更新时间  infoupdatetime   **/
+    public void setInfoupdatetime(Date infoupdatetime) {
+        this.infoupdatetime = infoupdatetime;
+    }
+
+    /**   信息更信人  infoupdatebyname   **/
+    public String getInfoupdatebyname() {
+        return infoupdatebyname;
+    }
+
+    /**   信息更信人  infoupdatebyname   **/
+    public void setInfoupdatebyname(String infoupdatebyname) {
+        this.infoupdatebyname = infoupdatebyname == null ? null : infoupdatebyname.trim();
+    }
+
+    /**   分表标识  dividelogo   **/
+    public Byte getDividelogo() {
+        return dividelogo;
+    }
+
+    /**   分表标识  dividelogo   **/
+    public void setDividelogo(Byte dividelogo) {
+        this.dividelogo = dividelogo;
+    }
+
+    /**   更新字段  updatefields   **/
+    public String getUpdatefields() {
+        return updatefields;
+    }
+
+    /**   更新字段  updatefields   **/
+    public void setUpdatefields(String updatefields) {
+        this.updatefields = updatefields == null ? null : updatefields.trim();
+    }
+
+    /**   申请状态  applystatus   **/
+    public ApplyStatus getApplystatus() {
+        return applystatus;
+    }
+
+    /**   申请状态  applystatus   **/
+    public void setApplystatus(ApplyStatus applystatus) {
+        this.applystatus = applystatus;
+    }
+
+    /**   父id  parentid   **/
+    public Long getParentid() {
+        return parentid;
+    }
+
+    /**   父id  parentid   **/
+    public void setParentid(Long parentid) {
+        this.parentid = parentid;
+    }
+
+    /**   提出时间  applytime   **/
+    public Date getApplytime() {
+        return applytime;
+    }
+
+    /**   提出时间  applytime   **/
+    public void setApplytime(Date applytime) {
+        this.applytime = applytime;
+    }
+
+    /**   处理时间  processtime   **/
+    public Date getProcesstime() {
+        return processtime;
+    }
+
+    /**   处理时间  processtime   **/
+    public void setProcesstime(Date processtime) {
+        this.processtime = processtime;
+    }
+
+    /**   提出人id  applypersonid   **/
+    public Long getApplypersonid() {
+        return applypersonid;
+    }
+
+    /**   提出人id  applypersonid   **/
+    public void setApplypersonid(Long applypersonid) {
+        this.applypersonid = applypersonid;
+    }
+
+    /**   提出人名  applypersonname   **/
+    public String getApplypersonname() {
+        return applypersonname;
+    }
+
+    /**   提出人名  applypersonname   **/
+    public void setApplypersonname(String applypersonname) {
+        this.applypersonname = applypersonname == null ? null : applypersonname.trim();
+    }
+
+    /**   处理人id  processpersonid   **/
+    public Long getProcesspersonid() {
+        return processpersonid;
+    }
+
+    /**   处理人id  processpersonid   **/
+    public void setProcesspersonid(Long processpersonid) {
+        this.processpersonid = processpersonid;
+    }
+
+    /**   处理人名  processpersonname   **/
+    public String getProcesspersonname() {
+        return processpersonname;
+    }
+
+    /**   处理人名  processpersonname   **/
+    public void setProcesspersonname(String processpersonname) {
+        this.processpersonname = processpersonname == null ? null : processpersonname.trim();
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public Long getParententerpriseid() {
+        return parententerpriseid;
+    }
+
+    public void setParententerpriseid(Long parententerpriseid) {
+        this.parententerpriseid = parententerpriseid;
+    }
+
+    public CommitStatus getCommitstatus() {
+        return commitstatus;
+    }
+
+    public void setCommitstatus(CommitStatus commitstatus) {
+        this.commitstatus = commitstatus;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/EnterpriseDocument.java b/src/main/java/com/gk/firework/Domain/EnterpriseDocument.java
new file mode 100644
index 0000000..85c4121
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/EnterpriseDocument.java
@@ -0,0 +1,196 @@
+package com.gk.firework.Domain;
+
+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 com.fasterxml.jackson.annotation.JsonFormat;
+import com.gk.firework.Domain.Enum.DocumentType;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+@TableName("enterprisedocument")
+public class EnterpriseDocument implements Serializable {
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id  id **/
+    @TableId(type = IdType.AUTO)
+    /** 主键id  id **/
+    private Long id;
+
+    /** 制度名称  name **/
+    private String name;
+
+    /** 创建人id  createby **/
+    private Long createby;
+
+    /** 创建人name  createbyname **/
+    private String createbyname;
+
+    /** 更新人id  updateby **/
+    private Long updateby;
+
+    /** 更新人name  updatebyname **/
+    private String updatebyname;
+
+    /** 创建时间
+  createtime **/
+    private Date createtime;
+
+    /** 更新时间  updatetime **/
+    private Date updatetime;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /** 备注  memo **/
+    private String memo;
+
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
+    private Date settime;
+
+    /** 类型  type **/
+    private DocumentType type;
+
+    private Long enterpriseid;
+
+    @TableField(exist = false)
+    private List<EnterpriseResource> enterpriseResources;
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   制度名称  name   **/
+    public String getName() {
+        return name;
+    }
+
+    /**   制度名称  name   **/
+    public void setName(String name) {
+        this.name = name == null ? null : name.trim();
+    }
+
+    /**   创建人id  createby   **/
+    public Long getCreateby() {
+        return createby;
+    }
+
+    /**   创建人id  createby   **/
+    public void setCreateby(Long createby) {
+        this.createby = createby;
+    }
+
+    /**   创建人name  createbyname   **/
+    public String getCreatebyname() {
+        return createbyname;
+    }
+
+    /**   创建人name  createbyname   **/
+    public void setCreatebyname(String createbyname) {
+        this.createbyname = createbyname == null ? null : createbyname.trim();
+    }
+
+    /**   更新人id  updateby   **/
+    public Long getUpdateby() {
+        return updateby;
+    }
+
+    /**   更新人id  updateby   **/
+    public void setUpdateby(Long updateby) {
+        this.updateby = updateby;
+    }
+
+    /**   更新人name  updatebyname   **/
+    public String getUpdatebyname() {
+        return updatebyname;
+    }
+
+    /**   更新人name  updatebyname   **/
+    public void setUpdatebyname(String updatebyname) {
+        this.updatebyname = updatebyname == null ? null : updatebyname.trim();
+    }
+
+    /**   创建时间
+  createtime   **/
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    /**   创建时间
+  createtime   **/
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    /**   更新时间  updatetime   **/
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    /**   更新时间  updatetime   **/
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    /**   备注  memo   **/
+    public String getMemo() {
+        return memo;
+    }
+
+    /**   备注  memo   **/
+    public void setMemo(String memo) {
+        this.memo = memo == null ? null : memo.trim();
+    }
+
+    public DocumentType getType() {
+        return type;
+    }
+
+    public void setType(DocumentType type) {
+        this.type = type;
+    }
+
+    public List<EnterpriseResource> getEnterpriseResources() {
+        return enterpriseResources;
+    }
+
+    public void setEnterpriseResources(List<EnterpriseResource> enterpriseResources) {
+        this.enterpriseResources = enterpriseResources;
+    }
+
+    public Long getEnterpriseid() {
+        return enterpriseid;
+    }
+
+    public void setEnterpriseid(Long enterpriseid) {
+        this.enterpriseid = enterpriseid;
+    }
+
+    public Date getSettime() {
+        return settime;
+    }
+
+    public void setSettime(Date settime) {
+        this.settime = settime;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/EnterpriseFeed.java b/src/main/java/com/gk/firework/Domain/EnterpriseFeed.java
new file mode 100644
index 0000000..8f9659e
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/EnterpriseFeed.java
@@ -0,0 +1,145 @@
+package com.gk.firework.Domain;
+
+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 com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+@TableName("enterprisefeed")
+public class EnterpriseFeed implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id  id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 反馈内容  content **/
+    private String content;
+
+    /** 创建人(上传人)  createby **/
+    private Long createby;
+
+    /** 创建时间(上传时间)  createtime **/
+    private Date createtime;
+
+    /** 来源  from **/
+    private String source;
+
+    /** 创建时间  enterpriseid **/
+    private Long enterpriseid;
+
+    /** 创建时间(上传时间)  findTime **/
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
+    private Date findtime;
+    //创建人
+    private String createbyname;
+    //有效标识
+    private Boolean validflag;
+
+    @TableField(exist = false)
+    private List<EnterpriseResource> enterpriseResources;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   反馈内容  content   **/
+    public String getContent() {
+        return content;
+    }
+
+    /**   反馈内容  content   **/
+    public void setContent(String content) {
+        this.content = content == null ? null : content.trim();
+    }
+
+    /**   创建人(上传人)  createby   **/
+    public Long getCreateby() {
+        return createby;
+    }
+
+    /**   创建人(上传人)  createby   **/
+    public void setCreateby(Long createby) {
+        this.createby = createby;
+    }
+
+    /**   创建时间(上传时间)  createtime   **/
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    /**   创建时间(上传时间)  createtime   **/
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+
+
+    /**   创建时间  enterpriseid   **/
+    public Long getEnterpriseid() {
+        return enterpriseid;
+    }
+
+    /**   创建时间  enterpriseid   **/
+    public void setEnterpriseid(Long enterpriseid) {
+        this.enterpriseid = enterpriseid;
+    }
+
+
+    public List<EnterpriseResource> getEnterpriseResources() {
+        return enterpriseResources;
+    }
+
+    public void setEnterpriseResources(List<EnterpriseResource> enterpriseResources) {
+        this.enterpriseResources = enterpriseResources;
+    }
+
+
+
+    public String getCreatebyname() {
+        return createbyname;
+    }
+
+    public void setCreatebyname(String createbyname) {
+        this.createbyname = createbyname;
+    }
+
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    public String getSource() {
+        return source;
+    }
+
+    public void setSource(String source) {
+        this.source = source;
+    }
+
+    public Date getFindtime() {
+        return findtime;
+    }
+
+    public void setFindtime(Date findtime) {
+        this.findtime = findtime;
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Domain/EnterpriseLicense.java b/src/main/java/com/gk/firework/Domain/EnterpriseLicense.java
new file mode 100644
index 0000000..5f6c10d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/EnterpriseLicense.java
@@ -0,0 +1,229 @@
+package com.gk.firework.Domain;
+
+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 com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+@TableName("enterpriselicense")
+public class EnterpriseLicense implements Serializable {
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id  id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 许可证编号  licensenumber **/
+    private String licensenumber;
+
+    /** 许可证名称  licensename **/
+    private String licensename;
+
+    /** 发证机关  authority **/
+    private String authority;
+
+    /** 许可范围  range **/
+    private String ranges;
+
+    /** 有效开始时间  validstarttime **/
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
+    private Date validstarttime;
+
+    /**   validendtime **/
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
+    private Date validendtime;
+
+    /**   图片地址 **/
+    private String imgurl;
+
+    /** 企业信息id  enterpriseid **/
+    private Long enterpriseid;
+
+    /** 创建人id  createby **/
+    private Long createby;
+
+    /** 创建人name  createbyname **/
+    private String createbyname;
+
+    /** 更新人id  updateby **/
+    private Long updateby;
+
+    /** 更新人name  updatebyname **/
+    private String updatebyname;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    private Date updatetime;
+
+    private Date createtime;
+
+    private List<EnterpriseResource> enterpriseResources;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   许可证编号  licensenumber   **/
+    public String getLicensenumber() {
+        return licensenumber;
+    }
+
+    /**   许可证编号  licensenumber   **/
+    public void setLicensenumber(String licensenumber) {
+        this.licensenumber = licensenumber == null ? null : licensenumber.trim();
+    }
+
+    /**   许可证名称  licensename   **/
+    public String getLicensename() {
+        return licensename;
+    }
+
+    /**   许可证名称  licensename   **/
+    public void setLicensename(String licensename) {
+        this.licensename = licensename == null ? null : licensename.trim();
+    }
+
+    /**   发证机关  authority   **/
+    public String getAuthority() {
+        return authority;
+    }
+
+    /**   发证机关  authority   **/
+    public void setAuthority(String authority) {
+        this.authority = authority == null ? null : authority.trim();
+    }
+
+    public String getRanges() {
+        return ranges;
+    }
+
+    public void setRanges(String ranges) {
+        this.ranges = ranges;
+    }
+
+    /**   有效开始时间  validstarttime   **/
+    public Date getValidstarttime() {
+        return validstarttime;
+    }
+
+    /**   有效开始时间  validstarttime   **/
+    public void setValidstarttime(Date validstarttime) {
+        this.validstarttime = validstarttime;
+    }
+
+    /**     validendtime   **/
+    public Date getValidendtime() {
+        return validendtime;
+    }
+
+    /**     validendtime   **/
+    public void setValidendtime(Date validendtime) {
+        this.validendtime = validendtime;
+    }
+
+    /**   企业信息id  enterpriseid   **/
+    public Long getEnterpriseid() {
+        return enterpriseid;
+    }
+
+    /**   企业信息id  enterpriseid   **/
+    public void setEnterpriseid(Long enterpriseid) {
+        this.enterpriseid = enterpriseid;
+    }
+
+    /**   创建人id  createby   **/
+    public Long getCreateby() {
+        return createby;
+    }
+
+    /**   创建人id  createby   **/
+    public void setCreateby(Long createby) {
+        this.createby = createby;
+    }
+
+    /**   创建人name  createbyname   **/
+    public String getCreatebyname() {
+        return createbyname;
+    }
+
+    /**   创建人name  createbyname   **/
+    public void setCreatebyname(String createbyname) {
+        this.createbyname = createbyname == null ? null : createbyname.trim();
+    }
+
+    /**   更新人id  updateby   **/
+    public Long getUpdateby() {
+        return updateby;
+    }
+
+    /**   更新人id  updateby   **/
+    public void setUpdateby(Long updateby) {
+        this.updateby = updateby;
+    }
+
+    /**   更新人name  updatebyname   **/
+    public String getUpdatebyname() {
+        return updatebyname;
+    }
+
+    /**   更新人name  updatebyname   **/
+    public void setUpdatebyname(String updatebyname) {
+        this.updatebyname = updatebyname == null ? null : updatebyname.trim();
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    public String getImgurl() {
+        return imgurl;
+    }
+
+    public void setImgurl(String imgurl) {
+        this.imgurl = imgurl;
+    }
+
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    public List<EnterpriseResource> getEnterpriseResources() {
+        return enterpriseResources;
+    }
+
+    public void setEnterpriseResources(List<EnterpriseResource> enterpriseResources) {
+        this.enterpriseResources = enterpriseResources;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/EnterprisePerson.java b/src/main/java/com/gk/firework/Domain/EnterprisePerson.java
new file mode 100644
index 0000000..038a798
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/EnterprisePerson.java
@@ -0,0 +1,251 @@
+package com.gk.firework.Domain;
+
+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 com.fasterxml.jackson.annotation.JsonFormat;
+import com.gk.firework.Domain.Enum.PersonnelCategory;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+@TableName("enterpriseperson")
+public class EnterprisePerson implements Serializable {
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    /** 主键id  id **/
+    private Long id;
+
+    /** 姓名  name **/
+    private String name;
+
+    /** 职务  post **/
+    private String post;
+
+    /** 证书编号  number **/
+    private String number;
+
+    /** 有效开始时间  validstarttime **/
+    @JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    private Date validstarttime;
+
+    /** 有效结束时间  validendtime **/
+    @JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd")
+    private Date validendtime;
+
+    /** 备注  memo **/
+    private String memo;
+
+    /** 创建时间  createtime **/
+    private Date createtime;
+
+    /** 创建人id  createby **/
+    private Long createby;
+
+    /** 创建人name  createbyname **/
+    private String createbyname;
+
+    /** 更新时间  updatetime **/
+    private Date updatetime;
+
+    /** 更新人id  updateby **/
+    private Long updateby;
+
+    /** 更信人name  updatebyname **/
+    private String updatebyname;
+
+    /** 企业id  enterpriseid **/
+    private Long enterpriseid;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /** 人员类型  type **/
+    private PersonnelCategory type;
+
+    /** 其他属性  other **/
+    private Boolean isreview;
+
+    @TableField(exist = false)
+    private List<EnterpriseResource> enterpriseResources;
+
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   姓名  name   **/
+    public String getName() {
+        return name;
+    }
+
+    /**   姓名  name   **/
+    public void setName(String name) {
+        this.name = name == null ? null : name.trim();
+    }
+
+    /**   职务  post   **/
+    public String getPost() {
+        return post;
+    }
+
+    /**   职务  post   **/
+    public void setPost(String post) {
+        this.post = post == null ? null : post.trim();
+    }
+
+    /**   证书编号  number   **/
+    public String getNumber() {
+        return number;
+    }
+
+    /**   证书编号  number   **/
+    public void setNumber(String number) {
+        this.number = number == null ? null : number.trim();
+    }
+
+    /**   有效开始时间  validstarttime   **/
+    public Date getValidstarttime() {
+        return validstarttime;
+    }
+
+    /**   有效开始时间  validstarttime   **/
+    public void setValidstarttime(Date validstarttime) {
+        this.validstarttime = validstarttime;
+    }
+
+    /**   有效结束时间  validendtime   **/
+    public Date getValidendtime() {
+        return validendtime;
+    }
+
+    /**   有效结束时间  validendtime   **/
+    public void setValidendtime(Date validendtime) {
+        this.validendtime = validendtime;
+    }
+
+    /**   备注  memo   **/
+    public String getMemo() {
+        return memo;
+    }
+
+    /**   备注  memo   **/
+    public void setMemo(String memo) {
+        this.memo = memo == null ? null : memo.trim();
+    }
+
+    /**   创建时间  createtime   **/
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    /**   创建时间  createtime   **/
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    /**   创建人id  createby   **/
+    public Long getCreateby() {
+        return createby;
+    }
+
+    /**   创建人id  createby   **/
+    public void setCreateby(Long createby) {
+        this.createby = createby;
+    }
+
+    /**   创建人name  createbyname   **/
+    public String getCreatebyname() {
+        return createbyname;
+    }
+
+    /**   创建人name  createbyname   **/
+    public void setCreatebyname(String createbyname) {
+        this.createbyname = createbyname == null ? null : createbyname.trim();
+    }
+
+    /**   更新时间  updatetime   **/
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    /**   更新时间  updatetime   **/
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    /**   更新人id  updateby   **/
+    public Long getUpdateby() {
+        return updateby;
+    }
+
+    /**   更新人id  updateby   **/
+    public void setUpdateby(Long updateby) {
+        this.updateby = updateby;
+    }
+
+    /**   更信人name  updatebyname   **/
+    public String getUpdatebyname() {
+        return updatebyname;
+    }
+
+    /**   更信人name  updatebyname   **/
+    public void setUpdatebyname(String updatebyname) {
+        this.updatebyname = updatebyname == null ? null : updatebyname.trim();
+    }
+
+    /**   企业id  enterpriseid   **/
+    public Long getEnterpriseid() {
+        return enterpriseid;
+    }
+
+    /**   企业id  enterpriseid   **/
+    public void setEnterpriseid(Long enterpriseid) {
+        this.enterpriseid = enterpriseid;
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    public PersonnelCategory getType() {
+        return type;
+    }
+
+    public void setType(PersonnelCategory type) {
+        this.type = type;
+    }
+
+    public Boolean getIsreview() {
+        return isreview;
+    }
+
+    public void setIsreview(Boolean isreview) {
+        this.isreview = isreview;
+    }
+
+    public List<EnterpriseResource> getEnterpriseResources() {
+        return enterpriseResources;
+    }
+
+    public void setEnterpriseResources(List<EnterpriseResource> enterpriseResources) {
+        this.enterpriseResources = enterpriseResources;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/EnterpriseResource.java b/src/main/java/com/gk/firework/Domain/EnterpriseResource.java
new file mode 100644
index 0000000..4ddab95
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/EnterpriseResource.java
@@ -0,0 +1,172 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.util.Date;
+
+@TableName("enterpriseresource")
+public class EnterpriseResource implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    /** 主键id  id **/
+    private Long id;
+
+    /** 区分表  tabletype **/
+    private String tabletype;
+
+    /** 文件路径  url **/
+    private String url;
+
+    /** 文件名  filename **/
+    private String filename;
+
+    /** 创建时间  createtime **/
+    private Date createtime;
+
+    /** 创建人id  createby **/
+    private Long createby;
+
+    /** 创建人name  createbyname **/
+    private String createbyname;
+
+    /** 更新时间  updatetime **/
+    private Date updatetime;
+
+    /** 更新人id  updateby **/
+    private Long updateby;
+
+    /** 更信人name  updatebyname **/
+    private String updatebyname;
+
+    /** 企业id  enterpriseid **/
+    private Long belongid;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   区分表  tabletype   **/
+    public String getTabletype() {
+        return tabletype;
+    }
+
+    /**   区分表  tabletype   **/
+    public void setTabletype(String tabletype) {
+        this.tabletype = tabletype == null ? null : tabletype.trim();
+    }
+
+    /**   文件路径  url   **/
+    public String getUrl() {
+        return url;
+    }
+
+    /**   文件路径  url   **/
+    public void setUrl(String url) {
+        this.url = url == null ? null : url.trim();
+    }
+
+    /**   文件名  filename   **/
+    public String getFilename() {
+        return filename;
+    }
+
+    /**   文件名  filename   **/
+    public void setFilename(String filename) {
+        this.filename = filename == null ? null : filename.trim();
+    }
+
+    /**   创建时间  createtime   **/
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    /**   创建时间  createtime   **/
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    /**   创建人id  createby   **/
+    public Long getCreateby() {
+        return createby;
+    }
+
+    /**   创建人id  createby   **/
+    public void setCreateby(Long createby) {
+        this.createby = createby;
+    }
+
+    /**   创建人name  createbyname   **/
+    public String getCreatebyname() {
+        return createbyname;
+    }
+
+    /**   创建人name  createbyname   **/
+    public void setCreatebyname(String createbyname) {
+        this.createbyname = createbyname == null ? null : createbyname.trim();
+    }
+
+    /**   更新时间  updatetime   **/
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    /**   更新时间  updatetime   **/
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    /**   更新人id  updateby   **/
+    public Long getUpdateby() {
+        return updateby;
+    }
+
+    /**   更新人id  updateby   **/
+    public void setUpdateby(Long updateby) {
+        this.updateby = updateby;
+    }
+
+    /**   更信人name  updatebyname   **/
+    public String getUpdatebyname() {
+        return updatebyname;
+    }
+
+    /**   更信人name  updatebyname   **/
+    public void setUpdatebyname(String updatebyname) {
+        this.updatebyname = updatebyname == null ? null : updatebyname.trim();
+    }
+
+    public Long getBelongid() {
+        return belongid;
+    }
+
+    public void setBelongid(Long belongid) {
+        this.belongid = belongid;
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/EnterpriseStaff.java b/src/main/java/com/gk/firework/Domain/EnterpriseStaff.java
new file mode 100644
index 0000000..79bfd1c
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/EnterpriseStaff.java
@@ -0,0 +1,174 @@
+package com.gk.firework.Domain;
+
+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 com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@TableName("enterprisestaff")
+public class EnterpriseStaff implements Serializable {
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id  id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 人员类型  type **/
+    private String type;
+
+    /** 姓名  name **/
+    private String name;
+
+    /** 职务  post **/
+    private String post;
+
+    /** 身份证号  identify **/
+    private String identify;
+
+    /** 手机号  phone **/
+    private String phone;
+
+    /** 合格证编号  number **/
+    private String number;
+
+    /** 有效开始时间  validstarttime **/
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
+    private Date validstarttime;
+
+    /** 有效结束时间  validendtime **/
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
+    private Date validendtime;
+
+    /** 企业基本信息id  belongid **/
+    private Long belongid;
+
+    /** 企业名称  belongname **/
+    private String belongname;
+
+    /** 办公电话 **/
+    private String officephone;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   人员类型  type   **/
+    public String getType() {
+        return type;
+    }
+
+    /**   人员类型  type   **/
+    public void setType(String type) {
+        this.type = type == null ? null : type.trim();
+    }
+
+    /**   姓名  name   **/
+    public String getName() {
+        return name;
+    }
+
+    /**   姓名  name   **/
+    public void setName(String name) {
+        this.name = name == null ? null : name.trim();
+    }
+
+    /**   职务  post   **/
+    public String getPost() {
+        return post;
+    }
+
+    /**   职务  post   **/
+    public void setPost(String post) {
+        this.post = post == null ? null : post.trim();
+    }
+
+    /**   身份证号  identify   **/
+    public String getIdentify() {
+        return identify;
+    }
+
+    /**   身份证号  identify   **/
+    public void setIdentify(String identify) {
+        this.identify = identify == null ? null : identify.trim();
+    }
+
+    /**   手机号  phone   **/
+    public String getPhone() {
+        return phone;
+    }
+
+    /**   手机号  phone   **/
+    public void setPhone(String phone) {
+        this.phone = phone == null ? null : phone.trim();
+    }
+
+    /**   合格证编号  number   **/
+    public String getNumber() {
+        return number;
+    }
+
+    /**   合格证编号  number   **/
+    public void setNumber(String number) {
+        this.number = number == null ? null : number.trim();
+    }
+
+    /**   有效开始时间  validstarttime   **/
+    public Date getValidstarttime() {
+        return validstarttime;
+    }
+
+    /**   有效开始时间  validstarttime   **/
+    public void setValidstarttime(Date validstarttime) {
+        this.validstarttime = validstarttime;
+    }
+
+    /**   有效结束时间  validendtime   **/
+    public Date getValidendtime() {
+        return validendtime;
+    }
+
+    /**   有效结束时间  validendtime   **/
+    public void setValidendtime(Date validendtime) {
+        this.validendtime = validendtime;
+    }
+
+    /**   企业基本信息id  belongid   **/
+    public Long getBelongid() {
+        return belongid;
+    }
+
+    /**   企业基本信息id  belongid   **/
+    public void setBelongid(Long belongid) {
+        this.belongid = belongid;
+    }
+
+    /**   企业名称  belongname   **/
+    public String getBelongname() {
+        return belongname;
+    }
+
+    /**   企业名称  belongname   **/
+    public void setBelongname(String belongname) {
+        this.belongname = belongname == null ? null : belongname.trim();
+    }
+
+    public String getOfficephone() {
+        return officephone;
+    }
+
+    public void setOfficephone(String officephone) {
+        this.officephone = officephone;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/EnterpriseStandardization.java b/src/main/java/com/gk/firework/Domain/EnterpriseStandardization.java
new file mode 100644
index 0000000..8814386
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/EnterpriseStandardization.java
@@ -0,0 +1,235 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+@TableName("enterprisestandardization")
+public class EnterpriseStandardization implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id  id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 标准化级别  level **/
+    private String level;
+
+    /** 证书编号  licensenumber **/
+    private String licensenumber;
+
+    /** 评审单位  reviewunit **/
+    private String reviewunit;
+
+    /** 发牌单位  licensingunit **/
+    private String licensingunit;
+
+    /** 考核得分  score **/
+    private BigDecimal score;
+
+    /** 有效开始时间  validstarttime **/
+    private Date validstarttime;
+
+    /** 有效结束时间  validendtime **/
+    private Date validendtime;
+
+    /** 创建时间  createtime **/
+    private Date createtime;
+
+    /** 创建人id  createby **/
+    private Long createby;
+
+    /** 创建人name  createbyname **/
+    private String createbyname;
+
+    /** 更新时间  updatetime **/
+    private Date updatetime;
+
+    /** 更新人id  updateby **/
+    private Long updateby;
+
+    /** 更信人name  updatebyname **/
+    private String updatebyname;
+
+    /** 企业id  enterpriseid **/
+    private Long enterpriseid;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    @TableField(exist = false)
+    private List<EnterpriseResource> enterpriseResources;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   标准化级别  level   **/
+    public String getLevel() {
+        return level;
+    }
+
+    /**   标准化级别  level   **/
+    public void setLevel(String level) {
+        this.level = level == null ? null : level.trim();
+    }
+
+    /**   证书编号  licensenumber   **/
+    public String getLicensenumber() {
+        return licensenumber;
+    }
+
+    /**   证书编号  licensenumber   **/
+    public void setLicensenumber(String licensenumber) {
+        this.licensenumber = licensenumber == null ? null : licensenumber.trim();
+    }
+
+    /**   评审单位  reviewunit   **/
+    public String getReviewunit() {
+        return reviewunit;
+    }
+
+    /**   评审单位  reviewunit   **/
+    public void setReviewunit(String reviewunit) {
+        this.reviewunit = reviewunit == null ? null : reviewunit.trim();
+    }
+
+    /**   发牌单位  licensingunit   **/
+    public String getLicensingunit() {
+        return licensingunit;
+    }
+
+    /**   发牌单位  licensingunit   **/
+    public void setLicensingunit(String licensingunit) {
+        this.licensingunit = licensingunit == null ? null : licensingunit.trim();
+    }
+
+    /**   考核得分  score   **/
+    public BigDecimal getScore() {
+        return score;
+    }
+
+    /**   考核得分  score   **/
+    public void setScore(BigDecimal score) {
+        this.score = score;
+    }
+
+    /**   有效开始时间  validstarttime   **/
+    public Date getValidstarttime() {
+        return validstarttime;
+    }
+
+    /**   有效开始时间  validstarttime   **/
+    public void setValidstarttime(Date validstarttime) {
+        this.validstarttime = validstarttime;
+    }
+
+    /**   有效结束时间  validendtime   **/
+    public Date getValidendtime() {
+        return validendtime;
+    }
+
+    /**   有效结束时间  validendtime   **/
+    public void setValidendtime(Date validendtime) {
+        this.validendtime = validendtime;
+    }
+
+    /**   创建时间  createtime   **/
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    /**   创建时间  createtime   **/
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    /**   创建人id  createby   **/
+    public Long getCreateby() {
+        return createby;
+    }
+
+    /**   创建人id  createby   **/
+    public void setCreateby(Long createby) {
+        this.createby = createby;
+    }
+
+    /**   创建人name  createbyname   **/
+    public String getCreatebyname() {
+        return createbyname;
+    }
+
+    /**   创建人name  createbyname   **/
+    public void setCreatebyname(String createbyname) {
+        this.createbyname = createbyname == null ? null : createbyname.trim();
+    }
+
+    /**   更新时间  updatetime   **/
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    /**   更新时间  updatetime   **/
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    /**   更新人id  updateby   **/
+    public Long getUpdateby() {
+        return updateby;
+    }
+
+    /**   更新人id  updateby   **/
+    public void setUpdateby(Long updateby) {
+        this.updateby = updateby;
+    }
+
+    /**   更信人name  updatebyname   **/
+    public String getUpdatebyname() {
+        return updatebyname;
+    }
+
+    /**   更信人name  updatebyname   **/
+    public void setUpdatebyname(String updatebyname) {
+        this.updatebyname = updatebyname == null ? null : updatebyname.trim();
+    }
+
+    public Long getEnterpriseid() {
+        return enterpriseid;
+    }
+
+    public void setEnterpriseid(Long enterpriseid) {
+        this.enterpriseid = enterpriseid;
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    public List<EnterpriseResource> getEnterpriseResources() {
+        return enterpriseResources;
+    }
+
+    public void setEnterpriseResources(List<EnterpriseResource> enterpriseResources) {
+        this.enterpriseResources = enterpriseResources;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/EnterpriseWarehouse.java b/src/main/java/com/gk/firework/Domain/EnterpriseWarehouse.java
new file mode 100644
index 0000000..7b6fbaf
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/EnterpriseWarehouse.java
@@ -0,0 +1,239 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.*;
+
+@TableName("enterprisewarehouse")
+public class EnterpriseWarehouse implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id  id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 栋号  bulidingnumber **/
+    private String bulidingnumber;
+
+    /** 危险等级  dangerlevel **/
+    private String dangerlevel;
+
+    /** 面积(m2)  area **/
+    private BigDecimal area;
+
+    private BigDecimal medicinelimits;
+
+    private String safetypersonphone;
+
+    /** 限制作业人数  limit **/
+    private Integer limits;
+
+    /** 安全责任人  safetyperson **/
+    private String safetyperson;
+
+    /** 企业id  enterpriseid **/
+    private Long enterpriseid;
+
+    /** 创建时间  createtime **/
+    private Date createtime;
+
+    /** 创建人id  createby **/
+    private Long createby;
+
+    /** 创建人name  createbyname **/
+    private String createbyname;
+
+    /** 更新时间  updatetime **/
+    private Date updatetime;
+
+    /** 更新人id  updateby **/
+    private Long updateby;
+
+    /** 更信人name  updatebyname **/
+    private String updatebyname;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /** 可以容纳库存   **/
+    private Integer holdinventory;
+
+    @TableField(exist = false)
+    private List<EnterpriseResource> enterpriseResources;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   栋号  bulidingnumber   **/
+    public String getBulidingnumber() {
+        return bulidingnumber;
+    }
+    /**   栋号  bulidingnumber   **/
+    public void setBulidingnumber(String bulidingnumber) {
+        this.bulidingnumber = bulidingnumber;
+    }
+
+    /**   危险等级  dangerlevel   **/
+    public String getDangerlevel() {
+        return dangerlevel;
+    }
+
+    /**   危险等级  dangerlevel   **/
+    public void setDangerlevel(String dangerlevel) {
+        this.dangerlevel = dangerlevel == null ? null : dangerlevel.trim();
+    }
+
+    public BigDecimal getArea() {
+        return area;
+    }
+
+    public void setArea(BigDecimal area) {
+        this.area = area;
+    }
+
+    public Integer getLimits() {
+        return limits;
+    }
+
+    public void setLimits(Integer limits) {
+        this.limits = limits;
+    }
+
+    /**   安全责任人  safetyperson   **/
+    public String getSafetyperson() {
+        return safetyperson;
+    }
+
+    /**   安全责任人  safetyperson   **/
+    public void setSafetyperson(String safetyperson) {
+        this.safetyperson = safetyperson == null ? null : safetyperson.trim();
+    }
+
+    /**   企业id  enterpriseid   **/
+    public Long getEnterpriseid() {
+        return enterpriseid;
+    }
+
+    /**   企业id  enterpriseid   **/
+    public void setEnterpriseid(Long enterpriseid) {
+        this.enterpriseid = enterpriseid;
+    }
+
+    /**   创建时间  createtime   **/
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    /**   创建时间  createtime   **/
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    /**   创建人id  createby   **/
+    public Long getCreateby() {
+        return createby;
+    }
+
+    /**   创建人id  createby   **/
+    public void setCreateby(Long createby) {
+        this.createby = createby;
+    }
+
+    /**   创建人name  createbyname   **/
+    public String getCreatebyname() {
+        return createbyname;
+    }
+
+    /**   创建人name  createbyname   **/
+    public void setCreatebyname(String createbyname) {
+        this.createbyname = createbyname == null ? null : createbyname.trim();
+    }
+
+    /**   更新时间  updatetime   **/
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    /**   更新时间  updatetime   **/
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    /**   更新人id  updateby   **/
+    public Long getUpdateby() {
+        return updateby;
+    }
+
+    /**   更新人id  updateby   **/
+    public void setUpdateby(Long updateby) {
+        this.updateby = updateby;
+    }
+
+    /**   更信人name  updatebyname   **/
+    public String getUpdatebyname() {
+        return updatebyname;
+    }
+
+    /**   更信人name  updatebyname   **/
+    public void setUpdatebyname(String updatebyname) {
+        this.updatebyname = updatebyname == null ? null : updatebyname.trim();
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    public List<EnterpriseResource> getEnterpriseResources() {
+        return enterpriseResources;
+    }
+
+    public void setEnterpriseResources(List<EnterpriseResource> enterpriseResources) {
+        this.enterpriseResources = enterpriseResources;
+    }
+
+
+    public Integer getHoldinventory() {
+        return holdinventory;
+    }
+
+    public void setHoldinventory(Integer holdinventory) {
+        this.holdinventory = holdinventory;
+    }
+
+
+    public BigDecimal getMedicinelimits() {
+        return medicinelimits;
+    }
+
+    public void setMedicinelimits(BigDecimal medicinelimits) {
+        this.medicinelimits = medicinelimits;
+    }
+
+    public String getSafetypersonphone() {
+        return safetypersonphone;
+    }
+
+    public void setSafetypersonphone(String safetypersonphone) {
+        this.safetypersonphone = safetypersonphone;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/EntryDetailInfo.java b/src/main/java/com/gk/firework/Domain/EntryDetailInfo.java
new file mode 100644
index 0000000..bc60a3c
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/EntryDetailInfo.java
@@ -0,0 +1,165 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.util.Date;
+
+@TableName("entrydetail")
+public class EntryDetailInfo implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /**   id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 入库单编码  entryorder **/
+    private String entryorder;
+
+    /** 流向码(19位或者22位)  directioncode **/
+    private String directioncode;
+
+    /** 商品编码  itemcode **/
+    private String itemcode;
+
+    /** 商品名称  productname **/
+    private String productname;
+
+    /** 数量:19位流向码为1;22位流向码为后三位表示的数量  num **/
+    private Integer num;
+
+    /** 包装码  boxcode **/
+    private String boxcode;
+
+    /** 生产厂家  manufacturer **/
+    private String manufacturer;
+
+    /** 创建时间  createddate **/
+    private Date createddate;
+
+    /** 更新时间  modifieddate **/
+    private Date modifieddate;
+
+    private String createdby;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   入库单编码  entryorder   **/
+    public String getEntryorder() {
+        return entryorder;
+    }
+
+    /**   入库单编码  entryorder   **/
+    public void setEntryorder(String entryorder) {
+        this.entryorder = entryorder == null ? null : entryorder.trim();
+    }
+
+    /**   流向码(19位或者22位)  directioncode   **/
+    public String getDirectioncode() {
+        return directioncode;
+    }
+
+    /**   流向码(19位或者22位)  directioncode   **/
+    public void setDirectioncode(String directioncode) {
+        this.directioncode = directioncode == null ? null : directioncode.trim();
+    }
+
+    /**   商品名称  productname   **/
+    public String getProductname() {
+        return productname;
+    }
+
+    /**   商品名称  productname   **/
+    public void setProductname(String productname) {
+        this.productname = productname == null ? null : productname.trim();
+    }
+
+    /**   包装码  boxcode   **/
+    public String getBoxcode() {
+        return boxcode;
+    }
+
+    /**   包装码  boxcode   **/
+    public void setBoxcode(String boxcode) {
+        this.boxcode = boxcode == null ? null : boxcode.trim();
+    }
+
+    /**   生产厂家  manufacturer   **/
+    public String getManufacturer() {
+        return manufacturer;
+    }
+
+    /**   生产厂家  manufacturer   **/
+    public void setManufacturer(String manufacturer) {
+        this.manufacturer = manufacturer == null ? null : manufacturer.trim();
+    }
+
+    /**   创建时间  createddate   **/
+    public Date getCreateddate() {
+        return createddate;
+    }
+
+    /**   创建时间  createddate   **/
+    public void setCreateddate(Date createddate) {
+        this.createddate = createddate;
+    }
+
+    /**   更新时间  modifieddate   **/
+    public Date getModifieddate() {
+        return modifieddate;
+    }
+
+    /**   更新时间  modifieddate   **/
+    public void setModifieddate(Date modifieddate) {
+        this.modifieddate = modifieddate;
+    }
+
+    public String getItemcode() {
+        return itemcode;
+    }
+
+    public void setItemcode(String itemcode) {
+        this.itemcode = itemcode;
+    }
+
+    public Integer getNum() {
+        return num;
+    }
+
+    public void setNum(Integer num) {
+        this.num = num;
+    }
+
+    public String getCreatedby() {
+        return createdby;
+    }
+
+    public void setCreatedby(String createdby) {
+        this.createdby = createdby;
+    }
+
+    public EntryDetailInfo() {
+    }
+
+    public EntryDetailInfo(String entryorder, String directioncode, String itemcode, String productname, String manufacturer, Date createddate, String createdby) {
+        this.entryorder = entryorder;
+        this.directioncode = directioncode;
+        this.itemcode = itemcode;
+        this.productname = productname;
+        this.manufacturer = manufacturer;
+        this.createddate = createddate;
+        this.createdby = createdby;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/EntryOrderInfo.java b/src/main/java/com/gk/firework/Domain/EntryOrderInfo.java
new file mode 100644
index 0000000..0eedc36
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/EntryOrderInfo.java
@@ -0,0 +1,171 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.util.Date;
+
+@TableName("entryorder")
+public class EntryOrderInfo implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /**   id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 入库单号  code **/
+    private String code;
+
+    /** 创建人  createdby **/
+    private String createdby;
+
+    /** 创建时间  createddate **/
+    private Date createddate;
+
+    /** 修改人  modifiedby **/
+    private String modifiedby;
+
+    /** 修改时间  modifieddate **/
+    private Date modifieddate;
+
+    /** 入库时间  entrydate **/
+    private Date entrydate;
+
+    /** 入库单品数量  num **/
+    private Integer num;
+
+    /** 运输证  transportcert **/
+    private String transportcert;
+
+    /** 入库单位  unit **/
+    private String unit;
+
+    /** 入库类型(1.常规入库;2.退货入库)  type **/
+    private Byte type;
+
+    /** 企业单位编号  companynumber **/
+    private String companynumber;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   入库单号  code   **/
+    public String getCode() {
+        return code;
+    }
+
+    /**   入库单号  code   **/
+    public void setCode(String code) {
+        this.code = code == null ? null : code.trim();
+    }
+
+    /**   创建人  createdby   **/
+    public String getCreatedby() {
+        return createdby;
+    }
+
+    /**   创建人  createdby   **/
+    public void setCreatedby(String createdby) {
+        this.createdby = createdby == null ? null : createdby.trim();
+    }
+
+    /**   创建时间  createddate   **/
+    public Date getCreateddate() {
+        return createddate;
+    }
+
+    /**   创建时间  createddate   **/
+    public void setCreateddate(Date createddate) {
+        this.createddate = createddate;
+    }
+
+    /**   修改人  modifiedby   **/
+    public String getModifiedby() {
+        return modifiedby;
+    }
+
+    /**   修改人  modifiedby   **/
+    public void setModifiedby(String modifiedby) {
+        this.modifiedby = modifiedby == null ? null : modifiedby.trim();
+    }
+
+    /**   修改时间  modifieddate   **/
+    public Date getModifieddate() {
+        return modifieddate;
+    }
+
+    /**   修改时间  modifieddate   **/
+    public void setModifieddate(Date modifieddate) {
+        this.modifieddate = modifieddate;
+    }
+
+    /**   入库时间  entrydate   **/
+    public Date getEntrydate() {
+        return entrydate;
+    }
+
+    /**   入库时间  entrydate   **/
+    public void setEntrydate(Date entrydate) {
+        this.entrydate = entrydate;
+    }
+
+    /**   入库单品数量  num   **/
+    public Integer getNum() {
+        return num;
+    }
+
+    /**   入库单品数量  num   **/
+    public void setNum(Integer num) {
+        this.num = num;
+    }
+
+    /**   运输证  transportcert   **/
+    public String getTransportcert() {
+        return transportcert;
+    }
+
+    /**   运输证  transportcert   **/
+    public void setTransportcert(String transportcert) {
+        this.transportcert = transportcert == null ? null : transportcert.trim();
+    }
+
+    /**   入库单位  unit   **/
+    public String getUnit() {
+        return unit;
+    }
+
+    /**   入库单位  unit   **/
+    public void setUnit(String unit) {
+        this.unit = unit == null ? null : unit.trim();
+    }
+
+    public Byte getType() {
+        return type;
+    }
+
+    public void setType(Byte type) {
+        this.type = type;
+    }
+
+    public String getCompanynumber() {
+        return companynumber;
+    }
+
+    public void setCompanynumber(String companynumber) {
+        this.companynumber = companynumber;
+    }
+
+    public EntryOrderInfo() {
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Enum/ApplyStatus.java b/src/main/java/com/gk/firework/Domain/Enum/ApplyStatus.java
new file mode 100644
index 0000000..d1802b9
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Enum/ApplyStatus.java
@@ -0,0 +1,47 @@
+package com.gk.firework.Domain.Enum;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.baomidou.mybatisplus.core.enums.IEnum;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+import java.io.Serializable;
+
+
+public enum ApplyStatus implements IEnum {
+    APPROVING("APPROVING", "待审批"),
+    PASS("PASS", "通过"),
+    REFUSE("REFUSE","拒绝");
+
+    private String code;
+
+    private String msg;
+
+    ApplyStatus(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public String getCode() {
+        return code;
+    }
+    @JsonValue
+    public String getMsg() {
+        return msg;
+    }
+
+
+
+    public static ApplyStatus parse(String code){
+        for(ApplyStatus as:ApplyStatus.values()){
+            if(as.getCode().equals(code)){
+                return as;
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public Serializable getValue() {
+        return this.code;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Enum/AssessAppealStatus.java b/src/main/java/com/gk/firework/Domain/Enum/AssessAppealStatus.java
new file mode 100644
index 0000000..a47b324
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Enum/AssessAppealStatus.java
@@ -0,0 +1,40 @@
+package com.gk.firework.Domain.Enum;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+
+public enum AssessAppealStatus {
+    UNAPPEALED("UNAPPEALED","未申诉"),
+    APPEALING("APPEALING","申诉中"),
+    PASSED("PASSED","申诉通过"),
+    UNPASSED("UNPASSED","申诉未通过")
+    ;
+
+
+    private String code;
+
+    @JsonValue
+    private String msg;
+
+
+    AssessAppealStatus(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Enum/AssessApplyStatus.java b/src/main/java/com/gk/firework/Domain/Enum/AssessApplyStatus.java
new file mode 100644
index 0000000..fbe9363
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Enum/AssessApplyStatus.java
@@ -0,0 +1,28 @@
+package com.gk.firework.Domain.Enum;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+
+public enum AssessApplyStatus {
+
+    TOSUBMIT("TOSUBMIT","待提交") ,
+
+    PENDING("PENDING","待审批") ,
+
+    APPROVED("APPROVED","审批通过"),
+
+    REJECT("REJECT","驳回"),;
+
+
+    private String code;
+
+    @JsonValue
+    private String msg;
+
+    AssessApplyStatus(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+
+
+}
diff --git a/src/main/java/com/gk/firework/Domain/Enum/AssessPunishment.java b/src/main/java/com/gk/firework/Domain/Enum/AssessPunishment.java
new file mode 100644
index 0000000..36e880c
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Enum/AssessPunishment.java
@@ -0,0 +1,19 @@
+package com.gk.firework.Domain.Enum;
+
+public enum AssessPunishment {
+    M0("M0","吊销企业许可证"),
+    M1("M1","暂停使用1个月"),
+    M2("M2","暂停使用3个月"),
+    M3("M3","暂停使用6个月");
+
+
+    private String code;
+
+    private String msg;
+
+    AssessPunishment(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Domain/Enum/AssessType.java b/src/main/java/com/gk/firework/Domain/Enum/AssessType.java
new file mode 100644
index 0000000..b0e3316
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Enum/AssessType.java
@@ -0,0 +1,23 @@
+package com.gk.firework.Domain.Enum;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+
+public enum AssessType {
+
+    SALE("SALE","销售评定"),
+    ACCESS("ACCESS","准入评定"),;
+
+
+    private String code;
+
+    @JsonValue
+    private String msg;
+
+
+    AssessType(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Domain/Enum/CertificatePersonType.java b/src/main/java/com/gk/firework/Domain/Enum/CertificatePersonType.java
new file mode 100644
index 0000000..cca7708
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Enum/CertificatePersonType.java
@@ -0,0 +1,41 @@
+package com.gk.firework.Domain.Enum;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+
+import java.io.Serializable;
+
+public enum CertificatePersonType {
+
+    DRIVER("DRIVER", "驾驶员"),
+    ESCORT("ESCORT", "押运员"),;
+
+    private String code;
+
+    private String msg;
+
+    CertificatePersonType(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public String getCode() {
+        return code;
+    }
+    @JsonValue
+    public String getMsg() {
+        return msg;
+    }
+
+
+
+    public static CertificatePersonType parse(String code){
+        for(CertificatePersonType cs:CertificatePersonType.values()){
+            if(cs.getCode().equals(code)){
+                return cs;
+            }
+        }
+        return null;
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Domain/Enum/CertificateStatus.java b/src/main/java/com/gk/firework/Domain/Enum/CertificateStatus.java
new file mode 100644
index 0000000..524955d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Enum/CertificateStatus.java
@@ -0,0 +1,45 @@
+package com.gk.firework.Domain.Enum;
+
+import com.baomidou.mybatisplus.core.enums.IEnum;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+import java.io.Serializable;
+
+public enum CertificateStatus implements IEnum {
+    TOSUBMIT("TOSUBMIT", "待提交"),
+    PENDING("PENDING", "待审批"),
+    APPROVED("APPROVED","已审批");
+
+    private String code;
+
+    private String msg;
+
+    CertificateStatus(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public String getCode() {
+        return code;
+    }
+    @JsonValue
+    public String getMsg() {
+        return msg;
+    }
+
+
+
+    public static CertificateStatus parse(String code){
+        for(CertificateStatus cs:CertificateStatus.values()){
+            if(cs.getCode().equals(code)){
+                return cs;
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public Serializable getValue() {
+        return this.code;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Enum/CommitStatus.java b/src/main/java/com/gk/firework/Domain/Enum/CommitStatus.java
new file mode 100644
index 0000000..edde508
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Enum/CommitStatus.java
@@ -0,0 +1,44 @@
+package com.gk.firework.Domain.Enum;
+
+import com.baomidou.mybatisplus.core.enums.IEnum;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+import java.io.Serializable;
+
+public enum CommitStatus implements IEnum {
+    DEL("DEL", "删除"),
+    MOD("MOD", "修改"),;
+
+    private String code;
+
+    private String msg;
+
+    CommitStatus(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public String getCode() {
+        return code;
+    }
+    @JsonValue
+    public String getMsg() {
+        return msg;
+    }
+
+
+
+    public static CommitStatus parse(String code){
+        for(CommitStatus cs:CommitStatus.values()){
+            if(cs.getCode().equals(code)){
+                return cs;
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public Serializable getValue() {
+        return this.code;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Enum/DocumentType.java b/src/main/java/com/gk/firework/Domain/Enum/DocumentType.java
new file mode 100644
index 0000000..b52e215
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Enum/DocumentType.java
@@ -0,0 +1,46 @@
+package com.gk.firework.Domain.Enum;
+
+import com.baomidou.mybatisplus.core.enums.IEnum;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+import java.io.Serializable;
+
+public enum DocumentType implements IEnum {
+
+
+    RESCUE("RESCUE", "应急救援预案"),
+    FLOW("FLOW", "流向信息管理承诺书"),
+            ;
+
+    private String code;
+    private String msg;
+
+    DocumentType(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public String getCode() {
+        return code;
+    }
+    @JsonValue
+    public String getMsg() {
+        return msg;
+    }
+
+
+
+    public static DocumentType parse(String code){
+        for(DocumentType dt:DocumentType.values()){
+            if(dt.getCode().equals(code)){
+                return dt;
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public Serializable getValue() {
+        return this.code;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Enum/Element.java b/src/main/java/com/gk/firework/Domain/Enum/Element.java
new file mode 100644
index 0000000..6f5c4ad
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Enum/Element.java
@@ -0,0 +1,69 @@
+package com.gk.firework.Domain.Enum;
+
+import java.util.Random;
+
+/**
+ * @author : jingjy
+ * @date : 2021/5/24 10:13
+ * @Description: 生成流向码的基本元素
+ */
+public enum Element {
+    /**
+     * 基本元素为数字0-9及大写字母A-Z(不含I、O)共34种数字或字母
+     **/
+    A("A"),
+    B("B"),
+    C("C"),
+    D("D"),
+    E("E"),
+    F("F"),
+    G("G"),
+    H("H"),
+    J("J"),
+    K("K"),
+    L("L"),
+    M("M"),
+    N("N"),
+    P("P"),
+    Q("Q"),
+    R("R"),
+    S("S"),
+    T("T"),
+    U("U"),
+    V("V"),
+    W("W"),
+    X("X"),
+    Y("Y"),
+    Z("Z"),
+    ZERO(0),
+    ONE(1),
+    TWO(2),
+    THREE(3),
+    FOUR(4),
+    FIVE(5),
+    SIX(6),
+    SEVEN(7),
+    EIGHT(8),
+    NINE(9),
+    ;
+
+    Element(Object i) {
+        this.i = i;
+    }
+
+    private final Object i;
+    private static int random = (int) (Math.random() * 10);
+    private static Random rand = new Random(random);
+
+    public static <T extends Enum<T>> T random(Class<T> ec) {
+        return random(ec.getEnumConstants());
+    }
+
+    public static <T> T random(T[] values) {
+        return values[rand.nextInt(values.length)];
+    }
+
+    public Object getValue() {
+        return i;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Enum/EnterpriseSafetySupervision.java b/src/main/java/com/gk/firework/Domain/Enum/EnterpriseSafetySupervision.java
new file mode 100644
index 0000000..ebbd703
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Enum/EnterpriseSafetySupervision.java
@@ -0,0 +1,48 @@
+package com.gk.firework.Domain.Enum;
+
+/**
+ * @author : jingjy
+ * @date : 2021/4/13 10:16
+ */
+public enum EnterpriseSafetySupervision {
+    /**
+     * PRODUCE:烟花爆竹生产
+     * WHOLESALER:烟花爆竹批发经营
+     * RETAILER:烟花爆竹零售经营(长期)
+     * TEMP_RETAILER:烟花爆竹零售经营(短期)
+     */
+    PRODUCE("PRODUCE","烟花爆竹生产"),
+    WHOLESALER("WHOLESALER","烟花爆竹批发经营"),
+    RETAILER("RETAILER","烟花爆竹零售经营(长期)"),
+    TEMP_RETAILER("TEMP_RETAILER","烟花爆竹零售经营(短期)");
+
+
+
+    EnterpriseSafetySupervision(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    private String code;
+    private String msg;
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+
+    public static boolean isInclude(String msg){
+        boolean include = false;
+        for (EnterpriseSafetySupervision e: EnterpriseSafetySupervision.values()){
+            if(msg.equals(e.getMsg())){
+                include = true;
+                break;
+            }
+        }
+        return include;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Enum/EnterpriseSize.java b/src/main/java/com/gk/firework/Domain/Enum/EnterpriseSize.java
new file mode 100644
index 0000000..99023e2
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Enum/EnterpriseSize.java
@@ -0,0 +1,45 @@
+package com.gk.firework.Domain.Enum;
+
+import com.baomidou.mybatisplus.core.enums.IEnum;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+import java.io.Serializable;
+
+public enum EnterpriseSize implements IEnum {
+    MICRO("MICRO","微型"),
+    SMALL("SMALL","小型"),
+    MEDIUM("MEDIUM","中型"),
+    LARGE("LARGE","大型");
+
+
+    EnterpriseSize(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    private String code;
+    @JsonValue
+    private String msg;
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public static EnterpriseSize parse(String code){
+        for(EnterpriseSize es:EnterpriseSize.values()){
+            if(es.getCode().equals(code)){
+                return es;
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public Serializable getValue() {
+        return this.code;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Enum/EnterpriseStatus.java b/src/main/java/com/gk/firework/Domain/Enum/EnterpriseStatus.java
new file mode 100644
index 0000000..af7b968
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Enum/EnterpriseStatus.java
@@ -0,0 +1,42 @@
+package com.gk.firework.Domain.Enum;
+
+import com.baomidou.mybatisplus.core.enums.IEnum;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+import java.io.Serializable;
+
+public enum EnterpriseStatus implements IEnum {
+
+    OFF("OFF","停止"),
+    ON("ON","正常");
+    EnterpriseStatus(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    private String code;
+    @JsonValue
+    private String msg;
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public static EnterpriseStatus parse(String code){
+        for(EnterpriseStatus es:EnterpriseStatus.values()){
+            if(es.getCode().equals(code)){
+                return es;
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public Serializable getValue() {
+        return this.code;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Enum/ErrorCode.java b/src/main/java/com/gk/firework/Domain/Enum/ErrorCode.java
new file mode 100644
index 0000000..0fbbebe
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Enum/ErrorCode.java
@@ -0,0 +1,61 @@
+package com.gk.firework.Domain.Enum;
+
+/**
+ * @author : jingjy
+ * @date : 2021/4/14 10:57
+ */
+public enum ErrorCode {
+    /**
+     * 错误码
+     * SUCCESS : 200;成功
+     * ERROR_999 : 999;自定义错误
+     */
+    SUCCESS("200","success"),
+    // 参数错误
+    ERROR_10001("10001","参数为空"),
+    ERROR_10002("10002","参数不全"),
+    ERROR_10003("10003","参数类型错误"),
+    ERROR_10004("10004","参数无效"),
+    // 用户错误
+    ERROR_20001("20001","用户不存在"),
+    ERROR_20002("20002","用户未登陆"),
+    ERROR_20003("20003","用户名或密码错误"),
+    ERROR_20004("20004","用户账户已被禁用"),
+    ERROR_20005("20005","用户已存在"),
+    // 业务错误
+    ERROR_30001("30001","系统业务出现问题"),
+    // 系统错误
+    ERROR_40001("40001","系统内部错误"),
+    // 数据错误
+    ERROR_50001("50001","数据未找到"),
+    ERROR_50002("50002","数据有误"),
+    ERROR_50003("50003","数据已存在"),
+    // 接口错误
+    ERROR_60001("60001","系统内部接口调用异常"),
+    ERROR_60002("60002","系统外部接口调用异常"),
+    ERROR_60003("60003","接口禁止访问"),
+    ERROR_60004("60004","接口地址无效"),
+    ERROR_60005("60005","接口请求超时"),
+    ERROR_60006("60006","接口负载过高"),
+    // 权限错误
+    ERROR_70001("70001","没有访问权限"),
+
+    ERROR_999("999","自定义错误")
+    ;
+
+    ErrorCode(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    private final String code;
+    private final String msg;
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Enum/HiddenDangerReportStatus.java b/src/main/java/com/gk/firework/Domain/Enum/HiddenDangerReportStatus.java
new file mode 100644
index 0000000..368f8e4
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Enum/HiddenDangerReportStatus.java
@@ -0,0 +1,45 @@
+package com.gk.firework.Domain.Enum;
+
+import com.baomidou.mybatisplus.annotation.IEnum;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+import java.io.Serializable;
+
+public enum HiddenDangerReportStatus implements IEnum {
+
+    PENDING("PENDING", "待提交"),
+    COMMITTED("COMMITTED", "已提交"),;
+
+    private String code;
+
+    private String msg;
+
+    HiddenDangerReportStatus(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public String getCode() {
+        return code;
+    }
+    @JsonValue
+    public String getMsg() {
+        return msg;
+    }
+
+
+
+    public static HiddenDangerReportStatus parse(String code){
+        for(HiddenDangerReportStatus cs:HiddenDangerReportStatus.values()){
+            if(cs.getCode().equals(code)){
+                return cs;
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public Serializable getValue() {
+        return this.code;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Enum/LicenseStatus.java b/src/main/java/com/gk/firework/Domain/Enum/LicenseStatus.java
new file mode 100644
index 0000000..ad03205
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Enum/LicenseStatus.java
@@ -0,0 +1,37 @@
+package com.gk.firework.Domain.Enum;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.Utils.StringUtils;
+
+public enum LicenseStatus {
+
+
+    NEW("NEW","新发"),
+    POSTP("POSTP","延期"),
+    MOD("MOD","变更"),;
+
+
+    LicenseStatus(String code, String msg) {
+        this.msg = msg;
+        this.code = code;
+    }
+
+
+    String code;
+
+    @JsonValue
+    String msg;
+
+    public static LicenseStatus parse(String code){
+        if (StringUtils.isBlank(code)) return null;
+        LicenseStatus[] values = LicenseStatus.values();
+        for (LicenseStatus status : values) {
+            if (code.equals(status.code)) {
+                return status;
+            }
+        }
+        throw new BusinessException("传参错误,转换失败");
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Domain/Enum/MsgContentType.java b/src/main/java/com/gk/firework/Domain/Enum/MsgContentType.java
new file mode 100644
index 0000000..54acf73
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Enum/MsgContentType.java
@@ -0,0 +1,31 @@
+package com.gk.firework.Domain.Enum;
+
+public enum MsgContentType {
+
+    INFO_UNDONE("info","信息未补全"),
+    LICENSE_EXPIRED("license","许可证过期") ;
+
+    MsgContentType(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    String code;
+    String msg;
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Enum/MsgType.java b/src/main/java/com/gk/firework/Domain/Enum/MsgType.java
new file mode 100644
index 0000000..781d203
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Enum/MsgType.java
@@ -0,0 +1,37 @@
+package com.gk.firework.Domain.Enum;
+
+import com.baomidou.mybatisplus.core.enums.IEnum;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+import java.io.Serializable;
+
+public enum MsgType{
+    NOTIFICATION("notify","通知"),
+    ALERT("alert","消息提示"),
+    MESSAGE("message","通知");
+
+
+    MsgType(String code, String type) {
+        this.code = code;
+        this.type = type;
+    }
+
+    private String code;
+    private String type;
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Enum/PersonnelCategory.java b/src/main/java/com/gk/firework/Domain/Enum/PersonnelCategory.java
new file mode 100644
index 0000000..f099e6f
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Enum/PersonnelCategory.java
@@ -0,0 +1,47 @@
+package com.gk.firework.Domain.Enum;
+
+import com.baomidou.mybatisplus.core.enums.IEnum;
+import com.fasterxml.jackson.annotation.JsonValue;
+
+import java.io.Serializable;
+
+public enum PersonnelCategory implements IEnum {
+
+
+    SECURITY("SECURITY", "安全人员"),
+    SPECIAL("SPECIAL", "特种人员"),
+
+    ;
+
+    private String code;
+    private String msg;
+
+    PersonnelCategory(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public String getCode() {
+        return code;
+    }
+    @JsonValue
+    public String getMsg() {
+        return msg;
+    }
+
+
+
+    public static PersonnelCategory parse(String code){
+        for(PersonnelCategory pc:PersonnelCategory.values()){
+            if(pc.getCode().equals(code)){
+                return pc;
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public Serializable getValue() {
+        return this.code;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Enum/ProvinceCode.java b/src/main/java/com/gk/firework/Domain/Enum/ProvinceCode.java
new file mode 100644
index 0000000..905b019
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Enum/ProvinceCode.java
@@ -0,0 +1,69 @@
+package com.gk.firework.Domain.Enum;
+
+/**
+ * @author : jingjy
+ * @date : 2021/5/12 16:13
+ */
+public enum ProvinceCode {
+    /**
+     * 错误码
+     * SUCCESS : 200;成功
+     * ERROR_999 : 999;自定义错误
+     */
+    BEIJING("北京市","京"),
+    TIANJIN("天津市","津"),
+    HEBEI("河北省","冀"),
+    SHANXI("山西省","晋"),
+    NEIMENG("内蒙古自治区","蒙"),
+    LIAONING("辽宁省" , "辽"),
+    JILIN("吉林省" ,"吉"),
+    HEILONGJIANG("黑龙江省" ,"黑"),
+    SHANGHAI("上海市","沪"),
+    JIANGSU("江苏省" , "苏"),
+    ZHEJIANG("浙江省","浙"),
+    ANHUI("安徽省","皖"),
+    FUJIAN("福建省" ,"闽"),
+    JIANGXI("江西省","赣"),
+    SHANDONG("山东省","鲁"),
+    HENAN("河南省","豫"),
+    HUBEI("湖北省","鄂"),
+    HUNAN("湖南省","湘"),
+    GUANGDONG("广东省","粤"),
+    GUANGXI("广西壮族自治区","桂"),
+    HAINAN("海南省","琼"),
+    SICHUAN("四川省","川"),
+    GUIZHOU("贵州省", "贵"),
+    YUNNAN("云南省","云"),
+    CHONGQING("重庆市","渝"),
+    XIZANG("西藏自治区" , "藏"),
+    ShAANXI("陕西省","陕"),
+    GANSU("甘肃省","甘"),
+    QINGHAI("青海省","青"),
+    NINGXIA("宁夏回族自治区","宁"),
+    XINJIANG("新疆维吾尔自治区","新"),
+    XIANGGANG("香港特别行政区","港"),
+    AOMENG("澳门特别行政区","澳"),
+    TAIWAN("台湾省","台"),
+
+
+
+
+
+    ;
+
+    ProvinceCode(String name, String abbr) {
+        this.name = name;
+        this.abbr = abbr;
+    }
+
+    private final String name;
+    private final String abbr;
+
+    public String getName() {
+        return name;
+    }
+
+    public String getAbbr() {
+        return abbr;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Enum/PunishStatus.java b/src/main/java/com/gk/firework/Domain/Enum/PunishStatus.java
new file mode 100644
index 0000000..d5e6f50
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Enum/PunishStatus.java
@@ -0,0 +1,36 @@
+package com.gk.firework.Domain.Enum;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+
+public enum PunishStatus {
+
+    UNPUNISH("UNPUNISH", "未处罚"),
+    PUNISHING("PUNISHING","处罚中"),
+    END("END", "处罚结束"),;
+
+
+    String code;
+    @JsonValue
+    String msg;
+
+     PunishStatus(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Exception/BusinessException.java b/src/main/java/com/gk/firework/Domain/Exception/BusinessException.java
new file mode 100644
index 0000000..90cc4c5
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Exception/BusinessException.java
@@ -0,0 +1,33 @@
+package com.gk.firework.Domain.Exception;
+
+public class BusinessException extends RuntimeException{
+    private String code;
+    private String error;
+
+    public BusinessException(String message) {
+        super(message);
+    }
+
+
+    public BusinessException(String code, String error) {
+        super(error);
+        this.code = code;
+        this.error = error;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getError() {
+        return error;
+    }
+
+    public void setError(String error) {
+        this.error = error;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Exception/Handler/CustomExceptionHandler.java b/src/main/java/com/gk/firework/Domain/Exception/Handler/CustomExceptionHandler.java
new file mode 100644
index 0000000..99021b2
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Exception/Handler/CustomExceptionHandler.java
@@ -0,0 +1,24 @@
+package com.gk.firework.Domain.Exception.Handler;
+
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.Utils.Msg;
+import org.apache.log4j.LogManager;
+import org.apache.log4j.Logger;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+@ControllerAdvice
+public class CustomExceptionHandler {
+
+    private Logger logger = LogManager.getLogger(CustomExceptionHandler.class);
+    @ResponseBody
+    @ExceptionHandler(value = BusinessException.class)
+    public Msg errorHandler(Exception ex){
+        logger.warn(ex);
+        Msg msg = new Msg();
+        msg.setCode("400");
+        msg.setMessage(ex.getMessage());
+        return msg;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Extension/StockTotal.java b/src/main/java/com/gk/firework/Domain/Extension/StockTotal.java
new file mode 100644
index 0000000..fd6549e
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Extension/StockTotal.java
@@ -0,0 +1,23 @@
+package com.gk.firework.Domain.Extension;
+
+import java.math.BigDecimal;
+
+public class StockTotal {
+
+    private BigDecimal countNum;
+
+    public StockTotal(BigDecimal countNum) {
+        this.countNum = countNum;
+    }
+
+
+    public BigDecimal getCountNum() {
+        return countNum;
+    }
+
+    public void setCountNum(BigDecimal countNum) {
+        this.countNum = countNum;
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Domain/HelpDocInfo.java b/src/main/java/com/gk/firework/Domain/HelpDocInfo.java
new file mode 100644
index 0000000..a7718cd
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/HelpDocInfo.java
@@ -0,0 +1,158 @@
+package com.gk.firework.Domain;
+
+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 java.util.Date;
+
+@TableName("helpdoc")
+public class HelpDocInfo {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /**   id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 文件类型  filetype **/
+    private String filetype;
+
+    /** 文件名称  filename **/
+    private String filename;
+
+    /** 文件链接  fileurl **/
+    private String fileurl;
+
+    /** 版本号  version **/
+    private Integer version;
+
+    /** 备注  remark **/
+    private String remark;
+
+    /** 创建人  createdby **/
+    private String createdby;
+
+    /** 创建时间  created **/
+    private Date created;
+
+    /** 更新时间  updated **/
+    private Date updated;
+
+    /** 是否删除  isdel **/
+    private Byte isdel;
+
+    /** 标记  flag **/
+    private Byte flag;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   文件类型  filetype   **/
+    public String getFiletype() {
+        return filetype;
+    }
+
+    /**   文件类型  filetype   **/
+    public void setFiletype(String filetype) {
+        this.filetype = filetype == null ? null : filetype.trim();
+    }
+
+    /**   文件名称  filename   **/
+    public String getFilename() {
+        return filename;
+    }
+
+    /**   文件名称  filename   **/
+    public void setFilename(String filename) {
+        this.filename = filename == null ? null : filename.trim();
+    }
+
+    /**   文件链接  fileurl   **/
+    public String getFileurl() {
+        return fileurl;
+    }
+
+    /**   文件链接  fileurl   **/
+    public void setFileurl(String fileurl) {
+        this.fileurl = fileurl == null ? null : fileurl.trim();
+    }
+
+    /**   版本号  version   **/
+    public Integer getVersion() {
+        return version;
+    }
+
+    /**   版本号  version   **/
+    public void setVersion(Integer version) {
+        this.version = version;
+    }
+
+    /**   备注  remark   **/
+    public String getRemark() {
+        return remark;
+    }
+
+    /**   备注  remark   **/
+    public void setRemark(String remark) {
+        this.remark = remark == null ? null : remark.trim();
+    }
+
+    /**   创建人  createdby   **/
+    public String getCreatedby() {
+        return createdby;
+    }
+
+    /**   创建人  createdby   **/
+    public void setCreatedby(String createdby) {
+        this.createdby = createdby == null ? null : createdby.trim();
+    }
+
+    /**   创建时间  created   **/
+    public Date getCreated() {
+        return created;
+    }
+
+    /**   创建时间  created   **/
+    public void setCreated(Date created) {
+        this.created = created;
+    }
+
+    /**   更新时间  updated   **/
+    public Date getUpdated() {
+        return updated;
+    }
+
+    /**   更新时间  updated   **/
+    public void setUpdated(Date updated) {
+        this.updated = updated;
+    }
+
+    /**   是否删除  isdel   **/
+    public Byte getIsdel() {
+        return isdel;
+    }
+
+    /**   是否删除  isdel   **/
+    public void setIsdel(Byte isdel) {
+        this.isdel = isdel;
+    }
+
+    /**   标记  flag   **/
+    public Byte getFlag() {
+        return flag;
+    }
+
+    /**   标记  flag   **/
+    public void setFlag(Byte flag) {
+        this.flag = flag;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/HiddenDangerCheckContent.java b/src/main/java/com/gk/firework/Domain/HiddenDangerCheckContent.java
new file mode 100644
index 0000000..a63360b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/HiddenDangerCheckContent.java
@@ -0,0 +1,148 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+@TableName("hiddendangercheckcontent")
+public class HiddenDangerCheckContent implements Serializable {
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id  id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 检查内容  checkcontent **/
+    private String checkcontent;
+
+    /** 创建时间  createtime **/
+    private Date createtime;
+
+    /** 创建人  createby **/
+    private String createby;
+
+    /** 更新时间  updatetime **/
+    private Date updatetime;
+
+    /** 更新人  updateby **/
+    private String updateby;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /** 所属类别菜单id  belongid **/
+    private Long belongid;
+
+    /** 所属类别餐单name  belongname **/
+    private String belongname;
+
+    //检查标准
+    @TableField(exist = false)
+    private List<HiddenDangerCheckCriteria> criteriaList;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   检查内容  checkcontent   **/
+    public String getCheckcontent() {
+        return checkcontent;
+    }
+
+    /**   检查内容  checkcontent   **/
+    public void setCheckcontent(String checkcontent) {
+        this.checkcontent = checkcontent == null ? null : checkcontent.trim();
+    }
+
+    /**   创建时间  createtime   **/
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    /**   创建时间  createtime   **/
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    /**   创建人  createby   **/
+    public String getCreateby() {
+        return createby;
+    }
+
+    /**   创建人  createby   **/
+    public void setCreateby(String createby) {
+        this.createby = createby == null ? null : createby.trim();
+    }
+
+    /**   更新时间  updatetime   **/
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    /**   更新时间  updatetime   **/
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    /**   更新人  updateby   **/
+    public String getUpdateby() {
+        return updateby;
+    }
+
+    /**   更新人  updateby   **/
+    public void setUpdateby(String updateby) {
+        this.updateby = updateby == null ? null : updateby.trim();
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    /**   所属类别菜单id  belongid   **/
+    public Long getBelongid() {
+        return belongid;
+    }
+
+    /**   所属类别菜单id  belongid   **/
+    public void setBelongid(Long belongid) {
+        this.belongid = belongid;
+    }
+
+    /**   所属类别餐单name  belongname   **/
+    public String getBelongname() {
+        return belongname;
+    }
+
+    /**   所属类别餐单name  belongname   **/
+    public void setBelongname(String belongname) {
+        this.belongname = belongname == null ? null : belongname.trim();
+    }
+
+    public List<HiddenDangerCheckCriteria> getCriteriaList() {
+        return criteriaList;
+    }
+
+    public void setCriteriaList(List<HiddenDangerCheckCriteria> criteriaList) {
+        this.criteriaList = criteriaList;
+    }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/HiddenDangerCheckCriteria.java b/src/main/java/com/gk/firework/Domain/HiddenDangerCheckCriteria.java
new file mode 100644
index 0000000..66f4ba7
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/HiddenDangerCheckCriteria.java
@@ -0,0 +1,147 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+@TableName("hiddendangercheckcriteria")
+public class HiddenDangerCheckCriteria implements Serializable {
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id  id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 检查标准  checkcriteria **/
+    private String checkcriteria;
+
+    /** 参考依据  basis **/
+    private String basis;
+
+    /** 所属检查内容id  belongid **/
+    private String belongid;
+
+    /** 创建时间  createtime **/
+    private Date createtime;
+
+    /** 创建人  createby **/
+    private String createby;
+
+    /** 更新时间  updatetime **/
+    private Date updatetime;
+
+    /** 更新人  updateby **/
+    private String updateby;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    //检查类别
+    @TableField(exist = false)
+    private List<HiddenDangerCheckType> typeList;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   检查标准  checkcriteria   **/
+    public String getCheckcriteria() {
+        return checkcriteria;
+    }
+
+    /**   检查标准  checkcriteria   **/
+    public void setCheckcriteria(String checkcriteria) {
+        this.checkcriteria = checkcriteria == null ? null : checkcriteria.trim();
+    }
+
+    /**   参考依据  basis   **/
+    public String getBasis() {
+        return basis;
+    }
+
+    /**   参考依据  basis   **/
+    public void setBasis(String basis) {
+        this.basis = basis == null ? null : basis.trim();
+    }
+
+    /**   所属检查内容id  belongid   **/
+    public String getBelongid() {
+        return belongid;
+    }
+
+    /**   所属检查内容id  belongid   **/
+    public void setBelongid(String belongid) {
+        this.belongid = belongid == null ? null : belongid.trim();
+    }
+
+    /**   创建时间  createtime   **/
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    /**   创建时间  createtime   **/
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    /**   创建人  createby   **/
+    public String getCreateby() {
+        return createby;
+    }
+
+    /**   创建人  createby   **/
+    public void setCreateby(String createby) {
+        this.createby = createby == null ? null : createby.trim();
+    }
+
+    /**   更新时间  updatetime   **/
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    /**   更新时间  updatetime   **/
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    /**   更新人  updateby   **/
+    public String getUpdateby() {
+        return updateby;
+    }
+
+    /**   更新人  updateby   **/
+    public void setUpdateby(String updateby) {
+        this.updateby = updateby == null ? null : updateby.trim();
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    public List<HiddenDangerCheckType> getTypeList() {
+        return typeList;
+    }
+
+    public void setTypeList(List<HiddenDangerCheckType> typeList) {
+        this.typeList = typeList;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/HiddenDangerCheckResult.java b/src/main/java/com/gk/firework/Domain/HiddenDangerCheckResult.java
new file mode 100644
index 0000000..8a75dae
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/HiddenDangerCheckResult.java
@@ -0,0 +1,133 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.util.Date;
+
+@TableName("hiddendangercheckresult")
+public class HiddenDangerCheckResult implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id  id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 检查情况  checkresult **/
+    private String checkresult;
+
+    /** 是否合格  isqualified **/
+    private Boolean isqualified;
+
+    /** 所属检查类别id  belongid **/
+    private Long belongid;
+
+    /** 创建时间  createtime **/
+    private Date createtime;
+
+    /** 创建人  createby **/
+    private String createby;
+
+    /** 更新时间  updatetime **/
+    private Date updatetime;
+
+    /** 更新人  updateby **/
+    private String updateby;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   检查情况  checkresult   **/
+    public String getCheckresult() {
+        return checkresult;
+    }
+
+    /**   检查情况  checkresult   **/
+    public void setCheckresult(String checkresult) {
+        this.checkresult = checkresult == null ? null : checkresult.trim();
+    }
+
+    /**   是否合格  isqualified   **/
+    public Boolean getIsqualified() {
+        return isqualified;
+    }
+
+    /**   是否合格  isqualified   **/
+    public void setIsqualified(Boolean isqualified) {
+        this.isqualified = isqualified;
+    }
+
+    /**   所属检查类别id  belongid   **/
+    public Long getBelongid() {
+        return belongid;
+    }
+
+    /**   所属检查类别id  belongid   **/
+    public void setBelongid(Long belongid) {
+        this.belongid = belongid;
+    }
+
+    /**   创建时间  createtime   **/
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    /**   创建时间  createtime   **/
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    /**   创建人  createby   **/
+    public String getCreateby() {
+        return createby;
+    }
+
+    /**   创建人  createby   **/
+    public void setCreateby(String createby) {
+        this.createby = createby == null ? null : createby.trim();
+    }
+
+    /**   更新时间  updatetime   **/
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    /**   更新时间  updatetime   **/
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    /**   更新人  updateby   **/
+    public String getUpdateby() {
+        return updateby;
+    }
+
+    /**   更新人  updateby   **/
+    public void setUpdateby(String updateby) {
+        this.updateby = updateby == null ? null : updateby.trim();
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/HiddenDangerCheckType.java b/src/main/java/com/gk/firework/Domain/HiddenDangerCheckType.java
new file mode 100644
index 0000000..3905fa1
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/HiddenDangerCheckType.java
@@ -0,0 +1,132 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+@TableName("hiddendangerchecktype")
+public class HiddenDangerCheckType implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id  id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 检查类型  checktype **/
+    private String checktype;
+
+    /** 所属检查标准id  belongid **/
+    private String belongid;
+
+    /** 创建时间  createtime **/
+    private Date createtime;
+
+    /** 创建人  createby **/
+    private String createby;
+
+    /** 更新时间  updatetime **/
+    private Date updatetime;
+
+    /** 更新人  updateby **/
+    private String updateby;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    //检查情况
+    private List<HiddenDangerCheckResult> checkResultList;
+
+    /**   19  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   19  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   检查类型  checktype   **/
+    public String getChecktype() {
+        return checktype;
+    }
+
+    /**   检查类型  checktype   **/
+    public void setChecktype(String checktype) {
+        this.checktype = checktype == null ? null : checktype.trim();
+    }
+
+    /**   所属检查标准id  belongid   **/
+    public String getBelongid() {
+        return belongid;
+    }
+
+    /**   所属检查标准id  belongid   **/
+    public void setBelongid(String belongid) {
+        this.belongid = belongid == null ? null : belongid.trim();
+    }
+
+    /**   创建时间  createtime   **/
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    /**   创建时间  createtime   **/
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    /**   创建人  createby   **/
+    public String getCreateby() {
+        return createby;
+    }
+
+    /**   创建人  createby   **/
+    public void setCreateby(String createby) {
+        this.createby = createby == null ? null : createby.trim();
+    }
+
+    /**   更新时间  updatetime   **/
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    /**   更新时间  updatetime   **/
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    /**   更新人  updateby   **/
+    public String getUpdateby() {
+        return updateby;
+    }
+
+    /**   更新人  updateby   **/
+    public void setUpdateby(String updateby) {
+        this.updateby = updateby == null ? null : updateby.trim();
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    public List<HiddenDangerCheckResult> getCheckResultList() {
+        return checkResultList;
+    }
+
+    public void setCheckResultList(List<HiddenDangerCheckResult> checkResultList) {
+        this.checkResultList = checkResultList;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/HiddenDangerMenu.java b/src/main/java/com/gk/firework/Domain/HiddenDangerMenu.java
new file mode 100644
index 0000000..2ae59de
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/HiddenDangerMenu.java
@@ -0,0 +1,146 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+@TableName("hiddendangermenu")
+public class HiddenDangerMenu implements Serializable {
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    /** 主键id  id **/
+    private Long id;
+
+    /** 菜单名称  name **/
+    private String name;
+
+    /** 父菜单id  parentid **/
+    private Long parentid;
+
+    /** 菜单等级  level **/
+    private Integer level;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /** 创建时间  createtime **/
+    private Date createtime;
+
+    /** 创建人  createby **/
+    private String createby;
+
+    /** 更新时间  updatetime **/
+    private Date updatetime;
+
+    /** 更新人  updateby **/
+    private String updateby;
+
+    @TableField(exist = false)
+    private List<HiddenDangerMenu> submenu;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   菜单名称  name   **/
+    public String getName() {
+        return name;
+    }
+
+    /**   菜单名称  name   **/
+    public void setName(String name) {
+        this.name = name == null ? null : name.trim();
+    }
+
+    /**   父菜单id  parentid   **/
+    public Long getParentid() {
+        return parentid;
+    }
+
+    /**   父菜单id  parentid   **/
+    public void setParentid(Long parentid) {
+        this.parentid = parentid;
+    }
+
+    /**   菜单等级  level   **/
+    public Integer getLevel() {
+        return level;
+    }
+
+    /**   菜单等级  level   **/
+    public void setLevel(Integer level) {
+        this.level = level;
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    /**   创建时间  createtime   **/
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    /**   创建时间  createtime   **/
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    /**   创建人  createby   **/
+    public String getCreateby() {
+        return createby;
+    }
+
+    /**   创建人  createby   **/
+    public void setCreateby(String createby) {
+        this.createby = createby == null ? null : createby.trim();
+    }
+
+    /**   更新时间  updatetime   **/
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    /**   更新时间  updatetime   **/
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    /**   更新人  updateby   **/
+    public String getUpdateby() {
+        return updateby;
+    }
+
+    /**   更新人  updateby   **/
+    public void setUpdateby(String updateby) {
+        this.updateby = updateby == null ? null : updateby.trim();
+    }
+
+    public List<HiddenDangerMenu> getSubmenu() {
+        return submenu;
+    }
+
+    public void setSubmenu(List<HiddenDangerMenu> submenu) {
+        this.submenu = submenu;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/HiddenDangerReport.java b/src/main/java/com/gk/firework/Domain/HiddenDangerReport.java
new file mode 100644
index 0000000..fa9a60c
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/HiddenDangerReport.java
@@ -0,0 +1,256 @@
+package com.gk.firework.Domain;
+
+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 com.gk.firework.Domain.Enum.HiddenDangerReportStatus;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@TableName("hiddendangerreport")
+public class HiddenDangerReport implements Serializable {
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id  id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 自检单号  code **/
+    private String code;
+
+    /** 单位名称  enterprisename **/
+    private String enterprisename;
+
+    /** 企业id  enterpriseid **/
+    private Long enterpriseid;
+
+    /** 录入周期  cycle **/
+    private String cycle;
+
+    /** 创建时间  createtime **/
+    private Date createtime;
+
+    /** 创建人  createby **/
+    private String createby;
+
+    /** 更新人  updateby **/
+    private String updateby;
+
+    /** 更新时间  updatetime **/
+    private Date updatetime;
+
+    /** 重大隐患数量  majornum **/
+    private Integer majornum;
+
+    /** 一般隐患数量  normalnum **/
+    private Integer normalnum;
+
+    /** 总项数  totalnum **/
+    private Integer totalnum;
+
+    /** 未处理数  undealnum **/
+    private Integer undealnum;
+
+    /** 过期未处理数量  overduenum **/
+    private Integer overduenum;
+
+    /** 查看次数  viewcount **/
+    private Integer viewcount;
+
+    //上报人
+    private String applyperson;
+
+    /** 企业单位编号  enterprisenumber **/
+    private String enterprisenumber;
+
+    /** 单子状态  viewcount **/
+    private HiddenDangerReportStatus status;
+
+    private Boolean validflag;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   自检单号  code   **/
+    public String getCode() {
+        return code;
+    }
+
+    /**   自检单号  code   **/
+    public void setCode(String code) {
+        this.code = code == null ? null : code.trim();
+    }
+
+    /**   单位名称  enterprisename   **/
+    public String getEnterprisename() {
+        return enterprisename;
+    }
+
+    /**   单位名称  enterprisename   **/
+    public void setEnterprisename(String enterprisename) {
+        this.enterprisename = enterprisename == null ? null : enterprisename.trim();
+    }
+
+    /**   企业id  enterpriseid   **/
+    public Long getEnterpriseid() {
+        return enterpriseid;
+    }
+
+    /**   企业id  enterpriseid   **/
+    public void setEnterpriseid(Long enterpriseid) {
+        this.enterpriseid = enterpriseid;
+    }
+
+    /**   录入周期  cycle   **/
+    public String getCycle() {
+        return cycle;
+    }
+
+    /**   录入周期  cycle   **/
+    public void setCycle(String cycle) {
+        this.cycle = cycle == null ? null : cycle.trim();
+    }
+
+    /**   创建时间  createtime   **/
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    /**   创建时间  createtime   **/
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    /**   创建人  createby   **/
+    public String getCreateby() {
+        return createby;
+    }
+
+    /**   创建人  createby   **/
+    public void setCreateby(String createby) {
+        this.createby = createby == null ? null : createby.trim();
+    }
+
+    /**   更新人  updateby   **/
+    public String getUpdateby() {
+        return updateby;
+    }
+
+    /**   更新人  updateby   **/
+    public void setUpdateby(String updateby) {
+        this.updateby = updateby == null ? null : updateby.trim();
+    }
+
+    /**   更新时间  updatetime   **/
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    /**   更新时间  updatetime   **/
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    /**   重大隐患数量  majornum   **/
+    public Integer getMajornum() {
+        return majornum;
+    }
+
+    /**   重大隐患数量  majornum   **/
+    public void setMajornum(Integer majornum) {
+        this.majornum = majornum;
+    }
+
+    /**   一般隐患数量  normalnum   **/
+    public Integer getNormalnum() {
+        return normalnum;
+    }
+
+    /**   一般隐患数量  normalnum   **/
+    public void setNormalnum(Integer normalnum) {
+        this.normalnum = normalnum;
+    }
+
+    /**   总项数  totalnum   **/
+    public Integer getTotalnum() {
+        return totalnum;
+    }
+
+    /**   总项数  totalnum   **/
+    public void setTotalnum(Integer totalnum) {
+        this.totalnum = totalnum;
+    }
+
+    /**   未处理数  undealnum   **/
+    public Integer getUndealnum() {
+        return undealnum;
+    }
+
+    /**   未处理数  undealnum   **/
+    public void setUndealnum(Integer undealnum) {
+        this.undealnum = undealnum;
+    }
+
+    /**   过期未处理数量  overduenum   **/
+    public Integer getOverduenum() {
+        return overduenum;
+    }
+
+    /**   过期未处理数量  overduenum   **/
+    public void setOverduenum(Integer overduenum) {
+        this.overduenum = overduenum;
+    }
+
+    /**   查看次数  viewcount   **/
+    public Integer getViewcount() {
+        return viewcount;
+    }
+
+    /**   查看次数  viewcount   **/
+    public void setViewcount(Integer viewcount) {
+        this.viewcount = viewcount;
+    }
+
+    public String getApplyperson() {
+        return applyperson;
+    }
+
+    public void setApplyperson(String applyperson) {
+        this.applyperson = applyperson;
+    }
+
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    public HiddenDangerReportStatus getStatus() {
+        return status;
+    }
+
+    public void setStatus(HiddenDangerReportStatus status) {
+        this.status = status;
+    }
+
+    public String getEnterprisenumber() {
+        return enterprisenumber;
+    }
+
+    public void setEnterprisenumber(String enterprisenumber) {
+        this.enterprisenumber = enterprisenumber;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/HiddenDangerReportDetail.java b/src/main/java/com/gk/firework/Domain/HiddenDangerReportDetail.java
new file mode 100644
index 0000000..d264fc1
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/HiddenDangerReportDetail.java
@@ -0,0 +1,207 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.util.Date;
+
+@TableName("hiddendangerreportdetail")
+public class HiddenDangerReportDetail implements Serializable {
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id  id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 自检结果id  resultid **/
+    private Long resultid;
+
+    private Boolean isqualified;
+
+    /** 自检报告单号  reportcode **/
+    private String reportcode;
+
+    /** 发现日期  findtime **/
+    private Date findtime;
+
+    /** 隐患级别(1一般,2重大)  level **/
+    private Integer level;
+
+    /** 隐患描述(备用)  memo **/
+    private String memo;
+
+    /** 整改情况(1正在整改,2整改到位)  rectifystatus **/
+    private Integer rectifystatus;
+
+    /** 整改期限  rectifydeadline **/
+    private Date rectifydeadline;
+
+    /** 整改完成时间  rectifycompletedate **/
+    private Date rectifycompletedate;
+
+    /** 整改措施(1立即整改,2限期整改,3停产停业整顿 )  rectifymeasure **/
+    private Integer rectifymeasure;
+
+    /** 整改负责人  rectifyprincipal **/
+    private String rectifyprincipal;
+
+    /** 重大隐患报告  url **/
+    private String url;
+
+    /**  检查类型id **/
+    private String checktypeid;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   自检结果id  resultid   **/
+    public Long getResultid() {
+        return resultid;
+    }
+
+    /**   自检结果id  resultid   **/
+    public void setResultid(Long resultid) {
+        this.resultid = resultid;
+    }
+
+    /**   自检报告单号  reportcode   **/
+    public String getReportcode() {
+        return reportcode;
+    }
+
+    /**   自检报告单号  reportcode   **/
+    public void setReportcode(String reportcode) {
+        this.reportcode = reportcode == null ? null : reportcode.trim();
+    }
+
+    /**   发现日期  findtime   **/
+    public Date getFindtime() {
+        return findtime;
+    }
+
+    /**   发现日期  findtime   **/
+    public void setFindtime(Date findtime) {
+        this.findtime = findtime;
+    }
+
+    /**   隐患级别(1一般,2重大)  level   **/
+    public Integer getLevel() {
+        return level;
+    }
+
+    /**   隐患级别(1一般,2重大)  level   **/
+    public void setLevel(Integer level) {
+        this.level = level;
+    }
+
+    /**   隐患描述(备用)  memo   **/
+    public String getMemo() {
+        return memo;
+    }
+
+    /**   隐患描述(备用)  memo   **/
+    public void setMemo(String memo) {
+        this.memo = memo == null ? null : memo.trim();
+    }
+
+    /**   整改情况(1正在整改,2整改到位)  rectifystatus   **/
+    public Integer getRectifystatus() {
+        return rectifystatus;
+    }
+
+    /**   整改情况(1正在整改,2整改到位)  rectifystatus   **/
+    public void setRectifystatus(Integer rectifystatus) {
+        this.rectifystatus = rectifystatus;
+    }
+
+    /**   整改期限  rectifydeadline   **/
+    public Date getRectifydeadline() {
+        return rectifydeadline;
+    }
+
+    /**   整改期限  rectifydeadline   **/
+    public void setRectifydeadline(Date rectifydeadline) {
+        this.rectifydeadline = rectifydeadline;
+    }
+
+    /**   整改完成时间  rectifycompletedate   **/
+    public Date getRectifycompletedate() {
+        return rectifycompletedate;
+    }
+
+    /**   整改完成时间  rectifycompletedate   **/
+    public void setRectifycompletedate(Date rectifycompletedate) {
+        this.rectifycompletedate = rectifycompletedate;
+    }
+
+    /**   整改措施(1立即整改,2限期整改,3停产停业整顿 )  rectifymeasure   **/
+    public Integer getRectifymeasure() {
+        return rectifymeasure;
+    }
+
+    /**   整改措施(1立即整改,2限期整改,3停产停业整顿 )  rectifymeasure   **/
+    public void setRectifymeasure(Integer rectifymeasure) {
+        this.rectifymeasure = rectifymeasure;
+    }
+
+    /**   整改负责人  rectifyprincipal   **/
+    public String getRectifyprincipal() {
+        return rectifyprincipal;
+    }
+
+    /**   整改负责人  rectifyprincipal   **/
+    public void setRectifyprincipal(String rectifyprincipal) {
+        this.rectifyprincipal = rectifyprincipal == null ? null : rectifyprincipal.trim();
+    }
+
+    /**   重大隐患报告  url   **/
+    public String getUrl() {
+        return url;
+    }
+
+    /**   重大隐患报告  url   **/
+    public void setUrl(String url) {
+        this.url = url == null ? null : url.trim();
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    public Boolean getIsqualified() {
+        return isqualified;
+    }
+
+    public void setIsqualified(Boolean isqualified) {
+        this.isqualified = isqualified;
+    }
+
+    public String getChecktypeid() {
+        return checktypeid;
+    }
+
+    public void setChecktypeid(String checktypeid) {
+        this.checktypeid = checktypeid;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/HistoryStock.java b/src/main/java/com/gk/firework/Domain/HistoryStock.java
new file mode 100644
index 0000000..ca9490b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/HistoryStock.java
@@ -0,0 +1,238 @@
+package com.gk.firework.Domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import org.springframework.data.relational.core.mapping.Table;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@TableName("historystock")
+public class HistoryStock implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**   id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 企业ID  owner **/
+    private Long owner;
+
+    /** 企业名称  enterprisename **/
+    private String enterprisename;
+
+    /** 企业编号  enterprisenumber **/
+    private String enterprisenumber;
+
+    /** 企业类型  safetysupervision **/
+    private String safetysupervision;
+
+    /** 省  province **/
+    private String province;
+
+    /** 市  city **/
+    private String city;
+
+    /** 区  district **/
+    private String district;
+
+    /** 库存数量  stocknum **/
+    private BigDecimal stocknum;
+
+    /** 爆竹类数量  firecracker **/
+    private BigDecimal firecracker;
+
+    /** 喷花类数量  spray **/
+    private BigDecimal spray;
+
+    /** 旋转类数量  rotation **/
+    private BigDecimal rotation;
+
+    /** 吐珠类数量  bead **/
+    private BigDecimal bead;
+
+    /** 玩具类数量  toy **/
+    private BigDecimal toy;
+
+    /** 组合烟花类数量  combined **/
+    private BigDecimal combined;
+
+    /** 更新时间  updateat **/
+    private Date updateat;
+
+    /** 标记  flag **/
+    private Byte flag;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   企业ID  owner   **/
+    public Long getOwner() {
+        return owner;
+    }
+
+    /**   企业ID  owner   **/
+    public void setOwner(Long owner) {
+        this.owner = owner;
+    }
+
+    /**   企业名称  enterprisename   **/
+    public String getEnterprisename() {
+        return enterprisename;
+    }
+
+    /**   企业名称  enterprisename   **/
+    public void setEnterprisename(String enterprisename) {
+        this.enterprisename = enterprisename == null ? null : enterprisename.trim();
+    }
+
+    /**   企业编号  enterprisenumber   **/
+    public String getEnterprisenumber() {
+        return enterprisenumber;
+    }
+
+    /**   企业编号  enterprisenumber   **/
+    public void setEnterprisenumber(String enterprisenumber) {
+        this.enterprisenumber = enterprisenumber == null ? null : enterprisenumber.trim();
+    }
+
+    /**   企业类型  safetysupervision   **/
+    public String getSafetysupervision() {
+        return safetysupervision;
+    }
+
+    /**   企业类型  safetysupervision   **/
+    public void setSafetysupervision(String safetysupervision) {
+        this.safetysupervision = safetysupervision == null ? null : safetysupervision.trim();
+    }
+
+    /**   省  province   **/
+    public String getProvince() {
+        return province;
+    }
+
+    /**   省  province   **/
+    public void setProvince(String province) {
+        this.province = province == null ? null : province.trim();
+    }
+
+    /**   市  city   **/
+    public String getCity() {
+        return city;
+    }
+
+    /**   市  city   **/
+    public void setCity(String city) {
+        this.city = city == null ? null : city.trim();
+    }
+
+    /**   区  district   **/
+    public String getDistrict() {
+        return district;
+    }
+
+    /**   区  district   **/
+    public void setDistrict(String district) {
+        this.district = district == null ? null : district.trim();
+    }
+
+    /**   库存数量  stocknum   **/
+    public BigDecimal getStocknum() {
+        return stocknum;
+    }
+
+    /**   库存数量  stocknum   **/
+    public void setStocknum(BigDecimal stocknum) {
+        this.stocknum = stocknum;
+    }
+
+    /**   爆竹类数量  firecracker   **/
+    public BigDecimal getFirecracker() {
+        return firecracker;
+    }
+
+    /**   爆竹类数量  firecracker   **/
+    public void setFirecracker(BigDecimal firecracker) {
+        this.firecracker = firecracker;
+    }
+
+    /**   喷花类数量  spray   **/
+    public BigDecimal getSpray() {
+        return spray;
+    }
+
+    /**   喷花类数量  spray   **/
+    public void setSpray(BigDecimal spray) {
+        this.spray = spray;
+    }
+
+    /**   旋转类数量  rotation   **/
+    public BigDecimal getRotation() {
+        return rotation;
+    }
+
+    /**   旋转类数量  rotation   **/
+    public void setRotation(BigDecimal rotation) {
+        this.rotation = rotation;
+    }
+
+    /**   吐珠类数量  bead   **/
+    public BigDecimal getBead() {
+        return bead;
+    }
+
+    /**   吐珠类数量  bead   **/
+    public void setBead(BigDecimal bead) {
+        this.bead = bead;
+    }
+
+    /**   玩具类数量  toy   **/
+    public BigDecimal getToy() {
+        return toy;
+    }
+
+    /**   玩具类数量  toy   **/
+    public void setToy(BigDecimal toy) {
+        this.toy = toy;
+    }
+
+    /**   组合烟花类数量  combined   **/
+    public BigDecimal getCombined() {
+        return combined;
+    }
+
+    /**   组合烟花类数量  combined   **/
+    public void setCombined(BigDecimal combined) {
+        this.combined = combined;
+    }
+
+    /**   更新时间  updateat   **/
+    public Date getUpdateat() {
+        return updateat;
+    }
+
+    /**   更新时间  updateat   **/
+    public void setUpdateat(Date updateat) {
+        this.updateat = updateat;
+    }
+
+    /**   标记  flag   **/
+    public Byte getFlag() {
+        return flag;
+    }
+
+    /**   标记  flag   **/
+    public void setFlag(Byte flag) {
+        this.flag = flag;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/LicenseInfo.java b/src/main/java/com/gk/firework/Domain/LicenseInfo.java
new file mode 100644
index 0000000..307106c
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/LicenseInfo.java
@@ -0,0 +1,642 @@
+package com.gk.firework.Domain;
+
+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 com.fasterxml.jackson.annotation.JsonFormat;
+import com.gk.firework.Domain.Enum.LicenseStatus;
+
+import javax.validation.constraints.DecimalMin;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@TableName("license")
+public class LicenseInfo {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /**   id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 许可证编号  sn **/
+    private Integer sn;
+
+    /** 许可证编号  licensecode **/
+    private String licensecode;
+
+    /** 1.生产;2.批发;3.零售  type **/
+    private Byte type;
+
+    /** 单位名称  name **/
+    @NotBlank(message = "单位名称不能为空")
+    private String name;
+
+    /** 统一社会信用代码  code **/
+    @NotBlank(message = "统一社会信用代码不能为空")
+    private String code;
+
+    /** 主要负责人姓名  mainpersonname **/
+    @NotBlank(message = "主要负责人姓名不能为空")
+    private String mainpersonname;
+
+    /** 主要负责人身份证号码  mainpersonidcardnum **/
+    @NotBlank(message = "主要负责人身份证号码不能为空")
+    private String mainpersonidcardnum;
+
+    /** 主要负责人电话  mainpersontel **/
+    @NotBlank(message = "主要负责人电话不能为空")
+    private String mainpersontel;
+
+    /** 安全负责人姓名  safetypersonname **/
+    @NotBlank(message = "安全负责人姓名不能为空")
+    private String safetypersonname;
+
+    /** 安全负责人身份证号码  safetypersonidcardnum **/
+    @NotBlank(message = "安全负责人身份证号码不能为空")
+    private String safetypersonidcardnum;
+
+    /** 安全负责人电话  safetypersontel **/
+    @NotBlank(message = "安全负责人电话不能为空")
+    private String safetypersontel;
+
+    /** 省  province **/
+    private String province;
+
+    /** 市  city **/
+    private String city;
+
+    /** 区/县  district **/
+    private String district;
+
+    /** 详细地址  address **/
+    private String address;
+
+    /** 许可类型(1.长期;2.临时)  licensetype **/
+    private Byte licensetype;
+
+    /** 经营方式(1.专柜;2.专店)  dealingtype **/
+    private Byte dealingtype;
+
+    /** 经营面积(全部)  dealingarea **/
+    @DecimalMin(message = "经营面积(全部)填写错误",value = "0")
+    private BigDecimal dealingarea;
+
+    /** 经营面积(物品存放)  savearea **/
+    private BigDecimal savearea;
+
+    /** 核定储量(箱数)  reservebox **/
+    @DecimalMin(message = "核定储量(箱数)填写错误",value = "0")
+    private BigDecimal reservebox;
+
+    /** 核定储量(重量)  reservekg **/
+    @DecimalMin(message = "核定储量(重量)填写错误",value = "0")
+    private BigDecimal reservekg;
+
+    /** 生效日期  effectdate **/
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
+    private Date effectdate;
+
+    /** 失效日期  noeffectdate **/
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
+    private Date noeffectdate;
+
+    /** 延期日期  delaydate **/
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
+    private Date delaydate;
+
+    /** 发证机关  issuingunit **/
+    private String issuingunit;
+
+    /** 发证日期  issuingdate **/
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
+    private Date issuingdate;
+
+    /** 备注  remark **/
+    private String remark;
+
+    /** 经营范围  dealingrange **/
+    private String dealingrange;
+
+    /** 标记(预留)  flag **/
+    private Byte flag;
+
+    /** 创建人  createdby **/
+    private String createdby;
+
+    /** 创建时间  createdat **/
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
+    private Date createdat;
+
+    /** 修改人  modifiedby **/
+    private String modifiedby;
+
+    /** 修改时间  modifiedat **/
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")
+    private Date modifiedat;
+
+    /** 审核人  reviewer **/
+    private String reviewer;
+
+    /** 审核时间  reviewat **/
+    private Date reviewat;
+
+    /** 审核状态(0.未审核;1.已审核)  reviewstatus **/
+    private Byte reviewstatus;
+
+    /** 审核意见  reviewnote **/
+    private String reviewnote;
+
+    /** 发证类型(1.新发;2.延期;3.变更;4.重新申请)  granttype **/
+    private Byte granttype;
+
+    /** 状态(1.有效;2.注销)  status **/
+    private Byte status;
+
+    /** 打印状态(0.未打印;1.已打印)  printstatus **/
+    private Byte printstatus;
+
+    /** 仓储地址省市区 **/
+    private String storageprovince;
+
+    private String storagecity;
+
+    private String storagedistrict;
+
+    private String storageaddress;
+
+    private String economictype;
+
+    //许可证有效状态(-1无效,1有效)
+    private byte validstatus;
+
+    private LicenseStatus licensestatus;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Integer getSn() {
+        return sn;
+    }
+
+    public void setSn(Integer sn) {
+        this.sn = sn;
+    }
+
+    /**   许可证编号  licensecode   **/
+    public String getLicensecode() {
+        return licensecode;
+    }
+
+    /**   许可证编号  licensecode   **/
+    public void setLicensecode(String licensecode) {
+        this.licensecode = licensecode == null ? null : licensecode.trim();
+    }
+
+    /**   1.生产;2.批发;3.零售  type   **/
+    public Byte getType() {
+        return type;
+    }
+
+    /**   1.生产;2.批发;3.零售  type   **/
+    public void setType(Byte type) {
+        this.type = type;
+    }
+
+    /**   单位名称  name   **/
+    public String getName() {
+        return name;
+    }
+
+    /**   单位名称  name   **/
+    public void setName(String name) {
+        this.name = name == null ? null : name.trim();
+    }
+
+    /**   统一社会信用代码  code   **/
+    public String getCode() {
+        return code;
+    }
+
+    /**   统一社会信用代码  code   **/
+    public void setCode(String code) {
+        this.code = code == null ? null : code.trim();
+    }
+
+    /**   主要负责人姓名  mainpersonname   **/
+    public String getMainpersonname() {
+        return mainpersonname;
+    }
+
+    /**   主要负责人姓名  mainpersonname   **/
+    public void setMainpersonname(String mainpersonname) {
+        this.mainpersonname = mainpersonname == null ? null : mainpersonname.trim();
+    }
+
+    /**   主要负责人身份证号码  mainpersonidcardnum   **/
+    public String getMainpersonidcardnum() {
+        return mainpersonidcardnum;
+    }
+
+    /**   主要负责人身份证号码  mainpersonidcardnum   **/
+    public void setMainpersonidcardnum(String mainpersonidcardnum) {
+        this.mainpersonidcardnum = mainpersonidcardnum == null ? null : mainpersonidcardnum.trim();
+    }
+
+    /**   主要负责人电话  mainpersontel   **/
+    public String getMainpersontel() {
+        return mainpersontel;
+    }
+
+    /**   主要负责人电话  mainpersontel   **/
+    public void setMainpersontel(String mainpersontel) {
+        this.mainpersontel = mainpersontel == null ? null : mainpersontel.trim();
+    }
+
+    /**   安全负责人姓名  safetypersonname   **/
+    public String getSafetypersonname() {
+        return safetypersonname;
+    }
+
+    /**   安全负责人姓名  safetypersonname   **/
+    public void setSafetypersonname(String safetypersonname) {
+        this.safetypersonname = safetypersonname == null ? null : safetypersonname.trim();
+    }
+
+    /**   安全负责人身份证号码  safetypersonidcardnum   **/
+    public String getSafetypersonidcardnum() {
+        return safetypersonidcardnum;
+    }
+
+    /**   安全负责人身份证号码  safetypersonidcardnum   **/
+    public void setSafetypersonidcardnum(String safetypersonidcardnum) {
+        this.safetypersonidcardnum = safetypersonidcardnum == null ? null : safetypersonidcardnum.trim();
+    }
+
+    /**   安全负责人电话  safetypersontel   **/
+    public String getSafetypersontel() {
+        return safetypersontel;
+    }
+
+    /**   安全负责人电话  safetypersontel   **/
+    public void setSafetypersontel(String safetypersontel) {
+        this.safetypersontel = safetypersontel == null ? null : safetypersontel.trim();
+    }
+
+    /**   省  province   **/
+    public String getProvince() {
+        return province;
+    }
+
+    /**   省  province   **/
+    public void setProvince(String province) {
+        this.province = province == null ? null : province.trim();
+    }
+
+    /**   市  city   **/
+    public String getCity() {
+        return city;
+    }
+
+    /**   市  city   **/
+    public void setCity(String city) {
+        this.city = city == null ? null : city.trim();
+    }
+
+    /**   区/县  district   **/
+    public String getDistrict() {
+        return district;
+    }
+
+    /**   区/县  district   **/
+    public void setDistrict(String district) {
+        this.district = district == null ? null : district.trim();
+    }
+
+    /**   详细地址  address   **/
+    public String getAddress() {
+        return address;
+    }
+
+    /**   详细地址  address   **/
+    public void setAddress(String address) {
+        this.address = address == null ? null : address.trim();
+    }
+
+    /**   许可类型(1.长期;2.临时)  licensetype   **/
+    public Byte getLicensetype() {
+        return licensetype;
+    }
+
+    /**   许可类型(1.长期;2.临时)  licensetype   **/
+    public void setLicensetype(Byte licensetype) {
+        this.licensetype = licensetype;
+    }
+
+    /**   经营方式(1.专柜;2.专店)  dealingtype   **/
+    public Byte getDealingtype() {
+        return dealingtype;
+    }
+
+    /**   经营方式(1.专柜;2.专店)  dealingtype   **/
+    public void setDealingtype(Byte dealingtype) {
+        this.dealingtype = dealingtype;
+    }
+
+    /**   经营面积(全部)  dealingarea   **/
+    public BigDecimal getDealingarea() {
+        return dealingarea;
+    }
+
+    /**   经营面积(全部)  dealingarea   **/
+    public void setDealingarea(BigDecimal dealingarea) {
+        this.dealingarea = dealingarea;
+    }
+
+    /**   经营面积(物品存放)  savearea   **/
+    public BigDecimal getSavearea() {
+        return savearea;
+    }
+
+    /**   经营面积(物品存放)  savearea   **/
+    public void setSavearea(BigDecimal savearea) {
+        this.savearea = savearea;
+    }
+
+    /**   核定储量(箱数)  reservebox   **/
+    public BigDecimal getReservebox() {
+        return reservebox;
+    }
+
+    /**   核定储量(箱数)  reservebox   **/
+    public void setReservebox(BigDecimal reservebox) {
+        this.reservebox = reservebox;
+    }
+
+    /**   核定储量(重量)  reservekg   **/
+    public BigDecimal getReservekg() {
+        return reservekg;
+    }
+
+    /**   核定储量(重量)  reservekg   **/
+    public void setReservekg(BigDecimal reservekg) {
+        this.reservekg = reservekg;
+    }
+
+    /**   生效日期  effectdate   **/
+    public Date getEffectdate() {
+        return effectdate;
+    }
+
+    /**   生效日期  effectdate   **/
+    public void setEffectdate(Date effectdate) {
+        this.effectdate = effectdate;
+    }
+
+    /**   失效日期  noeffectdate   **/
+    public Date getNoeffectdate() {
+        return noeffectdate;
+    }
+
+    /**   失效日期  noeffectdate   **/
+    public void setNoeffectdate(Date noeffectdate) {
+        this.noeffectdate = noeffectdate;
+    }
+
+    /**   发证机关  issuingunit   **/
+    public String getIssuingunit() {
+        return issuingunit;
+    }
+
+    /**   发证机关  issuingunit   **/
+    public void setIssuingunit(String issuingunit) {
+        this.issuingunit = issuingunit == null ? null : issuingunit.trim();
+    }
+
+    /**   发证日期  issuingdate   **/
+    public Date getIssuingdate() {
+        return issuingdate;
+    }
+
+    /**   发证日期  issuingdate   **/
+    public void setIssuingdate(Date issuingdate) {
+        this.issuingdate = issuingdate;
+    }
+
+    /**   备注  remark   **/
+    public String getRemark() {
+        return remark;
+    }
+
+    /**   备注  remark   **/
+    public void setRemark(String remark) {
+        this.remark = remark == null ? null : remark.trim();
+    }
+
+    /**   经营范围  dealingrange   **/
+    public String getDealingrange() {
+        return dealingrange;
+    }
+
+    /**   经营范围  dealingrange   **/
+    public void setDealingrange(String dealingrange) {
+        this.dealingrange = dealingrange == null ? null : dealingrange.trim();
+    }
+
+    /**   标记(预留)  flag   **/
+    public Byte getFlag() {
+        return flag;
+    }
+
+    /**   标记(预留)  flag   **/
+    public void setFlag(Byte flag) {
+        this.flag = flag;
+    }
+
+    /**   创建人  createdby   **/
+    public String getCreatedby() {
+        return createdby;
+    }
+
+    /**   创建人  createdby   **/
+    public void setCreatedby(String createdby) {
+        this.createdby = createdby == null ? null : createdby.trim();
+    }
+
+    /**   创建时间  createdat   **/
+    public Date getCreatedat() {
+        return createdat;
+    }
+
+    /**   创建时间  createdat   **/
+    public void setCreatedat(Date createdat) {
+        this.createdat = createdat;
+    }
+
+    /**   修改人  modifiedby   **/
+    public String getModifiedby() {
+        return modifiedby;
+    }
+
+    /**   修改人  modifiedby   **/
+    public void setModifiedby(String modifiedby) {
+        this.modifiedby = modifiedby == null ? null : modifiedby.trim();
+    }
+
+    /**   修改时间  modifiedat   **/
+    public Date getModifiedat() {
+        return modifiedat;
+    }
+
+    /**   修改时间  modifiedat   **/
+    public void setModifiedat(Date modifiedat) {
+        this.modifiedat = modifiedat;
+    }
+
+    /**   审核人  reviewer   **/
+    public String getReviewer() {
+        return reviewer;
+    }
+
+    /**   审核人  reviewer   **/
+    public void setReviewer(String reviewer) {
+        this.reviewer = reviewer == null ? null : reviewer.trim();
+    }
+
+    /**   审核时间  reviewat   **/
+    public Date getReviewat() {
+        return reviewat;
+    }
+
+    /**   审核时间  reviewat   **/
+    public void setReviewat(Date reviewat) {
+        this.reviewat = reviewat;
+    }
+
+    /**   审核状态(0.未审核;1.已审核)  reviewstatus   **/
+    public Byte getReviewstatus() {
+        return reviewstatus;
+    }
+
+    /**   审核状态(0.未审核;1.已审核)  reviewstatus   **/
+    public void setReviewstatus(Byte reviewstatus) {
+        this.reviewstatus = reviewstatus;
+    }
+
+    /**   审核意见  reviewnote   **/
+    public String getReviewnote() {
+        return reviewnote;
+    }
+
+    /**   审核意见  reviewnote   **/
+    public void setReviewnote(String reviewnote) {
+        this.reviewnote = reviewnote == null ? null : reviewnote.trim();
+    }
+
+    /**   发证类型(1.新发;2.延期;3.变更;4.重新申请)  granttype   **/
+    public Byte getGranttype() {
+        return granttype;
+    }
+
+    /**   发证类型(1.新发;2.延期;3.变更;4.重新申请)  granttype   **/
+    public void setGranttype(Byte granttype) {
+        this.granttype = granttype;
+    }
+
+    /**   状态(1.有效;2.注销)  status   **/
+    public Byte getStatus() {
+        return status;
+    }
+
+    /**   状态(1.有效;2.注销)  status   **/
+    public void setStatus(Byte status) {
+        this.status = status;
+    }
+
+    /**   打印状态(0.未打印;1.已打印)  printstatus   **/
+    public Byte getPrintstatus() {
+        return printstatus;
+    }
+
+    /**   打印状态(0.未打印;1.已打印)  printstatus   **/
+    public void setPrintstatus(Byte printstatus) {
+        this.printstatus = printstatus;
+    }
+
+    public Date getDelaydate() {
+        return delaydate;
+    }
+
+    public void setDelaydate(Date delaydate) {
+        this.delaydate = delaydate;
+    }
+
+    public String getStorageprovince() {
+        return storageprovince;
+    }
+
+    public void setStorageprovince(String storageprovince) {
+        this.storageprovince = storageprovince;
+    }
+
+    public String getStoragecity() {
+        return storagecity;
+    }
+
+    public void setStoragecity(String storagecity) {
+        this.storagecity = storagecity;
+    }
+
+    public String getStoragedistrict() {
+        return storagedistrict;
+    }
+
+    public void setStoragedistrict(String storagedistrict) {
+        this.storagedistrict = storagedistrict;
+    }
+
+    public String getStorageaddress() {
+        return storageaddress;
+    }
+
+    public void setStorageaddress(String storageaddress) {
+        this.storageaddress = storageaddress;
+    }
+
+
+    public String getEconomictype() {
+        return economictype;
+    }
+
+    public void setEconomictype(String economictype) {
+        this.economictype = economictype;
+    }
+
+
+    public LicenseStatus getLicensestatus() {
+        return licensestatus;
+    }
+
+    public void setLicensestatus(LicenseStatus licensestatus) {
+        this.licensestatus = licensestatus;
+    }
+
+
+    public byte getValidstatus() {
+        return validstatus;
+    }
+
+    public void setValidstatus(byte validstatus) {
+        this.validstatus = validstatus;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/LicenseStorage.java b/src/main/java/com/gk/firework/Domain/LicenseStorage.java
new file mode 100644
index 0000000..4247a3b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/LicenseStorage.java
@@ -0,0 +1,191 @@
+package com.gk.firework.Domain;
+
+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 java.math.BigDecimal;
+
+@TableName("licensestorage")
+public class LicenseStorage {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /**   id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 许可证编号  licensecode **/
+    private String licensecode;
+
+    /** 库区数量  area **/
+    private Integer area;
+
+    /** 库房数量  storagenum **/
+    private Integer storagenum;
+
+    /** 库房面积  storagearea **/
+    private BigDecimal storagearea;
+
+    /** 核定药量 千克(kg)  powder **/
+    private BigDecimal powder;
+
+    /** 1.1级库房数量  firststoragenum **/
+    private Integer firststoragenum;
+
+    /** 1.1级库房面积  firststoragearea **/
+    private BigDecimal firststoragearea;
+
+    /** 1.1级库房核定药量 千克(kg)  firstpowder **/
+    private BigDecimal firstpowder;
+
+    /** 1.3级库房数量  thirdstoragenum **/
+    private Integer thirdstoragenum;
+
+    /** 1.3级库房面积  thirdtoragearea **/
+    private BigDecimal thirdstoragearea;
+
+    /** 1.3级库房核定药量 千克(kg)  thirdpowder **/
+    private BigDecimal thirdpowder;
+
+    /** 库房类型(1.危险品中转库;2.药物总库;3.成品总库)  type **/
+    private Byte type;
+
+    /** 标记(预留)  flag **/
+    private Byte flag;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getLicensecode() {
+        return licensecode;
+    }
+
+    public void setLicensecode(String licensecode) {
+        this.licensecode = licensecode;
+    }
+
+    public Integer getArea() {
+        return area;
+    }
+
+    public void setArea(Integer area) {
+        this.area = area;
+    }
+
+    /**   库房数量  storagenum   **/
+    public Integer getStoragenum() {
+        return storagenum;
+    }
+
+    /**   库房数量  storagenum   **/
+    public void setStoragenum(Integer storagenum) {
+        this.storagenum = storagenum;
+    }
+
+    /**   库房面积  storagearea   **/
+    public BigDecimal getStoragearea() {
+        return storagearea;
+    }
+
+    /**   库房面积  storagearea   **/
+    public void setStoragearea(BigDecimal storagearea) {
+        this.storagearea = storagearea;
+    }
+
+    /**   核定药量 千克(kg)  powder   **/
+    public BigDecimal getPowder() {
+        return powder;
+    }
+
+    /**   核定药量 千克(kg)  powder   **/
+    public void setPowder(BigDecimal powder) {
+        this.powder = powder;
+    }
+
+    /**   1.1级库房数量  firststoragenum   **/
+    public Integer getFirststoragenum() {
+        return firststoragenum;
+    }
+
+    /**   1.1级库房数量  firststoragenum   **/
+    public void setFirststoragenum(Integer firststoragenum) {
+        this.firststoragenum = firststoragenum;
+    }
+
+    /**   1.1级库房面积  firststoragearea   **/
+    public BigDecimal getFirststoragearea() {
+        return firststoragearea;
+    }
+
+    /**   1.1级库房面积  firststoragearea   **/
+    public void setFirststoragearea(BigDecimal firststoragearea) {
+        this.firststoragearea = firststoragearea;
+    }
+
+    /**   1.1级库房核定药量 千克(kg)  firstpowder   **/
+    public BigDecimal getFirstpowder() {
+        return firstpowder;
+    }
+
+    /**   1.1级库房核定药量 千克(kg)  firstpowder   **/
+    public void setFirstpowder(BigDecimal firstpowder) {
+        this.firstpowder = firstpowder;
+    }
+
+    /**   1.3级库房数量  thirdstoragenum   **/
+    public Integer getThirdstoragenum() {
+        return thirdstoragenum;
+    }
+
+    /**   1.3级库房数量  thirdstoragenum   **/
+    public void setThirdstoragenum(Integer thirdstoragenum) {
+        this.thirdstoragenum = thirdstoragenum;
+    }
+
+    public BigDecimal getThirdstoragearea() {
+        return thirdstoragearea;
+    }
+
+    public void setThirdstoragearea(BigDecimal thirdstoragearea) {
+        this.thirdstoragearea = thirdstoragearea;
+    }
+
+    /**   1.3级库房核定药量 千克(kg)  thirdpowder   **/
+    public BigDecimal getThirdpowder() {
+        return thirdpowder;
+    }
+
+    /**   1.3级库房核定药量 千克(kg)  thirdpowder   **/
+    public void setThirdpowder(BigDecimal thirdpowder) {
+        this.thirdpowder = thirdpowder;
+    }
+
+    /**   库房类型(1.危险品中转库;2.药物总库;3.成品总库)  type   **/
+    public Byte getType() {
+        return type;
+    }
+
+    /**   库房类型(1.危险品中转库;2.药物总库;3.成品总库)  type   **/
+    public void setType(Byte type) {
+        this.type = type;
+    }
+
+    /**   标记(预留)  flag   **/
+    public Byte getFlag() {
+        return flag;
+    }
+
+    /**   标记(预留)  flag   **/
+    public void setFlag(Byte flag) {
+        this.flag = flag;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Log/JsonParams.java b/src/main/java/com/gk/firework/Domain/Log/JsonParams.java
new file mode 100644
index 0000000..069a46f
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Log/JsonParams.java
@@ -0,0 +1,12 @@
+package com.gk.firework.Domain.Log;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface JsonParams {
+
+}
diff --git a/src/main/java/com/gk/firework/Domain/PatrolDetailInfo.java b/src/main/java/com/gk/firework/Domain/PatrolDetailInfo.java
new file mode 100644
index 0000000..88d7716
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/PatrolDetailInfo.java
@@ -0,0 +1,181 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.util.Date;
+
+@TableName("patroldetail")
+public class PatrolDetailInfo implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** patrolorder表id   orderid **/
+    private Long orderid;
+
+    /**检查内容  content **/
+    private String content;
+
+    /** 参考判断  standard **/
+    private String standard;
+
+    private String choose;
+
+    /**理由   reason **/
+    private String reason;
+
+    /**整改前图片   beforepath **/
+    private String beforepath;
+
+    /**整改后图片   afterpath **/
+    private String afterpath;
+
+    /**是否整改   ismend **/
+    private Byte ismend;
+
+    /**创建人   createdby **/
+    private String createdby;
+
+    /**创建时间   createddate **/
+    private Date createddate;
+
+    /**更新人   modifiedby **/
+    private String modifiedby;
+
+    /** 更新时间  modifieddate **/
+    private Date modifieddate;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**     orderid   **/
+    public Long getOrderid() {
+        return orderid;
+    }
+
+    /**     orderid   **/
+    public void setOrderid(Long orderid) {
+        this.orderid = orderid;
+    }
+
+    /**     content   **/
+    public String getContent() {
+        return content;
+    }
+
+    /**     content   **/
+    public void setContent(String content) {
+        this.content = content == null ? null : content.trim();
+    }
+
+    /**     standard   **/
+    public String getStandard() {
+        return standard;
+    }
+
+    /**     standard   **/
+    public void setStandard(String standard) {
+        this.standard = standard == null ? null : standard.trim();
+    }
+
+    /**     reason   **/
+    public String getReason() {
+        return reason;
+    }
+
+    /**     reason   **/
+    public void setReason(String reason) {
+        this.reason = reason == null ? null : reason.trim();
+    }
+
+    /**     beforepath   **/
+    public String getBeforepath() {
+        return beforepath;
+    }
+
+    /**     beforepath   **/
+    public void setBeforepath(String beforepath) {
+        this.beforepath = beforepath == null ? null : beforepath.trim();
+    }
+
+    /**     afterpath   **/
+    public String getAfterpath() {
+        return afterpath;
+    }
+
+    /**     afterpath   **/
+    public void setAfterpath(String afterpath) {
+        this.afterpath = afterpath == null ? null : afterpath.trim();
+    }
+
+    /**     ismend   **/
+    public Byte getIsmend() {
+        return ismend;
+    }
+
+    /**     ismend   **/
+    public void setIsmend(Byte ismend) {
+        this.ismend = ismend;
+    }
+
+    /**     createdby   **/
+    public String getCreatedby() {
+        return createdby;
+    }
+
+    /**     createdby   **/
+    public void setCreatedby(String createdby) {
+        this.createdby = createdby == null ? null : createdby.trim();
+    }
+
+    /**     createddate   **/
+    public Date getCreateddate() {
+        return createddate;
+    }
+
+    /**     createddate   **/
+    public void setCreateddate(Date createddate) {
+        this.createddate = createddate;
+    }
+
+    /**     modifiedby   **/
+    public String getModifiedby() {
+        return modifiedby;
+    }
+
+    /**     modifiedby   **/
+    public void setModifiedby(String modifiedby) {
+        this.modifiedby = modifiedby == null ? null : modifiedby.trim();
+    }
+
+    /**     modifieddate   **/
+    public Date getModifieddate() {
+        return modifieddate;
+    }
+
+    /**     modifieddate   **/
+    public void setModifieddate(Date modifieddate) {
+        this.modifieddate = modifieddate;
+    }
+
+    public String getChoose() {
+        return choose;
+    }
+
+    public void setChoose(String choose) {
+        this.choose = choose;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/PatrolOrderInfo.java b/src/main/java/com/gk/firework/Domain/PatrolOrderInfo.java
new file mode 100644
index 0000000..d8ed5e6
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/PatrolOrderInfo.java
@@ -0,0 +1,119 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.util.Date;
+
+@TableName("patrolorder")
+public class PatrolOrderInfo implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 检查人用户id  userid **/
+    private Long userid;
+
+    /**企业id   companyid **/
+    private Long companyid;
+
+    /**是否整改 1整改 0未整改   ismend **/
+    private Byte ismend;
+
+    /**创建人   createdby **/
+    private String createdby;
+
+    /** 创建时间  createddate **/
+    private Date createddate;
+
+    /** 更新人  modifiedby **/
+    private String modifiedby;
+
+    /** 更新时间  modifieddate **/
+    private Date modifieddate;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**     userid   **/
+    public Long getUserid() {
+        return userid;
+    }
+
+    /**     userid   **/
+    public void setUserid(Long userid) {
+        this.userid = userid;
+    }
+
+    /**     companyid   **/
+    public Long getCompanyid() {
+        return companyid;
+    }
+
+    /**     companyid   **/
+    public void setCompanyid(Long companyid) {
+        this.companyid = companyid;
+    }
+
+    /**     ismend   **/
+    public Byte getIsmend() {
+        return ismend;
+    }
+
+    /**     ismend   **/
+    public void setIsmend(Byte ismend) {
+        this.ismend = ismend;
+    }
+
+    /**     createdby   **/
+    public String getCreatedby() {
+        return createdby;
+    }
+
+    /**     createdby   **/
+    public void setCreatedby(String createdby) {
+        this.createdby = createdby == null ? null : createdby.trim();
+    }
+
+    /**     createddate   **/
+    public Date getCreateddate() {
+        return createddate;
+    }
+
+    /**     createddate   **/
+    public void setCreateddate(Date createddate) {
+        this.createddate = createddate;
+    }
+
+    /**     modifiedby   **/
+    public String getModifiedby() {
+        return modifiedby;
+    }
+
+    /**     modifiedby   **/
+    public void setModifiedby(String modifiedby) {
+        this.modifiedby = modifiedby == null ? null : modifiedby.trim();
+    }
+
+    /**     modifieddate   **/
+    public Date getModifieddate() {
+        return modifieddate;
+    }
+
+    /**     modifieddate   **/
+    public void setModifieddate(Date modifieddate) {
+        this.modifieddate = modifieddate;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/PermissionInfo.java b/src/main/java/com/gk/firework/Domain/PermissionInfo.java
new file mode 100644
index 0000000..2e47350
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/PermissionInfo.java
@@ -0,0 +1,273 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.util.Date;
+
+@TableName("permission")
+public class PermissionInfo implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /** 名称  name **/
+    private String name;
+
+    /** 菜单层级  level **/
+    private Integer level;
+
+    /** 菜单标题  title **/
+    private String title;
+
+    /** 页面路径/资源链接url  path **/
+    private String path;
+
+    /** 前端组件  component **/
+    private String component;
+
+    /** 图标  icon **/
+    private String icon;
+
+    /** 按钮权限类型  buttonType **/
+    private String buttontype;
+
+    /** 状态  status 是否启用 1启用 -1禁用**/
+    private Integer status;
+
+    /** 描述  description **/
+    private String description;
+
+    /** 排序  sortOrder **/
+    private Double sortorder;
+
+    /** 类型  type   1菜单  2按钮  3功能 4数据权限 **/
+    private Integer type;
+
+    /** 拓展 节点展开 前端所需  expand **/
+    private Boolean expand;
+
+    /** 是否勾选 前端所需  checked **/
+    private Boolean checked;
+
+    /** 是否选中 前端所需  selected **/
+    private Boolean selected;
+
+    /** 创建人  createdBy **/
+    private String createdby;
+
+    /** 创建时间  createdDate **/
+    private Date createddate;
+
+    /** 更新人  lastModifiedBy **/
+    private String lastmodifiedby;
+
+    /** 更新时间  lastModifiedDate **/
+    private Date lastmodifieddate;
+
+    /** 父id  parentid **/
+    private Integer parentid;
+
+    /**   id  id   **/
+    public Integer getId() {
+        return id;
+    }
+
+    /**   id  id   **/
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    /**   名称  name   **/
+    public String getName() {
+        return name;
+    }
+
+    /**   名称  name   **/
+    public void setName(String name) {
+        this.name = name == null ? null : name.trim();
+    }
+
+    /**   级别  level   **/
+    public Integer getLevel() {
+        return level;
+    }
+
+    /**   级别  level   **/
+    public void setLevel(Integer level) {
+        this.level = level;
+    }
+
+    /**   名称  title   **/
+    public String getTitle() {
+        return title;
+    }
+
+    /**   名称  title   **/
+    public void setTitle(String title) {
+        this.title = title == null ? null : title.trim();
+    }
+
+    /**   路径  path   **/
+    public String getPath() {
+        return path;
+    }
+
+    /**   路径  path   **/
+    public void setPath(String path) {
+        this.path = path == null ? null : path.trim();
+    }
+
+    /**   接口路径  component   **/
+    public String getComponent() {
+        return component;
+    }
+
+    /**   接口路径  component   **/
+    public void setComponent(String component) {
+        this.component = component == null ? null : component.trim();
+    }
+
+    /**   图标  icon   **/
+    public String getIcon() {
+        return icon;
+    }
+
+    /**   图标  icon   **/
+    public void setIcon(String icon) {
+        this.icon = icon == null ? null : icon.trim();
+    }
+
+    /**   按钮类型  buttonType   **/
+    public String getButtontype() {
+        return buttontype;
+    }
+
+    /**   按钮类型  buttonType   **/
+    public void setButtontype(String buttontype) {
+        this.buttontype = buttontype == null ? null : buttontype.trim();
+    }
+
+    /**   状态  status   **/
+    public Integer getStatus() {
+        return status;
+    }
+
+    /**   状态  status   **/
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    /**   描述  description   **/
+    public String getDescription() {
+        return description;
+    }
+
+    /**   描述  description   **/
+    public void setDescription(String description) {
+        this.description = description == null ? null : description.trim();
+    }
+
+    /**   排序  sortOrder   **/
+    public Double getSortorder() {
+        return sortorder;
+    }
+
+    /**   排序  sortOrder   **/
+    public void setSortorder(Double sortorder) {
+        this.sortorder = sortorder;
+    }
+
+    /**   类型  type   **/
+    public Integer getType() {
+        return type;
+    }
+
+    /**   类型  type   **/
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    /**   拓展  expand   **/
+    public Boolean getExpand() {
+        return expand;
+    }
+
+    /**   拓展  expand   **/
+    public void setExpand(Boolean expand) {
+        this.expand = expand;
+    }
+
+    /**   是否检查  checked   **/
+    public Boolean getChecked() {
+        return checked;
+    }
+
+    /**   是否检查  checked   **/
+    public void setChecked(Boolean checked) {
+        this.checked = checked;
+    }
+
+    /**   是否选中  selected   **/
+    public Boolean getSelected() {
+        return selected;
+    }
+
+    /**   是否选中  selected   **/
+    public void setSelected(Boolean selected) {
+        this.selected = selected;
+    }
+
+    /**   创建人  createdBy   **/
+    public String getCreatedby() {
+        return createdby;
+    }
+
+    /**   创建人  createdBy   **/
+    public void setCreatedby(String createdby) {
+        this.createdby = createdby == null ? null : createdby.trim();
+    }
+
+    /**   创建时间  createdDate   **/
+    public Date getCreateddate() {
+        return createddate;
+    }
+
+    /**   创建时间  createdDate   **/
+    public void setCreateddate(Date createddate) {
+        this.createddate = createddate;
+    }
+
+    /**   更新人  lastModifiedBy   **/
+    public String getLastmodifiedby() {
+        return lastmodifiedby;
+    }
+
+    /**   更新人  lastModifiedBy   **/
+    public void setLastmodifiedby(String lastmodifiedby) {
+        this.lastmodifiedby = lastmodifiedby == null ? null : lastmodifiedby.trim();
+    }
+
+    /**   更新时间  lastModifiedDate   **/
+    public Date getLastmodifieddate() {
+        return lastmodifieddate;
+    }
+
+    /**   更新时间  lastModifiedDate   **/
+    public void setLastmodifieddate(Date lastmodifieddate) {
+        this.lastmodifieddate = lastmodifieddate;
+    }
+
+    public Integer getParentid() {
+        return parentid;
+    }
+
+    public void setParentid(Integer parentid) {
+        this.parentid = parentid;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/ProductCategory.java b/src/main/java/com/gk/firework/Domain/ProductCategory.java
new file mode 100644
index 0000000..f276aff
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/ProductCategory.java
@@ -0,0 +1,138 @@
+package com.gk.firework.Domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+@TableName("productcategory")
+public class ProductCategory {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 1.大类;2.小类  type **/
+    private Byte type;
+
+    /** 类别编码  code **/
+    private String code;
+
+    /** 类别名称  name **/
+    private String name;
+
+    /** 小类对应的大类名称  parentname **/
+    private String parentname;
+
+    /** 类别说明  content **/
+    private String content;
+
+    /** 备注  remark **/
+    private String remark;
+
+    /** 备用字段  flag **/
+    private Byte flag;
+
+    /** 等级(A/B/C/D)level **/
+    private String level;
+
+    /** 生成产品编码的一字节编码 bitcodee **/
+    private String bitcode;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   1.大类;2.小类  type   **/
+    public Byte getType() {
+        return type;
+    }
+
+    /**   1.大类;2.小类  type   **/
+    public void setType(Byte type) {
+        this.type = type;
+    }
+
+    /**   类别编码  code   **/
+    public String getCode() {
+        return code;
+    }
+
+    /**   类别编码  code   **/
+    public void setCode(String code) {
+        this.code = code == null ? null : code.trim();
+    }
+
+    /**   类别名称  name   **/
+    public String getName() {
+        return name;
+    }
+
+    /**   类别名称  name   **/
+    public void setName(String name) {
+        this.name = name == null ? null : name.trim();
+    }
+
+    /**   小类对应的大类名称  parentname   **/
+    public String getParentname() {
+        return parentname;
+    }
+
+    /**   小类对应的大类名称  parentname   **/
+    public void setParentname(String parentname) {
+        this.parentname = parentname == null ? null : parentname.trim();
+    }
+
+    /**   类别说明  content   **/
+    public String getContent() {
+        return content;
+    }
+
+    /**   类别说明  content   **/
+    public void setContent(String content) {
+        this.content = content == null ? null : content.trim();
+    }
+
+    /**   备注  remark   **/
+    public String getRemark() {
+        return remark;
+    }
+
+    /**   备注  remark   **/
+    public void setRemark(String remark) {
+        this.remark = remark == null ? null : remark.trim();
+    }
+
+    /**   备用字段  flag   **/
+    public Byte getFlag() {
+        return flag;
+    }
+
+    /**   备用字段  flag   **/
+    public void setFlag(Byte flag) {
+        this.flag = flag;
+    }
+
+    public String getLevel() {
+        return level;
+    }
+
+    public void setLevel(String level) {
+        this.level = level;
+    }
+
+    public String getBitcode() {
+        return bitcode;
+    }
+
+    public void setBitcode(String bitcode) {
+        this.bitcode = bitcode;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/ProductCodeInfo.java b/src/main/java/com/gk/firework/Domain/ProductCodeInfo.java
new file mode 100644
index 0000000..918bc02
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/ProductCodeInfo.java
@@ -0,0 +1,177 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@TableName(value = "productcode")
+public class ProductCodeInfo implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /**   id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 合同单号  ordercode **/
+    private String ordercode;
+
+    /** 外包装箱码  originalcode **/
+    private String originalcode;
+
+    /** 产品名称  itemname **/
+    private String itemname;
+
+    /** 生产厂家  manufacturer **/
+    private String manufacturer;
+
+    /** 含药量(一般为数字,部分含有单位)  explosivecontent **/
+    private String explosivecontent;
+
+    /** 箱数(正整数)  boxnumber **/
+    private Integer boxnumber;
+
+    /** (烟花爆竹)类型(爆竹类,单个爆竹类,喷花类,日景烟花,吐珠类,造型玩具类,玩具烟花类,线香类,组合类,组合烟花,组合烟花类,组合盆花类,鞭炮类,火箭类,旋转类,升空类,旋转升空类,冷光类,烟雾类,摩擦类,小礼花类,礼花弹类,架子烟类,引火线,黑火药,烟火药,氯酸钾,精品礼品箱类,彩箱烟花类,单个爆竹类,玩具类,同类组合烟花)  type **/
+    private String type;
+
+    /** 产品等级(ABCD级)  level **/
+    private String level;
+
+    /** 创建人  createdby **/
+    private String createdby;
+
+    /** 创建时间  createddate **/
+    private Date createddate;
+
+    //单箱进价
+    private BigDecimal price;
+
+    private Byte isdel;
+
+    /**   id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   合同单号  ordercode   **/
+    public String getOrdercode() {
+        return ordercode;
+    }
+
+    /**   合同单号  ordercode   **/
+    public void setOrdercode(String ordercode) {
+        this.ordercode = ordercode == null ? null : ordercode.trim();
+    }
+
+    /**   外包装箱码  originalcode   **/
+    public String getOriginalcode() {
+        return originalcode;
+    }
+
+    /**   外包装箱码  originalcode   **/
+    public void setOriginalcode(String originalcode) {
+        this.originalcode = originalcode == null ? null : originalcode.trim();
+    }
+
+    /**   产品名称  itemname   **/
+    public String getItemname() {
+        return itemname;
+    }
+
+    /**   产品名称  itemname   **/
+    public void setItemname(String itemname) {
+        this.itemname = itemname == null ? null : itemname.trim();
+    }
+
+    /**   生产厂家  manufacturer   **/
+    public String getManufacturer() {
+        return manufacturer;
+    }
+
+    /**   生产厂家  manufacturer   **/
+    public void setManufacturer(String manufacturer) {
+        this.manufacturer = manufacturer == null ? null : manufacturer.trim();
+    }
+
+    /**   含药量(一般为数字,部分含有单位)  explosivecontent   **/
+    public String getExplosivecontent() {
+        return explosivecontent;
+    }
+
+    /**   含药量(一般为数字,部分含有单位)  explosivecontent   **/
+    public void setExplosivecontent(String explosivecontent) {
+        this.explosivecontent = explosivecontent == null ? null : explosivecontent.trim();
+    }
+
+    /**   箱数(正整数)  boxnumber   **/
+    public Integer getBoxnumber() {
+        return boxnumber;
+    }
+
+    /**   箱数(正整数)  boxnumber   **/
+    public void setBoxnumber(Integer boxnumber) {
+        this.boxnumber = boxnumber;
+    }
+
+    /**   创建人  createdby   **/
+    public String getCreatedby() {
+        return createdby;
+    }
+
+    /**   创建人  createdby   **/
+    public void setCreatedby(String createdby) {
+        this.createdby = createdby == null ? null : createdby.trim();
+    }
+
+    /**   创建时间  createddate   **/
+    public Date getCreateddate() {
+        return createddate;
+    }
+
+    /**   创建时间  createddate   **/
+    public void setCreateddate(Date createddate) {
+        this.createddate = createddate;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getLevel() {
+        return level;
+    }
+
+    public void setLevel(String level) {
+        this.level = level;
+    }
+
+    public BigDecimal getPrice() {
+        return price;
+    }
+
+    public void setPrice(BigDecimal price) {
+        this.price = price;
+    }
+
+    public Byte getIsdel() {
+        return isdel;
+    }
+
+    public void setIsdel(Byte isdel) {
+        this.isdel = isdel;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/ProductInfo.java b/src/main/java/com/gk/firework/Domain/ProductInfo.java
new file mode 100644
index 0000000..e4c1e7e
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/ProductInfo.java
@@ -0,0 +1,298 @@
+package com.gk.firework.Domain;
+
+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 com.fasterxml.jackson.annotation.JsonFormat;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@TableName(value = "product",resultMap = "BaseResultMap")
+public class ProductInfo implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /**   id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 产品名(限制长度255)  name **/
+    @NotBlank(message = "产品名不能为空")
+    private String name;
+
+    /** 流向码(十位)  directionCode **/
+//    @NotBlank(message = "流向码不能为空")
+    @TableField(value = "directioncode")
+    private String directionCode;
+
+    /** 进价  purchasePrice **/
+    @TableField(value = "purchaseprice")
+    private BigDecimal purchasePrice;
+
+    /** 售价  salePrice **/
+    @TableField(value = "saleprice")
+    private BigDecimal salePrice;
+
+    /** 生产厂家  manufacturer **/
+    @NotBlank(message = "生产厂家不能为空")
+    private String manufacturer;
+
+    /** 规格(一般为2位字母数字组合)  specification **/
+    @NotBlank(message = "规格不能为空")
+    private String specification;
+
+    /** 含药量(一般为数字,部分含有单位)  explosiveContent **/
+    @NotNull(message = "含药量不能为空")
+    @TableField(value = "explosivecontent")
+    private BigDecimal explosiveContent;
+
+    /** (烟花爆竹)类型(爆竹类,单个爆竹类,喷花类,日景烟花,吐珠类,造型玩具类,玩具烟花类,线香类,组合类,组合烟花,组合烟花类,组合盆花类,鞭炮类,火箭类,旋转类,升空类,旋转升空类,冷光类,烟雾类,摩擦类,小礼花类,礼花弹类,架子烟类,引火线,黑火药,烟火药,氯酸钾,精品礼品箱类,彩箱烟花类,单个爆竹类,玩具类,同类组合烟花)  type **/
+    @NotBlank(message = "类型不能为空")
+    private String type;
+    @TableField(value = "secondarytype")
+    private String secondaryType;
+
+    /** 产品等级(ABCD级)  level **/
+    @NotBlank(message = "产品等级不能为空")
+    private String level;
+
+    /** 生产日期  productDate **/
+    @NotNull(message = "生产日期不能为空")
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @TableField(value = "productdate")
+    private Date productDate;
+
+    /** 箱数(正整数)  boxNumber **/
+    @NotNull(message = "箱数不能为空")
+    @TableField(value = "boxnumber")
+    private Integer boxNumber;
+
+    /** 包装方式  packing **/
+    private String packing;
+
+    /** 删除标记(0:未删除,1:删除)  isDel **/
+    @TableField(value = "isdel")
+    private Byte isDel;
+
+    /** 创建人  createdBy **/
+    @TableField(value = "createdby")
+    private String createdBy;
+
+    /** 修改人  modifiedBy **/
+    @TableField(value = "modifiedby")
+    private String modifiedBy;
+
+    /** 创建时间  createdDate **/
+    @TableField(value = "createddate")
+    private Date createdDate;
+
+    /** 修改时间  modifiedDate **/
+    @TableField(value = "modifieddate")
+    private Date modifiedDate;
+
+    /** 企业单位编号  companyNumber **/
+    @TableField(value = "companynumber")
+    private String companyNumber;
+
+    @TableField(value = "isold")
+    private Byte isOld;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   产品名(限制长度255)  name   **/
+    public String getName() {
+        return name;
+    }
+
+    /**   产品名(限制长度255)  name   **/
+    public void setName(String name) {
+        this.name = name == null ? null : name.trim();
+    }
+
+    /**   流向码(十位)  directionCode   **/
+    public String getDirectionCode() {
+        return directionCode;
+    }
+
+    /**   流向码(十位)  directionCode   **/
+    public void setDirectionCode(String directionCode) {
+        this.directionCode = directionCode == null ? null : directionCode.trim();
+    }
+
+    /**   进价  purchasePrice   **/
+    public BigDecimal getPurchasePrice() {
+        return purchasePrice;
+    }
+
+    /**   进价  purchasePrice   **/
+    public void setPurchasePrice(BigDecimal purchasePrice) {
+        this.purchasePrice = purchasePrice;
+    }
+
+    /**   售价  salePrice   **/
+    public BigDecimal getSalePrice() {
+        return salePrice;
+    }
+
+    /**   售价  salePrice   **/
+    public void setSalePrice(BigDecimal salePrice) {
+        this.salePrice = salePrice;
+    }
+
+    /**   生产厂家  manufacturer   **/
+    public String getManufacturer() {
+        return manufacturer;
+    }
+
+    /**   生产厂家  manufacturer   **/
+    public void setManufacturer(String manufacturer) {
+        this.manufacturer = manufacturer == null ? null : manufacturer.trim();
+    }
+
+    /**   规格(一般为2位字母数字组合)  specification   **/
+    public String getSpecification() {
+        return specification;
+    }
+
+    /**   规格(一般为2位字母数字组合)  specification   **/
+    public void setSpecification(String specification) {
+        this.specification = specification == null ? null : specification.trim();
+    }
+
+    /**   含药量(一般为数字,部分含有单位)  explosiveContent   **/
+    public BigDecimal getExplosiveContent() {
+        return explosiveContent;
+    }
+
+    /**   含药量(一般为数字,部分含有单位)  explosiveContent   **/
+    public void setExplosiveContent(BigDecimal explosiveContent) {
+        this.explosiveContent = explosiveContent;
+    }
+
+    /**   (烟花爆竹)类型(爆竹类,单个爆竹类,喷花类,日景烟花,吐珠类,造型玩具类,玩具烟花类,线香类,组合类,组合烟花,组合烟花类,组合盆花类,鞭炮类,火箭类,旋转类,升空类,旋转升空类,冷光类,烟雾类,摩擦类,小礼花类,礼花弹类,架子烟类,引火线,黑火药,烟火药,氯酸钾,精品礼品箱类,彩箱烟花类,单个爆竹类,玩具类,同类组合烟花)  type   **/
+    public String getType() {
+        return type;
+    }
+
+    /**   (烟花爆竹)类型(爆竹类,单个爆竹类,喷花类,日景烟花,吐珠类,造型玩具类,玩具烟花类,线香类,组合类,组合烟花,组合烟花类,组合盆花类,鞭炮类,火箭类,旋转类,升空类,旋转升空类,冷光类,烟雾类,摩擦类,小礼花类,礼花弹类,架子烟类,引火线,黑火药,烟火药,氯酸钾,精品礼品箱类,彩箱烟花类,单个爆竹类,玩具类,同类组合烟花)  type   **/
+    public void setType(String type) {
+        this.type = type == null ? null : type.trim();
+    }
+
+    public String getSecondaryType() {
+        return secondaryType;
+    }
+
+    public void setSecondaryType(String secondaryType) {
+        this.secondaryType = secondaryType;
+    }
+
+    /**   产品等级(ABCD级)  level   **/
+    public String getLevel() {
+        return level;
+    }
+
+    /**   产品等级(ABCD级)  level   **/
+    public void setLevel(String level) {
+        this.level = level == null ? null : level.trim();
+    }
+
+    /**   生产日期  productDate   **/
+    public Date getProductDate() {
+        return productDate;
+    }
+
+    /**   生产日期  productDate   **/
+    public void setProductDate(Date productDate) {
+        this.productDate = productDate;
+    }
+
+    /**   箱数(正整数)  boxNumber   **/
+    public Integer getBoxNumber() {
+        return boxNumber;
+    }
+
+    /**   箱数(正整数)  boxNumber   **/
+    public void setBoxNumber(Integer boxNumber) {
+        this.boxNumber = boxNumber;
+    }
+
+    /**   包装方式  packing   **/
+    public String getPacking() {
+        return packing;
+    }
+
+    /**   包装方式  packing   **/
+    public void setPacking(String packing) {
+        this.packing = packing == null ? null : packing.trim();
+    }
+
+    public Byte getIsDel() {
+        return isDel;
+    }
+
+    public void setIsDel(Byte isDel) {
+        this.isDel = isDel;
+    }
+
+    public String getCreatedBy() {
+        return createdBy;
+    }
+
+    public void setCreatedBy(String createdBy) {
+        this.createdBy = createdBy;
+    }
+
+    public String getModifiedBy() {
+        return modifiedBy;
+    }
+
+    public void setModifiedBy(String modifiedBy) {
+        this.modifiedBy = modifiedBy;
+    }
+
+    public Date getCreatedDate() {
+        return createdDate;
+    }
+
+    public void setCreatedDate(Date createdDate) {
+        this.createdDate = createdDate;
+    }
+
+    public Date getModifiedDate() {
+        return modifiedDate;
+    }
+
+    public void setModifiedDate(Date modifiedDate) {
+        this.modifiedDate = modifiedDate;
+    }
+
+    public String getCompanyNumber() {
+        return companyNumber;
+    }
+
+    public void setCompanyNumber(String companyNumber) {
+        this.companyNumber = companyNumber;
+    }
+
+    public Byte getIsOld() {
+        return isOld;
+    }
+
+    public void setIsOld(Byte isOld) {
+        this.isOld = isOld;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/ProductLocusInfo.java b/src/main/java/com/gk/firework/Domain/ProductLocusInfo.java
new file mode 100644
index 0000000..e522939
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/ProductLocusInfo.java
@@ -0,0 +1,158 @@
+package com.gk.firework.Domain;
+
+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 com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@TableName("productlocus")
+public class ProductLocusInfo implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /** 入库 **/
+    public static final Byte ENTRY_STATUS = 1;
+    /** 退货入库 **/
+    public static final Byte RETURN_ENTRY_STATUS = 2;
+    /** 出库 **/
+    public static final Byte DELIVERY_STATUS = 3;
+    /** 销售 **/
+    public static final Byte SALES_STATUS = 4;
+    /** 退库 **/
+    public static final Byte RETURN_DELIVERY_STATUS = 5;
+    /** 生成电子标签 **/
+    public static final Byte ELECTRONIC_LABEL_STATUS = 6;
+    /** 补打 **/
+    public static final Byte REPLENISH_PRINT_STATUS = 7;
+    /** 电子标签回退 **/
+    public static final Byte ELECTRONIC_LABEL_RETURN_STATUS = 8;
+
+    /**   id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 流向码(19或者22位)  directioncode **/
+    private String directioncode;
+
+    /** 创建时间  createddate **/
+    private Date createddate;
+
+    /** 修改时间  modifieddate **/
+    private Date modifieddate;
+
+    /** 流向轨迹内容  content **/
+    private String content;
+
+    /** 购买人信息表id  customerid **/
+    private Long customerid;
+
+    /** 流向信息类型(1.入库;2.出库;)  type **/
+    private Byte type;
+
+    /** 22位流向码(包装箱码)  boxcode **/
+    private String boxcode;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   流向码(19或者22位)  directioncode   **/
+    public String getDirectioncode() {
+        return directioncode;
+    }
+
+    /**   流向码(19或者22位)  directioncode   **/
+    public void setDirectioncode(String directioncode) {
+        this.directioncode = directioncode == null ? null : directioncode.trim();
+    }
+
+    /**   创建时间  createddate   **/
+    public Date getCreateddate() {
+        return createddate;
+    }
+
+    /**   创建时间  createddate   **/
+    public void setCreateddate(Date createddate) {
+        this.createddate = createddate;
+    }
+
+    /**   修改时间  modifieddate   **/
+    public Date getModifieddate() {
+        return modifieddate;
+    }
+
+    /**
+     * 修改时间  modifieddate (原)
+     * 前台传递的创建时间 (现)
+     */
+    public void setModifieddate(Date modifieddate) {
+        this.modifieddate = modifieddate;
+    }
+
+    /**   流向轨迹内容  content   **/
+    public String getContent() {
+        return content;
+    }
+
+    /**
+     * 流向轨迹内容  content   (原)
+     * enterprise name  企业名称(现)
+     * */
+    public void setContent(String content) {
+        this.content = content == null ? null : content.trim();
+    }
+
+    /**   购买人信息表id  customerid   **/
+    public Long getCustomerid() {
+        return customerid;
+    }
+
+    /**   购买人信息表id  customerid   **/
+    public void setCustomerid(Long customerid) {
+        this.customerid = customerid;
+    }
+
+    /**   流向信息类型(1.入库;2.出库;)  type   **/
+    public Byte getType() {
+        return type;
+    }
+
+    /**   流向信息类型(1.入库;2.退货入库;3.出库;4.销售;5.退库)  type   **/
+    public void setType(Byte type) {
+        this.type = type;
+    }
+
+    /**   22位流向码(包装箱码)  boxcode   **/
+    public String getBoxcode() {
+        return boxcode;
+    }
+
+    /**   22位流向码(包装箱码)  boxcode   **/
+    public void setBoxcode(String boxcode) {
+        this.boxcode = boxcode == null ? null : boxcode.trim();
+    }
+
+    public ProductLocusInfo() {
+    }
+
+    public ProductLocusInfo(String directioncode, Date createddate, Date modifieddate,
+                            String content, Long customerid, Byte type, String boxcode) {
+        this.directioncode = directioncode;
+        this.createddate = createddate;
+        this.modifieddate = modifieddate;
+        this.content = content;
+        this.customerid = customerid;
+        this.type = type;
+        this.boxcode = boxcode;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/ProductPriceInfo.java b/src/main/java/com/gk/firework/Domain/ProductPriceInfo.java
new file mode 100644
index 0000000..76650de
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/ProductPriceInfo.java
@@ -0,0 +1,95 @@
+package com.gk.firework.Domain;
+
+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 org.springframework.data.relational.core.mapping.Table;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@TableName("productprice")
+public class ProductPriceInfo implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 公司编号  companynumber **/
+    private String companynumber;
+
+    /** 产品编号  itemcode **/
+    private String itemcode;
+
+    /** 价格  price **/
+    private BigDecimal price;
+
+    /** 更新时间  updated **/
+    private Date updated;
+
+    /** 更新人  updator **/
+    private String updator;
+
+    /**   id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   公司编号  companynumber   **/
+    public String getCompanynumber() {
+        return companynumber;
+    }
+
+    /**   公司编号  companynumber   **/
+    public void setCompanynumber(String companynumber) {
+        this.companynumber = companynumber == null ? null : companynumber.trim();
+    }
+
+    /**   产品编号  itemcode   **/
+    public String getItemcode() {
+        return itemcode;
+    }
+
+    /**   产品编号  itemcode   **/
+    public void setItemcode(String itemcode) {
+        this.itemcode = itemcode == null ? null : itemcode.trim();
+    }
+
+    /**   价格  price   **/
+    public BigDecimal getPrice() {
+        return price;
+    }
+
+    /**   价格  price   **/
+    public void setPrice(BigDecimal price) {
+        this.price = price;
+    }
+
+    /**   更新时间  updated   **/
+    public Date getUpdated() {
+        return updated;
+    }
+
+    /**   更新时间  updated   **/
+    public void setUpdated(Date updated) {
+        this.updated = updated;
+    }
+
+    /**   更新人  updator   **/
+    public String getUpdator() {
+        return updator;
+    }
+
+    /**   更新人  updator   **/
+    public void setUpdator(String updator) {
+        this.updator = updator == null ? null : updator.trim();
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/ProductThresholdInfo.java b/src/main/java/com/gk/firework/Domain/ProductThresholdInfo.java
new file mode 100644
index 0000000..6a88c6a
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/ProductThresholdInfo.java
@@ -0,0 +1,119 @@
+package com.gk.firework.Domain;
+
+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 java.math.BigDecimal;
+import java.util.Date;
+
+@TableName("productthreshold")
+public class ProductThresholdInfo {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+    /**   id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 产品信息id  productid **/
+    private Long productid;
+
+    /** 产品编码  itemcode **/
+    private String itemcode;
+
+    /** 含药量限制  explosivecontent **/
+    private BigDecimal explosivecontent;
+
+    /** 级别限制(ABCD级)  level **/
+    private String level;
+
+    /** 箱数限制  boxnumber **/
+    private Integer boxnumber;
+
+    /** 创建人  createdby **/
+    private String createdby;
+
+    /** 创建时间  createdat **/
+    private Date createdat;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   产品信息id  productid   **/
+    public Long getProductid() {
+        return productid;
+    }
+
+    /**   产品信息id  productid   **/
+    public void setProductid(Long productid) {
+        this.productid = productid;
+    }
+
+    /**   产品编码  itemcode   **/
+    public String getItemcode() {
+        return itemcode;
+    }
+
+    /**   产品编码  itemcode   **/
+    public void setItemcode(String itemcode) {
+        this.itemcode = itemcode == null ? null : itemcode.trim();
+    }
+
+    /**   含药量限制  explosivecontent   **/
+    public BigDecimal getExplosivecontent() {
+        return explosivecontent;
+    }
+
+    /**   含药量限制  explosivecontent   **/
+    public void setExplosivecontent(BigDecimal explosivecontent) {
+        this.explosivecontent = explosivecontent;
+    }
+
+    /**   级别限制(ABCD级)  level   **/
+    public String getLevel() {
+        return level;
+    }
+
+    /**   级别限制(ABCD级)  level   **/
+    public void setLevel(String level) {
+        this.level = level == null ? null : level.trim();
+    }
+
+    /**   箱数限制  boxnumber   **/
+    public Integer getBoxnumber() {
+        return boxnumber;
+    }
+
+    /**   箱数限制  boxnumber   **/
+    public void setBoxnumber(Integer boxnumber) {
+        this.boxnumber = boxnumber;
+    }
+
+    /**   创建人  createdby   **/
+    public String getCreatedby() {
+        return createdby;
+    }
+
+    /**   创建人  createdby   **/
+    public void setCreatedby(String createdby) {
+        this.createdby = createdby == null ? null : createdby.trim();
+    }
+
+    /**   创建时间  createdat   **/
+    public Date getCreatedat() {
+        return createdat;
+    }
+
+    /**   创建时间  createdat   **/
+    public void setCreatedat(Date createdat) {
+        this.createdat = createdat;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/RegisterInfo.java b/src/main/java/com/gk/firework/Domain/RegisterInfo.java
new file mode 100644
index 0000000..3f1bd0b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/RegisterInfo.java
@@ -0,0 +1,469 @@
+package com.gk.firework.Domain;
+
+import com.alibaba.fastjson.annotation.JSONField;
+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 com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.Date;
+
+@TableName("register")
+public class RegisterInfo {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /**   id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 企业名称  enterprisename **/
+    @NotBlank(message = "企业名称不能为空")
+    private String enterprisename;
+
+    /** 企业编号  enterprisenumber **/
+    @NotBlank(message = "企业编号不能为空")
+    private String enterprisenumber;
+
+    /** 密码  password **/
+    @NotBlank(message = "密码不能为空")
+    private String password;
+
+    /** 企业类型  type **/
+    @NotBlank(message = "未知的企业类型")
+    private String type;
+
+    /** 经营范围  businessrange **/
+    @NotBlank(message = "请填写经营范围")
+    private String businessrange;
+
+    /** 许可证开始时间  licensestart **/
+    @NotNull(message = "许可证开始时间不能为空")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date licensestart;
+
+    /** 许可证结束时间  licenseend **/
+    @NotNull(message = "许可证结束时间不能为空")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date licenseend;
+
+    /** 负责人  legalperson **/
+    @NotBlank(message = "负责人不能为空")
+    private String legalperson;
+
+    /** 负责人电话  legalpersonphone **/
+    @NotBlank(message = "负责人电话不能为空")
+    private String legalpersonphone;
+
+    /** 创建人  createdby **/
+    private String createdby;
+
+    /** 创建时间  createdat **/
+    private Date createdat;
+
+    /** 标记  flag **/
+    private Byte flag;
+
+    /** 是否删除  isdel **/
+    private Byte isdel;
+
+    /** 备注  remark **/
+    private String remark;
+
+    /** 是否发送短信通知(0.未发送短信;1.已发送短信)  issms **/
+    private Byte issms;
+
+    /** 短信发送次数  smstimes **/
+    private Integer smstimes;
+
+    /** 短信通知发送时间  smsat **/
+    private Date smsat;
+
+    /** 审核人  reviewer **/
+    private String reviewer;
+
+    /** 审核结果(0:未审核;1.审核通过;2.审核驳回)  reviewresult **/
+    private Byte reviewresult;
+
+    /** 审核时间  reviewat **/
+    private Date reviewat;
+
+    /** 审核意见  reviewcontent **/
+    private String reviewcontent;
+
+    /** 是否同意协议(0:否;1:是)  isagreement **/
+    private Byte isagreement;
+
+    @NotBlank(message = "省份不能为空")
+    private String province;
+
+    @NotBlank(message = "市不能为空")
+    private String city;
+
+    @NotBlank(message = "区县不能为空")
+    private String district;
+
+    private String street;
+
+    private String committee;
+
+    @NotBlank(message = "详细地址不能为空")
+    private String address;
+
+    /** 负责人 **/
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date legalpersonstart;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date legalpersonend;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date qualificationstart;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date qualificationend;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date escortstart;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date escortend;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   企业名称  enterprisename   **/
+    public String getEnterprisename() {
+        return enterprisename;
+    }
+
+    /**   企业名称  enterprisename   **/
+    public void setEnterprisename(String enterprisename) {
+        this.enterprisename = enterprisename == null ? null : enterprisename.trim();
+    }
+
+    /**   企业编号  enterprisenumber   **/
+    public String getEnterprisenumber() {
+        return enterprisenumber;
+    }
+
+    /**   企业编号  enterprisenumber   **/
+    public void setEnterprisenumber(String enterprisenumber) {
+        this.enterprisenumber = enterprisenumber == null ? null : enterprisenumber.trim();
+    }
+
+    /**   密码  password   **/
+    public String getPassword() {
+        return password;
+    }
+
+    /**   密码  password   **/
+    public void setPassword(String password) {
+        this.password = password == null ? null : password.trim();
+    }
+
+    /**   企业类型  type   **/
+    public String getType() {
+        return type;
+    }
+
+    /**   企业类型  type   **/
+    public void setType(String type) {
+        this.type = type == null ? null : type.trim();
+    }
+
+    /**   经营范围  businessrange   **/
+    public String getBusinessrange() {
+        return businessrange;
+    }
+
+    /**   经营范围  businessrange   **/
+    public void setBusinessrange(String businessrange) {
+        this.businessrange = businessrange == null ? null : businessrange.trim();
+    }
+
+    /**   许可证开始时间  licensestart   **/
+    public Date getLicensestart() {
+        return licensestart;
+    }
+
+    /**   许可证开始时间  licensestart   **/
+    public void setLicensestart(Date licensestart) {
+        this.licensestart = licensestart;
+    }
+
+    /**   许可证结束时间  licenseend   **/
+    public Date getLicenseend() {
+        return licenseend;
+    }
+
+    /**   许可证结束时间  licenseend   **/
+    public void setLicenseend(Date licenseend) {
+        this.licenseend = licenseend;
+    }
+
+    /**   负责人  legalperson   **/
+    public String getLegalperson() {
+        return legalperson;
+    }
+
+    /**   负责人  legalperson   **/
+    public void setLegalperson(String legalperson) {
+        this.legalperson = legalperson == null ? null : legalperson.trim();
+    }
+
+    /**   负责人电话  legalpersonphone   **/
+    public String getLegalpersonphone() {
+        return legalpersonphone;
+    }
+
+    /**   负责人电话  legalpersonphone   **/
+    public void setLegalpersonphone(String legalpersonphone) {
+        this.legalpersonphone = legalpersonphone == null ? null : legalpersonphone.trim();
+    }
+
+    /**   创建人  createdby   **/
+    public String getCreatedby() {
+        return createdby;
+    }
+
+    /**   创建人  createdby   **/
+    public void setCreatedby(String createdby) {
+        this.createdby = createdby == null ? null : createdby.trim();
+    }
+
+    /**   创建时间  createdat   **/
+    public Date getCreatedat() {
+        return createdat;
+    }
+
+    /**   创建时间  createdat   **/
+    public void setCreatedat(Date createdat) {
+        this.createdat = createdat;
+    }
+
+    /**   标记  flag   **/
+    public Byte getFlag() {
+        return flag;
+    }
+
+    /**   标记  flag   **/
+    public void setFlag(Byte flag) {
+        this.flag = flag;
+    }
+
+    /**   是否删除  isdel   **/
+    public Byte getIsdel() {
+        return isdel;
+    }
+
+    /**   是否删除  isdel   **/
+    public void setIsdel(Byte isdel) {
+        this.isdel = isdel;
+    }
+
+    /**   备注  remark   **/
+    public String getRemark() {
+        return remark;
+    }
+
+    /**   备注  remark   **/
+    public void setRemark(String remark) {
+        this.remark = remark == null ? null : remark.trim();
+    }
+
+    /**   是否发送短信通知(0.未发送短信;1.已发送短信)  issms   **/
+    public Byte getIssms() {
+        return issms;
+    }
+
+    /**   是否发送短信通知(0.未发送短信;1.已发送短信)  issms   **/
+    public void setIssms(Byte issms) {
+        this.issms = issms;
+    }
+
+    /**   短信发送次数  smstimes   **/
+    public Integer getSmstimes() {
+        return smstimes;
+    }
+
+    /**   短信发送次数  smstimes   **/
+    public void setSmstimes(Integer smstimes) {
+        this.smstimes = smstimes;
+    }
+
+    /**   短信通知发送时间  smsat   **/
+    public Date getSmsat() {
+        return smsat;
+    }
+
+    /**   短信通知发送时间  smsat   **/
+    public void setSmsat(Date smsat) {
+        this.smsat = smsat;
+    }
+
+    /**   审核人  reviewer   **/
+    public String getReviewer() {
+        return reviewer;
+    }
+
+    /**   审核人  reviewer   **/
+    public void setReviewer(String reviewer) {
+        this.reviewer = reviewer == null ? null : reviewer.trim();
+    }
+
+    /**   审核结果(0:未审核;1.审核通过;2.审核驳回)  reviewresult   **/
+    public Byte getReviewresult() {
+        return reviewresult;
+    }
+
+    /**   审核结果(0:未审核;1.审核通过;2.审核驳回)  reviewresult   **/
+    public void setReviewresult(Byte reviewresult) {
+        this.reviewresult = reviewresult;
+    }
+
+    /**   审核时间  reviewat   **/
+    public Date getReviewat() {
+        return reviewat;
+    }
+
+    /**   审核时间  reviewat   **/
+    public void setReviewat(Date reviewat) {
+        this.reviewat = reviewat;
+    }
+
+    /**   审核意见  reviewcontent   **/
+    public String getReviewcontent() {
+        return reviewcontent;
+    }
+
+    /**   审核意见  reviewcontent   **/
+    public void setReviewcontent(String reviewcontent) {
+        this.reviewcontent = reviewcontent == null ? null : reviewcontent.trim();
+    }
+
+    /**   是否同意协议(0:否;1:是)  isagreement   **/
+    public Byte getIsagreement() {
+        return isagreement;
+    }
+
+    /**   是否同意协议(0:否;1:是)  isagreement   **/
+    public void setIsagreement(Byte isagreement) {
+        this.isagreement = isagreement;
+    }
+
+    public String getProvince() {
+        return province;
+    }
+
+    public void setProvince(String province) {
+        this.province = province;
+    }
+
+    public String getCity() {
+        return city;
+    }
+
+    public void setCity(String city) {
+        this.city = city;
+    }
+
+    public String getDistrict() {
+        return district;
+    }
+
+    public void setDistrict(String district) {
+        this.district = district;
+    }
+
+    public String getStreet() {
+        return street;
+    }
+
+    public void setStreet(String street) {
+        this.street = street;
+    }
+
+    public String getCommittee() {
+        return committee;
+    }
+
+    public void setCommittee(String committee) {
+        this.committee = committee;
+    }
+
+    public String getAddress() {
+        return address;
+    }
+
+    public void setAddress(String address) {
+        this.address = address;
+    }
+
+    public Date getLegalpersonstart() {
+        return legalpersonstart;
+    }
+
+    public void setLegalpersonstart(Date legalpersonstart) {
+        this.legalpersonstart = legalpersonstart;
+    }
+
+    public Date getLegalpersonend() {
+        return legalpersonend;
+    }
+
+    public void setLegalpersonend(Date legalpersonend) {
+        this.legalpersonend = legalpersonend;
+    }
+
+    public Date getQualificationstart() {
+        return qualificationstart;
+    }
+
+    public void setQualificationstart(Date qualificationstart) {
+        this.qualificationstart = qualificationstart;
+    }
+
+    public Date getQualificationend() {
+        return qualificationend;
+    }
+
+    public void setQualificationend(Date qualificationend) {
+        this.qualificationend = qualificationend;
+    }
+
+    public Date getEscortstart() {
+        return escortstart;
+    }
+
+    public void setEscortstart(Date escortstart) {
+        this.escortstart = escortstart;
+    }
+
+    public Date getEscortend() {
+        return escortend;
+    }
+
+    public void setEscortend(Date escortend) {
+        this.escortend = escortend;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/RoleInfo.java b/src/main/java/com/gk/firework/Domain/RoleInfo.java
new file mode 100644
index 0000000..235c1d0
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/RoleInfo.java
@@ -0,0 +1,143 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.util.Date;
+
+@TableName("role")
+public class RoleInfo implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    /**   id **/
+    private Long id;
+
+    /**   name **/
+    private String name;
+
+    /**   createdby **/
+    private String createdby;
+
+    /**   createddate **/
+    private Date createddate;
+
+    /**   lastmodifiedby **/
+    private String lastmodifiedby;
+
+    /**   lastmodifieddate **/
+    private Date lastmodifieddate;
+
+    /**   description **/
+    private String description;
+
+    /**   code **/
+    private String code;
+
+    /**   btnaccess **/
+    private String btnaccess;
+
+    private Byte isdel;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**     name   **/
+    public String getName() {
+        return name;
+    }
+
+    /**     name   **/
+    public void setName(String name) {
+        this.name = name == null ? null : name.trim();
+    }
+
+    /**     createdby   **/
+    public String getCreatedby() {
+        return createdby;
+    }
+
+    /**     createdby   **/
+    public void setCreatedby(String createdby) {
+        this.createdby = createdby == null ? null : createdby.trim();
+    }
+
+    /**     createddate   **/
+    public Date getCreateddate() {
+        return createddate;
+    }
+
+    /**     createddate   **/
+    public void setCreateddate(Date createddate) {
+        this.createddate = createddate;
+    }
+
+    /**     lastmodifiedby   **/
+    public String getLastmodifiedby() {
+        return lastmodifiedby;
+    }
+
+    /**     lastmodifiedby   **/
+    public void setLastmodifiedby(String lastmodifiedby) {
+        this.lastmodifiedby = lastmodifiedby == null ? null : lastmodifiedby.trim();
+    }
+
+    /**     lastmodifieddate   **/
+    public Date getLastmodifieddate() {
+        return lastmodifieddate;
+    }
+
+    /**     lastmodifieddate   **/
+    public void setLastmodifieddate(Date lastmodifieddate) {
+        this.lastmodifieddate = lastmodifieddate;
+    }
+
+    /**     description   **/
+    public String getDescription() {
+        return description;
+    }
+
+    /**     description   **/
+    public void setDescription(String description) {
+        this.description = description == null ? null : description.trim();
+    }
+
+    /**     code   **/
+    public String getCode() {
+        return code;
+    }
+
+    /**     code   **/
+    public void setCode(String code) {
+        this.code = code == null ? null : code.trim();
+    }
+
+    /**     btnaccess   **/
+    public String getBtnaccess() {
+        return btnaccess;
+    }
+
+    /**     btnaccess   **/
+    public void setBtnaccess(String btnaccess) {
+        this.btnaccess = btnaccess == null ? null : btnaccess.trim();
+    }
+
+    public Byte getIsdel() {
+        return isdel;
+    }
+
+    public void setIsdel(Byte isdel) {
+        this.isdel = isdel;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/RolePermissionsInfo.java b/src/main/java/com/gk/firework/Domain/RolePermissionsInfo.java
new file mode 100644
index 0000000..f18fb0d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/RolePermissionsInfo.java
@@ -0,0 +1,54 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+
+@TableName("rolepermissions")
+public class RolePermissionsInfo implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    /**   id **/
+    private Long id;
+
+    /**   roleid **/
+    private Long roleid;
+
+    /**   permissionid **/
+    private Long permissionid;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**     roleid   **/
+    public Long getRoleid() {
+        return roleid;
+    }
+
+    /**     roleid   **/
+    public void setRoleid(Long roleid) {
+        this.roleid = roleid;
+    }
+
+    /**     permissionid   **/
+    public Long getPermissionid() {
+        return permissionid;
+    }
+
+    /**     permissionid   **/
+    public void setPermissionid(Long permissionid) {
+        this.permissionid = permissionid;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/SaleOrderDetailInfo.java b/src/main/java/com/gk/firework/Domain/SaleOrderDetailInfo.java
new file mode 100644
index 0000000..39c6657
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/SaleOrderDetailInfo.java
@@ -0,0 +1,149 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@TableName("saleorderdetail")
+public class SaleOrderDetailInfo implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+    /**   id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 订单号  ordercode **/
+    private String ordercode;
+
+    /** 商品编码(10位)  itemcode **/
+    private String itemcode;
+
+    /** 商品名称  itemname **/
+    private String itemname;
+
+    /** 流向码(19位)  directioncode **/
+    private String directioncode;
+
+    /** 创建时间  createdat **/
+    private Date createdat;
+
+    /** 创建人  createdby **/
+    private String createdby;
+
+    /** 单价  price **/
+    private BigDecimal price;
+
+    /** 规格  specification **/
+    private String specification;
+
+    private Byte returnflag;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   订单号  ordercode   **/
+    public String getOrdercode() {
+        return ordercode;
+    }
+
+    /**   订单号  ordercode   **/
+    public void setOrdercode(String ordercode) {
+        this.ordercode = ordercode == null ? null : ordercode.trim();
+    }
+
+    /**   商品编码(10位)  itemcode   **/
+    public String getItemcode() {
+        return itemcode;
+    }
+
+    /**   商品编码(10位)  itemcode   **/
+    public void setItemcode(String itemcode) {
+        this.itemcode = itemcode == null ? null : itemcode.trim();
+    }
+
+    /**   商品名称  itemname   **/
+    public String getItemname() {
+        return itemname;
+    }
+
+    /**   商品名称  itemname   **/
+    public void setItemname(String itemname) {
+        this.itemname = itemname == null ? null : itemname.trim();
+    }
+
+    /**   流向码(19位)  directioncode   **/
+    public String getDirectioncode() {
+        return directioncode;
+    }
+
+    /**   流向码(19位)  directioncode   **/
+    public void setDirectioncode(String directioncode) {
+        this.directioncode = directioncode == null ? null : directioncode.trim();
+    }
+
+    /**   创建时间  createdat   **/
+    public Date getCreatedat() {
+        return createdat;
+    }
+
+    /**   创建时间  createdat   **/
+    public void setCreatedat(Date createdat) {
+        this.createdat = createdat;
+    }
+
+    /**   创建人  createdby   **/
+    public String getCreatedby() {
+        return createdby;
+    }
+
+    /**   创建人  createdby   **/
+    public void setCreatedby(String createdby) {
+        this.createdby = createdby == null ? null : createdby.trim();
+    }
+
+    /**   单价  price   **/
+    public BigDecimal getPrice() {
+        return price;
+    }
+
+    /**   单价  price   **/
+    public void setPrice(BigDecimal price) {
+        this.price = price;
+    }
+
+    public String getSpecification() {
+        return specification;
+    }
+
+    public void setSpecification(String specification) {
+        this.specification = specification;
+    }
+
+    public Byte getReturnflag() {
+        return returnflag;
+    }
+
+    public void setReturnflag(Byte returnflag) {
+        this.returnflag = returnflag;
+    }
+
+    public SaleOrderDetailInfo() {
+    }
+
+    public SaleOrderDetailInfo(String itemCode, String directionCode) {
+        this.itemcode = itemCode;
+        this.directioncode = directionCode;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/SaleOrderInfo.java b/src/main/java/com/gk/firework/Domain/SaleOrderInfo.java
new file mode 100644
index 0000000..581c9a1
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/SaleOrderInfo.java
@@ -0,0 +1,249 @@
+package com.gk.firework.Domain;
+
+
+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 java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+@TableName("saleorder")
+public class SaleOrderInfo implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+    /**   id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 订单号  code **/
+    private String code;
+
+    /** 创建时间  createdat **/
+    private Date createdat;
+
+    /** 创建人  createdby **/
+    private String createdby;
+
+    /** customer表ID  customer **/
+    private Long customer;
+
+    /** 身份证号  idcardnum **/
+    private String idcardnum;
+
+    /** 售货员  salesperson **/
+    private String salesperson;
+
+    /** 店铺  shop **/
+    private String shop;
+
+    /** 箱数  boxnum **/
+    private BigDecimal boxnum;
+
+    /** 总价  totalprice **/
+    private BigDecimal totalprice;
+
+    /** 收费  pay **/
+    private BigDecimal pay;
+
+    /** 找零  change **/
+    @TableField("`change`")
+    private BigDecimal change;
+
+    /** 类型(1.零售;2.团购)  type **/
+    private Byte type;
+
+    /** 退货标记(默认:0;部分退货:1;全部退货:2) returnflag **/
+    private Byte returnflag;
+
+    /** 企业单位编号  companynumber **/
+    private String companynumber;
+
+    private Byte isupload;
+
+    private Date uploadat;
+
+    private String returncode;
+
+    @TableField(exist = false)
+    private List<SaleOrderDetailInfo> details;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   订单号  code   **/
+    public String getCode() {
+        return code;
+    }
+
+    /**   订单号  code   **/
+    public void setCode(String code) {
+        this.code = code == null ? null : code.trim();
+    }
+
+    /**   创建时间  createdat   **/
+    public Date getCreatedat() {
+        return createdat;
+    }
+
+    /**   创建时间  createdat   **/
+    public void setCreatedat(Date createdat) {
+        this.createdat = createdat;
+    }
+
+    /**   创建人  createdby   **/
+    public String getCreatedby() {
+        return createdby;
+    }
+
+    /**   创建人  createdby   **/
+    public void setCreatedby(String createdby) {
+        this.createdby = createdby == null ? null : createdby.trim();
+    }
+
+    /**   customer表ID  customer   **/
+    public Long getCustomer() {
+        return customer;
+    }
+
+    /**   customer表ID  customer   **/
+    public void setCustomer(Long customer) {
+        this.customer = customer;
+    }
+
+    /**   身份证号  idcardnum   **/
+    public String getIdcardnum() {
+        return idcardnum;
+    }
+
+    /**   身份证号  idcardnum   **/
+    public void setIdcardnum(String idcardnum) {
+        this.idcardnum = idcardnum == null ? null : idcardnum.trim();
+    }
+
+    /**   售货员  salesperson   **/
+    public String getSalesperson() {
+        return salesperson;
+    }
+
+    /**   售货员  salesperson   **/
+    public void setSalesperson(String salesperson) {
+        this.salesperson = salesperson == null ? null : salesperson.trim();
+    }
+
+    /**   店铺  shop   **/
+    public String getShop() {
+        return shop;
+    }
+
+    /**   店铺  shop   **/
+    public void setShop(String shop) {
+        this.shop = shop == null ? null : shop.trim();
+    }
+
+    /**   箱数  boxnum   **/
+    public BigDecimal getBoxnum() {
+        return boxnum;
+    }
+
+    /**   箱数  boxnum   **/
+    public void setBoxnum(BigDecimal boxnum) {
+        this.boxnum = boxnum;
+    }
+
+    /**   总价  totalprice   **/
+    public BigDecimal getTotalprice() {
+        return totalprice;
+    }
+
+    /**   总价  totalprice   **/
+    public void setTotalprice(BigDecimal totalprice) {
+        this.totalprice = totalprice;
+    }
+
+    /**   收费  pay   **/
+    public BigDecimal getPay() {
+        return pay;
+    }
+
+    /**   收费  pay   **/
+    public void setPay(BigDecimal pay) {
+        this.pay = pay;
+    }
+
+    /**   找零  change   **/
+    public BigDecimal getChange() {
+        return change;
+    }
+
+    /**   找零  change   **/
+    public void setChange(BigDecimal change) {
+        this.change = change;
+    }
+
+    public Byte getType() {
+        return type;
+    }
+
+    public void setType(Byte type) {
+        this.type = type;
+    }
+
+    public Byte getReturnflag() {
+        return returnflag;
+    }
+
+    public void setReturnflag(Byte returnflag) {
+        this.returnflag = returnflag;
+    }
+
+    public String getCompanynumber() {
+        return companynumber;
+    }
+
+    public void setCompanynumber(String companynumber) {
+        this.companynumber = companynumber;
+    }
+
+    public List<SaleOrderDetailInfo> getDetails() {
+        return details;
+    }
+
+    public void setDetails(List<SaleOrderDetailInfo> details) {
+        this.details = details;
+    }
+
+    public Byte getIsupload() {
+        return isupload;
+    }
+
+    public void setIsupload(Byte isupload) {
+        this.isupload = isupload;
+    }
+
+    public Date getUploadat() {
+        return uploadat;
+    }
+
+    public void setUploadat(Date uploadat) {
+        this.uploadat = uploadat;
+    }
+
+    public String getReturncode() {
+        return returncode;
+    }
+
+    public void setReturncode(String returncode) {
+        this.returncode = returncode;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/SaleProductInfo.java b/src/main/java/com/gk/firework/Domain/SaleProductInfo.java
new file mode 100644
index 0000000..9878321
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/SaleProductInfo.java
@@ -0,0 +1,130 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@TableName("saleproduct")
+public class SaleProductInfo implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+    /**   id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**   itemcode **/
+    private String itemcode;
+
+    /**   itemname **/
+    private String itemname;
+
+    /**   directioncode **/
+    private String directioncode;
+
+    /**   price **/
+    private BigDecimal price;
+
+    /**   specification **/
+    private String specification;
+
+    /**   createdby **/
+    private String createdby;
+
+    /**   createdat **/
+    private Date createdat;
+
+    private Byte isuse;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**     itemcode   **/
+    public String getItemcode() {
+        return itemcode;
+    }
+
+    /**     itemcode   **/
+    public void setItemcode(String itemcode) {
+        this.itemcode = itemcode == null ? null : itemcode.trim();
+    }
+
+    /**     itemname   **/
+    public String getItemname() {
+        return itemname;
+    }
+
+    /**     itemname   **/
+    public void setItemname(String itemname) {
+        this.itemname = itemname == null ? null : itemname.trim();
+    }
+
+    /**     directioncode   **/
+    public String getDirectioncode() {
+        return directioncode;
+    }
+
+    /**     directioncode   **/
+    public void setDirectioncode(String directioncode) {
+        this.directioncode = directioncode == null ? null : directioncode.trim();
+    }
+
+    /**     price   **/
+    public BigDecimal getPrice() {
+        return price;
+    }
+
+    /**     price   **/
+    public void setPrice(BigDecimal price) {
+        this.price = price;
+    }
+
+    /**     specification   **/
+    public String getSpecification() {
+        return specification;
+    }
+
+    /**     specification   **/
+    public void setSpecification(String specification) {
+        this.specification = specification == null ? null : specification.trim();
+    }
+
+    /**     createdby   **/
+    public String getCreatedby() {
+        return createdby;
+    }
+
+    /**     createdby   **/
+    public void setCreatedby(String createdby) {
+        this.createdby = createdby == null ? null : createdby.trim();
+    }
+
+    /**     createdat   **/
+    public Date getCreatedat() {
+        return createdat;
+    }
+
+    /**     createdat   **/
+    public void setCreatedat(Date createdat) {
+        this.createdat = createdat;
+    }
+
+    public Byte getIsuse() {
+        return isuse;
+    }
+
+    public void setIsuse(Byte isuse) {
+        this.isuse = isuse;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/SecuritySupervisory.java b/src/main/java/com/gk/firework/Domain/SecuritySupervisory.java
new file mode 100644
index 0000000..621b83d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/SecuritySupervisory.java
@@ -0,0 +1,133 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+
+@TableName("securitysupervisory")
+public class SecuritySupervisory implements Serializable {
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    /** 主键id  id **/
+    private Long id;
+
+    /** 级别  level **/
+    private String level;
+
+    /** 机构代码  code **/
+    private String code;
+
+    /** 机构名称  name **/
+    private String name;
+
+    /** 创建人id  createby **/
+    private Long createby;
+
+    /** 创建人姓名  createbyname **/
+    private String createbyname;
+
+    /** 更新人id  updateby **/
+    private Long updateby;
+
+    /** 更新人姓名  updatebyname **/
+    private String updatebyname;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   级别  level   **/
+    public String getLevel() {
+        return level;
+    }
+
+    /**   级别  level   **/
+    public void setLevel(String level) {
+        this.level = level == null ? null : level.trim();
+    }
+
+    /**   机构代码  code   **/
+    public String getCode() {
+        return code;
+    }
+
+    /**   机构代码  code   **/
+    public void setCode(String code) {
+        this.code = code == null ? null : code.trim();
+    }
+
+    /**   机构名称  name   **/
+    public String getName() {
+        return name;
+    }
+
+    /**   机构名称  name   **/
+    public void setName(String name) {
+        this.name = name == null ? null : name.trim();
+    }
+
+    /**   创建人id  createby   **/
+    public Long getCreateby() {
+        return createby;
+    }
+
+    /**   创建人id  createby   **/
+    public void setCreateby(Long createby) {
+        this.createby = createby;
+    }
+
+    /**   创建人姓名  createbyname   **/
+    public String getCreatebyname() {
+        return createbyname;
+    }
+
+    /**   创建人姓名  createbyname   **/
+    public void setCreatebyname(String createbyname) {
+        this.createbyname = createbyname == null ? null : createbyname.trim();
+    }
+
+    /**   更新人id  updateby   **/
+    public Long getUpdateby() {
+        return updateby;
+    }
+
+    /**   更新人id  updateby   **/
+    public void setUpdateby(Long updateby) {
+        this.updateby = updateby;
+    }
+
+    /**   更新人姓名  updatebyname   **/
+    public String getUpdatebyname() {
+        return updatebyname;
+    }
+
+    /**   更新人姓名  updatebyname   **/
+    public void setUpdatebyname(String updatebyname) {
+        this.updatebyname = updatebyname == null ? null : updatebyname.trim();
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/SelfCheckInfo.java b/src/main/java/com/gk/firework/Domain/SelfCheckInfo.java
new file mode 100644
index 0000000..88f5593
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/SelfCheckInfo.java
@@ -0,0 +1,171 @@
+package com.gk.firework.Domain;
+
+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 io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@ApiModel("检查内容类")
+@TableName("selfcheck")
+public class SelfCheckInfo implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 企业类型  type **/
+    @ApiModelProperty("企业类型")
+    private String type;
+
+    /** 检查内容  content **/
+    @ApiModelProperty("检查内容")
+    private String content;
+
+    /** 参考判断  standard **/
+    @ApiModelProperty("参考判断")
+    private String standard;
+
+    /** 排序  sort **/
+    @ApiModelProperty("排序")
+    private Integer sort;
+
+    /** 是否删除  isdel **/
+    @ApiModelProperty("是否删除")
+    private Byte isdel;
+
+    /** 备注  description **/
+    @ApiModelProperty("备注")
+    private String description;
+
+    /** 创建人  createdby **/
+    @ApiModelProperty("创建人")
+    private String createdby;
+
+    /** 创建时间  createddate **/
+    @ApiModelProperty("创建时间")
+    private Date createddate;
+
+    /** 更新人  modifiedby **/
+    @ApiModelProperty("更新人")
+    private String modifiedby;
+
+    /** 更新时间  modifieddate **/
+    @ApiModelProperty("更新时间")
+    private Date modifieddate;
+
+    /**   id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   企业类型  type   **/
+    public String getType() {
+        return type;
+    }
+
+    /**   企业类型  type   **/
+    public void setType(String type) {
+        this.type = type == null ? null : type.trim();
+    }
+
+    /**   检查内容  content   **/
+    public String getContent() {
+        return content;
+    }
+
+    /**   检查内容  content   **/
+    public void setContent(String content) {
+        this.content = content == null ? null : content.trim();
+    }
+
+    /**   参考判断  standard   **/
+    public String getStandard() {
+        return standard;
+    }
+
+    /**   参考判断  standard   **/
+    public void setStandard(String standard) {
+        this.standard = standard == null ? null : standard.trim();
+    }
+
+    /**   排序  sort   **/
+    public Integer getSort() {
+        return sort;
+    }
+
+    /**   排序  sort   **/
+    public void setSort(Integer sort) {
+        this.sort = sort;
+    }
+
+    /**   是否删除  isdel   **/
+    public Byte getIsdel() {
+        return isdel;
+    }
+
+    /**   是否删除  isdel   **/
+    public void setIsdel(Byte isdel) {
+        this.isdel = isdel;
+    }
+
+    /**   备注  description   **/
+    public String getDescription() {
+        return description;
+    }
+
+    /**   备注  description   **/
+    public void setDescription(String description) {
+        this.description = description == null ? null : description.trim();
+    }
+
+    /**   创建人  createdby   **/
+    public String getCreatedby() {
+        return createdby;
+    }
+
+    /**   创建人  createdby   **/
+    public void setCreatedby(String createdby) {
+        this.createdby = createdby == null ? null : createdby.trim();
+    }
+
+    /**   创建时间  createddate   **/
+    public Date getCreateddate() {
+        return createddate;
+    }
+
+    /**   创建时间  createddate   **/
+    public void setCreateddate(Date createddate) {
+        this.createddate = createddate;
+    }
+
+    /**   更新人  modifiedby   **/
+    public String getModifiedby() {
+        return modifiedby;
+    }
+
+    /**   更新人  modifiedby   **/
+    public void setModifiedby(String modifiedby) {
+        this.modifiedby = modifiedby == null ? null : modifiedby.trim();
+    }
+
+    /**   更新时间  modifieddate   **/
+    public Date getModifieddate() {
+        return modifieddate;
+    }
+
+    /**   更新时间  modifieddate   **/
+    public void setModifieddate(Date modifieddate) {
+        this.modifieddate = modifieddate;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/SelfCheckReport.java b/src/main/java/com/gk/firework/Domain/SelfCheckReport.java
new file mode 100644
index 0000000..50243a0
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/SelfCheckReport.java
@@ -0,0 +1,140 @@
+package com.gk.firework.Domain;
+
+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 io.swagger.annotations.Api;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Api("自查情况信息报送表")
+@TableName("selfcheckreport")
+public class SelfCheckReport implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    //自增ID
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    //企业ID
+    private Long eid;
+
+    //企业名称
+    private String ename;
+
+    //检查时间
+    private Date checktime;
+
+    //整改期限
+    private Date endtime;
+
+    //隐患等级 1-一般隐患  2-重大隐患
+    private Byte yhlevel;
+
+    //整改资金
+    private BigDecimal price;
+
+    //责任人名字
+    private String chargeperson;
+
+    //隐患状态 1-未整改   2-已整改
+    private Byte status;
+
+    //隐患描述
+    private String yhdesc;
+
+    //整改措施
+    private String solution;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getEid() {
+        return eid;
+    }
+
+    public void setEid(Long eid) {
+        this.eid = eid;
+    }
+
+    public String getEname() {
+        return ename;
+    }
+
+    public void setEname(String ename) {
+        this.ename = ename;
+    }
+
+    public Date getChecktime() {
+        return checktime;
+    }
+
+    public void setChecktime(Date checktime) {
+        this.checktime = checktime;
+    }
+
+    public Date getEndtime() {
+        return endtime;
+    }
+
+    public void setEndtime(Date endtime) {
+        this.endtime = endtime;
+    }
+
+    public Byte getYhlevel() {
+        return yhlevel;
+    }
+
+    public void setYhlevel(Byte yhlevel) {
+        this.yhlevel = yhlevel;
+    }
+
+    public BigDecimal getPrice() {
+        return price;
+    }
+
+    public void setPrice(BigDecimal price) {
+        this.price = price;
+    }
+
+    public String getChargeperson() {
+        return chargeperson;
+    }
+
+    public void setChargeperson(String chargeperson) {
+        this.chargeperson = chargeperson;
+    }
+
+    public Byte getStatus() {
+        return status;
+    }
+
+    public void setStatus(Byte status) {
+        this.status = status;
+    }
+
+    public String getYhdesc() {
+        return yhdesc;
+    }
+
+    public void setYhdesc(String yhdesc) {
+        this.yhdesc = yhdesc;
+    }
+
+    public String getSolution() {
+        return solution;
+    }
+
+    public void setSolution(String solution) {
+        this.solution = solution;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/SmsLogInfo.java b/src/main/java/com/gk/firework/Domain/SmsLogInfo.java
new file mode 100644
index 0000000..aea7574
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/SmsLogInfo.java
@@ -0,0 +1,79 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.util.Date;
+
+@TableName("smslog")
+public class SmsLogInfo implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    /** id  id **/
+    private Long id;
+
+    /** 手机号  mobile **/
+    private String mobile;
+
+    /** 发送时间  sendtime **/
+    private Date sendtime;
+
+    /** 发送次数  times **/
+    private Integer times;
+
+    /**时间类型 1小时 2天**/
+    private Byte type;
+
+    /**   id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   手机号  mobile   **/
+    public String getMobile() {
+        return mobile;
+    }
+
+    /**   手机号  mobile   **/
+    public void setMobile(String mobile) {
+        this.mobile = mobile == null ? null : mobile.trim();
+    }
+
+    /**   发送时间  sendtime   **/
+    public Date getSendtime() {
+        return sendtime;
+    }
+
+    /**   发送时间  sendtime   **/
+    public void setSendtime(Date sendtime) {
+        this.sendtime = sendtime;
+    }
+
+    /**   发送次数  times   **/
+    public Integer getTimes() {
+        return times;
+    }
+
+    /**   发送次数  times   **/
+    public void setTimes(Integer times) {
+        this.times = times;
+    }
+
+    public Byte getType() {
+        return type;
+    }
+
+    public void setType(Byte type) {
+        this.type = type;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/SoldNoStockInfo.java b/src/main/java/com/gk/firework/Domain/SoldNoStockInfo.java
new file mode 100644
index 0000000..4659c9f
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/SoldNoStockInfo.java
@@ -0,0 +1,208 @@
+package com.gk.firework.Domain;
+
+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 java.util.Date;
+
+@TableName("soldnostock")
+public class SoldNoStockInfo {
+    public static final Byte UNPROCESSED = 0;
+    public static final Byte PROCESSED = 1;
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 流向码  directioncode **/
+    private String directioncode;
+
+    /** 商品编码  itemcode **/
+    private String itemcode;
+
+    /** 商品名称  itemname **/
+    private String itemname;
+
+    /** 销售时间  salestime **/
+    private Date salestime;
+
+    /** 销售员  salesperson **/
+    private String salesperson;
+
+    /** 创建时间  createdat **/
+    private Date createdat;
+
+    /** 创建人  createdby **/
+    private String createdby;
+
+    /** 处理人  handler **/
+    private String handler;
+
+    /** 处理时间  handledat **/
+    private Date handledat;
+
+    /** 对应入库单号  entryorder **/
+    private String entryorder;
+
+    /** 预留标记  flag **/
+    private Byte flag;
+
+    /** 预留内容  content **/
+    private String content;
+
+    /** 预留内容2  remark **/
+    private String remark;
+
+    private String companynumber;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   流向码  directioncode   **/
+    public String getDirectioncode() {
+        return directioncode;
+    }
+
+    /**   流向码  directioncode   **/
+    public void setDirectioncode(String directioncode) {
+        this.directioncode = directioncode == null ? null : directioncode.trim();
+    }
+
+    /**   商品编码  itemcode   **/
+    public String getItemcode() {
+        return itemcode;
+    }
+
+    /**   商品编码  itemcode   **/
+    public void setItemcode(String itemcode) {
+        this.itemcode = itemcode == null ? null : itemcode.trim();
+    }
+
+    /**   商品名称  itemname   **/
+    public String getItemname() {
+        return itemname;
+    }
+
+    /**   商品名称  itemname   **/
+    public void setItemname(String itemname) {
+        this.itemname = itemname == null ? null : itemname.trim();
+    }
+
+    /**   销售时间  salestime   **/
+    public Date getSalestime() {
+        return salestime;
+    }
+
+    /**   销售时间  salestime   **/
+    public void setSalestime(Date salestime) {
+        this.salestime = salestime;
+    }
+
+    /**   销售员  salesperson   **/
+    public String getSalesperson() {
+        return salesperson;
+    }
+
+    /**   销售员  salesperson   **/
+    public void setSalesperson(String salesperson) {
+        this.salesperson = salesperson == null ? null : salesperson.trim();
+    }
+
+    /**   创建时间  createdat   **/
+    public Date getCreatedat() {
+        return createdat;
+    }
+
+    /**   创建时间  createdat   **/
+    public void setCreatedat(Date createdat) {
+        this.createdat = createdat;
+    }
+
+    /**   创建人  createdby   **/
+    public String getCreatedby() {
+        return createdby;
+    }
+
+    /**   创建人  createdby   **/
+    public void setCreatedby(String createdby) {
+        this.createdby = createdby == null ? null : createdby.trim();
+    }
+
+    /**   处理人  handler   **/
+    public String getHandler() {
+        return handler;
+    }
+
+    /**   处理人  handler   **/
+    public void setHandler(String handler) {
+        this.handler = handler == null ? null : handler.trim();
+    }
+
+    /**   处理时间  handledat   **/
+    public Date getHandledat() {
+        return handledat;
+    }
+
+    /**   处理时间  handledat   **/
+    public void setHandledat(Date handledat) {
+        this.handledat = handledat;
+    }
+
+    /**   对应入库单号  entryorder   **/
+    public String getEntryorder() {
+        return entryorder;
+    }
+
+    /**   对应入库单号  entryorder   **/
+    public void setEntryorder(String entryorder) {
+        this.entryorder = entryorder == null ? null : entryorder.trim();
+    }
+
+    /**   预留标记  flag   **/
+    public Byte getFlag() {
+        return flag;
+    }
+
+    /**   预留标记  flag   **/
+    public void setFlag(Byte flag) {
+        this.flag = flag;
+    }
+
+    /**   预留内容  content   **/
+    public String getContent() {
+        return content;
+    }
+
+    /**   预留内容  content   **/
+    public void setContent(String content) {
+        this.content = content == null ? null : content.trim();
+    }
+
+    /**   预留内容2  remark   **/
+    public String getRemark() {
+        return remark;
+    }
+
+    /**   预留内容2  remark   **/
+    public void setRemark(String remark) {
+        this.remark = remark == null ? null : remark.trim();
+    }
+
+    public String getCompanynumber() {
+        return companynumber;
+    }
+
+    public void setCompanynumber(String companynumber) {
+        this.companynumber = companynumber;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/StandardConferenceRecord.java b/src/main/java/com/gk/firework/Domain/StandardConferenceRecord.java
new file mode 100644
index 0000000..7e16566
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/StandardConferenceRecord.java
@@ -0,0 +1,211 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.util.Date;
+
+@TableName("standardconferencerecord")
+public class StandardConferenceRecord implements Serializable {
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 会议开始时间  starttime **/
+    private Date starttime;
+
+    /** 会议结束时间  endtime **/
+    private Date endtime;
+
+    /** 会议主题  theme **/
+    private String theme;
+
+    /** 会议主持人  host **/
+    private String host;
+
+    /** 会议参与人  participant **/
+    private String participant;
+
+    /** 创建时间  createtime **/
+    private Date createtime;
+
+    /** 创建人id  createby **/
+    private Long createby;
+
+    /** 创建人name  createbyname **/
+    private String createbyname;
+
+    /** 更新时间  updatetime **/
+    private Date updatetime;
+
+    /** 更新人id  updateby **/
+    private Long updateby;
+
+    /** 更新人name  updatebyname **/
+    private String updatebyname;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /** 企业编号  enterprisenumber **/
+    private String enterprisenumber;
+
+    /** 企业名称  enterprisename **/
+    private String enterprisename;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   会议开始时间  starttime   **/
+    public Date getStarttime() {
+        return starttime;
+    }
+
+    /**   会议开始时间  starttime   **/
+    public void setStarttime(Date starttime) {
+        this.starttime = starttime;
+    }
+
+    /**   会议结束时间  endtime   **/
+    public Date getEndtime() {
+        return endtime;
+    }
+
+    /**   会议结束时间  endtime   **/
+    public void setEndtime(Date endtime) {
+        this.endtime = endtime;
+    }
+
+    /**   会议主题  theme   **/
+    public String getTheme() {
+        return theme;
+    }
+
+    /**   会议主题  theme   **/
+    public void setTheme(String theme) {
+        this.theme = theme == null ? null : theme.trim();
+    }
+
+    /**   会议主持人  host   **/
+    public String getHost() {
+        return host;
+    }
+
+    /**   会议主持人  host   **/
+    public void setHost(String host) {
+        this.host = host == null ? null : host.trim();
+    }
+
+    /**   会议参与人  participant   **/
+    public String getParticipant() {
+        return participant;
+    }
+
+    /**   会议参与人  participant   **/
+    public void setParticipant(String participant) {
+        this.participant = participant == null ? null : participant.trim();
+    }
+
+    /**   创建时间  createtime   **/
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    /**   创建时间  createtime   **/
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    /**   创建人id  createby   **/
+    public Long getCreateby() {
+        return createby;
+    }
+
+    /**   创建人id  createby   **/
+    public void setCreateby(Long createby) {
+        this.createby = createby;
+    }
+
+    /**   创建人name  createbyname   **/
+    public String getCreatebyname() {
+        return createbyname;
+    }
+
+    /**   创建人name  createbyname   **/
+    public void setCreatebyname(String createbyname) {
+        this.createbyname = createbyname == null ? null : createbyname.trim();
+    }
+
+    /**   更新时间  updatetime   **/
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    /**   更新时间  updatetime   **/
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    /**   更新人id  updateby   **/
+    public Long getUpdateby() {
+        return updateby;
+    }
+
+    /**   更新人id  updateby   **/
+    public void setUpdateby(Long updateby) {
+        this.updateby = updateby;
+    }
+
+    /**   更新人name  updatebyname   **/
+    public String getUpdatebyname() {
+        return updatebyname;
+    }
+
+    /**   更新人name  updatebyname   **/
+    public void setUpdatebyname(String updatebyname) {
+        this.updatebyname = updatebyname == null ? null : updatebyname.trim();
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    /**   企业编号  enterprisenumber   **/
+    public String getEnterprisenumber() {
+        return enterprisenumber;
+    }
+
+    /**   企业编号  enterprisenumber   **/
+    public void setEnterprisenumber(String enterprisenumber) {
+        this.enterprisenumber = enterprisenumber == null ? null : enterprisenumber.trim();
+    }
+
+    /**   企业名称  enterprisename   **/
+    public String getEnterprisename() {
+        return enterprisename;
+    }
+
+    /**   企业名称  enterprisename   **/
+    public void setEnterprisename(String enterprisename) {
+        this.enterprisename = enterprisename == null ? null : enterprisename.trim();
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/StandardDeviceToolsLeger.java b/src/main/java/com/gk/firework/Domain/StandardDeviceToolsLeger.java
new file mode 100644
index 0000000..1a0908a
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/StandardDeviceToolsLeger.java
@@ -0,0 +1,223 @@
+package com.gk.firework.Domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@TableName("standarddevicetoolsleger")
+public class StandardDeviceToolsLeger implements Serializable {
+
+
+    private static final long serialVersionUID = 1L;
+    /** 主键id  id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 设备设施名称  devicename **/
+    private String devicename;
+
+    /** 数量  num **/
+    private Integer num;
+
+    /** 维护、维修、检查项目  maintaincontent **/
+    private String maintaincontent;
+
+    /** 维护、维修、检查时间  maintaintime **/
+    private Date maintaintime;
+
+    /** 维护、维修、检查责任人  maintainperson **/
+    private String maintainperson;
+
+    /** 备注  memo **/
+    private String memo;
+
+    /** 创建时间  createtime **/
+    private Date createtime;
+
+    /** 创建人id  createby **/
+    private Long createby;
+
+    /** 创建人name  createbyname **/
+    private String createbyname;
+
+    /** 更新时间  updatetime **/
+    private Date updatetime;
+
+    /** 更新人id  updateby **/
+    private Long updateby;
+
+    /** 更新人name  updatebyname **/
+    private String updatebyname;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /** 企业编号  enterprisenumber **/
+    private String enterprisenumber;
+
+    /** 企业名称  enterprisename **/
+    private String enterprisename;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   设备设施名称  devicename   **/
+    public String getDevicename() {
+        return devicename;
+    }
+
+    /**   设备设施名称  devicename   **/
+    public void setDevicename(String devicename) {
+        this.devicename = devicename == null ? null : devicename.trim();
+    }
+
+    /**   数量  num   **/
+    public Integer getNum() {
+        return num;
+    }
+
+    /**   数量  num   **/
+    public void setNum(Integer num) {
+        this.num = num;
+    }
+
+    /**   维护、维修、检查项目  maintaincontent   **/
+    public String getMaintaincontent() {
+        return maintaincontent;
+    }
+
+    /**   维护、维修、检查项目  maintaincontent   **/
+    public void setMaintaincontent(String maintaincontent) {
+        this.maintaincontent = maintaincontent == null ? null : maintaincontent.trim();
+    }
+
+    /**   维护、维修、检查时间  maintaintime   **/
+    public Date getMaintaintime() {
+        return maintaintime;
+    }
+
+    /**   维护、维修、检查时间  maintaintime   **/
+    public void setMaintaintime(Date maintaintime) {
+        this.maintaintime = maintaintime;
+    }
+
+    /**   维护、维修、检查责任人  maintainperson   **/
+    public String getMaintainperson() {
+        return maintainperson;
+    }
+
+    /**   维护、维修、检查责任人  maintainperson   **/
+    public void setMaintainperson(String maintainperson) {
+        this.maintainperson = maintainperson == null ? null : maintainperson.trim();
+    }
+
+    /**   备注  memo   **/
+    public String getMemo() {
+        return memo;
+    }
+
+    /**   备注  memo   **/
+    public void setMemo(String memo) {
+        this.memo = memo == null ? null : memo.trim();
+    }
+
+    /**   创建时间  createtime   **/
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    /**   创建时间  createtime   **/
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    /**   创建人id  createby   **/
+    public Long getCreateby() {
+        return createby;
+    }
+
+    /**   创建人id  createby   **/
+    public void setCreateby(Long createby) {
+        this.createby = createby;
+    }
+
+    /**   创建人name  createbyname   **/
+    public String getCreatebyname() {
+        return createbyname;
+    }
+
+    /**   创建人name  createbyname   **/
+    public void setCreatebyname(String createbyname) {
+        this.createbyname = createbyname == null ? null : createbyname.trim();
+    }
+
+    /**   更新时间  updatetime   **/
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    /**   更新时间  updatetime   **/
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    /**   更新人id  updateby   **/
+    public Long getUpdateby() {
+        return updateby;
+    }
+
+    /**   更新人id  updateby   **/
+    public void setUpdateby(Long updateby) {
+        this.updateby = updateby;
+    }
+
+    /**   更新人name  updatebyname   **/
+    public String getUpdatebyname() {
+        return updatebyname;
+    }
+
+    /**   更新人name  updatebyname   **/
+    public void setUpdatebyname(String updatebyname) {
+        this.updatebyname = updatebyname == null ? null : updatebyname.trim();
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    /**   企业编号  enterprisenumber   **/
+    public String getEnterprisenumber() {
+        return enterprisenumber;
+    }
+
+    /**   企业编号  enterprisenumber   **/
+    public void setEnterprisenumber(String enterprisenumber) {
+        this.enterprisenumber = enterprisenumber == null ? null : enterprisenumber.trim();
+    }
+
+    /**   企业名称  enterprisename   **/
+    public String getEnterprisename() {
+        return enterprisename;
+    }
+
+    /**   企业名称  enterprisename   **/
+    public void setEnterprisename(String enterprisename) {
+        this.enterprisename = enterprisename == null ? null : enterprisename.trim();
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/StandardEducationLeger.java b/src/main/java/com/gk/firework/Domain/StandardEducationLeger.java
new file mode 100644
index 0000000..a47fb19
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/StandardEducationLeger.java
@@ -0,0 +1,279 @@
+package com.gk.firework.Domain;
+
+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 org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@TableName("standardeducationleger")
+public class StandardEducationLeger implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    /** 主键id  id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 企业名称  enterprisename **/
+    private String enterprisename;
+
+    /** 企业编号  enterprisenumber **/
+    private String enterprisenumber;
+
+    /** 开始时间  starttime **/
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date starttime;
+
+    /** 结束时间  endtime **/
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    private Date endtime;
+
+    /** 培训地点  location **/
+    private String location;
+
+    /** 培训主题  theme **/
+    private String theme;
+
+    /** 授课人  teacher **/
+    private String teacher;
+
+    /** 参与人  participant **/
+    private String participant;
+
+    /** 培训内容  content **/
+    private String content;
+
+    /** 文件名  filename **/
+    private String filename;
+
+    /** 文件路径  url **/
+    private String url;
+
+    /** 创建时间  createtime **/
+    private Date createtime;
+
+    /** 创建人id  createby **/
+    private Long createby;
+
+    /** 创建人name  createbyname **/
+    private String createbyname;
+
+    /** 更新时间  updatetime **/
+    private Date updatetime;
+
+    /** 更新人id  updateby **/
+    private Long updateby;
+
+    /** 更新人name  updatebyname **/
+    private String updatebyname;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    @TableField(exist = false)
+    private MultipartFile file;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   企业名称  enterprisename   **/
+    public String getEnterprisename() {
+        return enterprisename;
+    }
+
+    /**   企业名称  enterprisename   **/
+    public void setEnterprisename(String enterprisename) {
+        this.enterprisename = enterprisename == null ? null : enterprisename.trim();
+    }
+
+    /**   企业编号  enterprisenumber   **/
+    public String getEnterprisenumber() {
+        return enterprisenumber;
+    }
+
+    /**   企业编号  enterprisenumber   **/
+    public void setEnterprisenumber(String enterprisenumber) {
+        this.enterprisenumber = enterprisenumber == null ? null : enterprisenumber.trim();
+    }
+
+    /**   开始时间  starttime   **/
+    public Date getStarttime() {
+        return starttime;
+    }
+
+    /**   开始时间  starttime   **/
+    public void setStarttime(Date starttime) {
+        this.starttime = starttime;
+    }
+
+    /**   结束时间  endtime   **/
+    public Date getEndtime() {
+        return endtime;
+    }
+
+    /**   结束时间  endtime   **/
+    public void setEndtime(Date endtime) {
+        this.endtime = endtime;
+    }
+
+    /**   培训地点  location   **/
+    public String getLocation() {
+        return location;
+    }
+
+    /**   培训地点  location   **/
+    public void setLocation(String location) {
+        this.location = location == null ? null : location.trim();
+    }
+
+    /**   培训主题  theme   **/
+    public String getTheme() {
+        return theme;
+    }
+
+    /**   培训主题  theme   **/
+    public void setTheme(String theme) {
+        this.theme = theme == null ? null : theme.trim();
+    }
+
+    /**   授课人  teacher   **/
+    public String getTeacher() {
+        return teacher;
+    }
+
+    /**   授课人  teacher   **/
+    public void setTeacher(String teacher) {
+        this.teacher = teacher == null ? null : teacher.trim();
+    }
+
+    /**   参与人  participant   **/
+    public String getParticipant() {
+        return participant;
+    }
+
+    /**   参与人  participant   **/
+    public void setParticipant(String participant) {
+        this.participant = participant == null ? null : participant.trim();
+    }
+
+    /**   培训内容  content   **/
+    public String getContent() {
+        return content;
+    }
+
+    /**   培训内容  content   **/
+    public void setContent(String content) {
+        this.content = content == null ? null : content.trim();
+    }
+
+    /**   文件名  filename   **/
+    public String getFilename() {
+        return filename;
+    }
+
+    /**   文件名  filename   **/
+    public void setFilename(String filename) {
+        this.filename = filename == null ? null : filename.trim();
+    }
+
+    /**   文件路径  url   **/
+    public String getUrl() {
+        return url;
+    }
+
+    /**   文件路径  url   **/
+    public void setUrl(String url) {
+        this.url = url == null ? null : url.trim();
+    }
+
+    /**   创建时间  createtime   **/
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    /**   创建时间  createtime   **/
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    /**   创建人id  createby   **/
+    public Long getCreateby() {
+        return createby;
+    }
+
+    /**   创建人id  createby   **/
+    public void setCreateby(Long createby) {
+        this.createby = createby;
+    }
+
+    /**   创建人name  createbyname   **/
+    public String getCreatebyname() {
+        return createbyname;
+    }
+
+    /**   创建人name  createbyname   **/
+    public void setCreatebyname(String createbyname) {
+        this.createbyname = createbyname == null ? null : createbyname.trim();
+    }
+
+    /**   更新时间  updatetime   **/
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    /**   更新时间  updatetime   **/
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    /**   更新人id  updateby   **/
+    public Long getUpdateby() {
+        return updateby;
+    }
+
+    /**   更新人id  updateby   **/
+    public void setUpdateby(Long updateby) {
+        this.updateby = updateby;
+    }
+
+    /**   更新人name  updatebyname   **/
+    public String getUpdatebyname() {
+        return updatebyname;
+    }
+
+    /**   更新人name  updatebyname   **/
+    public void setUpdatebyname(String updatebyname) {
+        this.updatebyname = updatebyname == null ? null : updatebyname.trim();
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+
+    public MultipartFile getFile() {
+        return file;
+    }
+
+    public void setFile(MultipartFile file) {
+        this.file = file;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/StandardEquipmentLeger.java b/src/main/java/com/gk/firework/Domain/StandardEquipmentLeger.java
new file mode 100644
index 0000000..70344b4
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/StandardEquipmentLeger.java
@@ -0,0 +1,213 @@
+package com.gk.firework.Domain;
+
+import java.util.Date;
+
+public class StandardEquipmentLeger {
+    /** 主键id  id **/
+    private Long id;
+
+    /** 设施设备名称  name **/
+    private String name;
+
+    /** 数量  num **/
+    private Integer num;
+
+    /** 维护、维修、检查项目  checkcontent **/
+    private String checkcontent;
+
+    /** 维护时间  checktime **/
+    private Date checktime;
+
+    /** 维护责任人  checkperson **/
+    private String checkperson;
+
+    /** 备注  memo **/
+    private String memo;
+
+    /** 创建时间  createtime **/
+    private Date createtime;
+
+    /** 创建人id  createby **/
+    private Long createby;
+
+    /** 创建人name  createbyname **/
+    private String createbyname;
+
+    /** 更新时间  updatetime **/
+    private Date updatetime;
+
+    /** 更新人id  updateby **/
+    private Long updateby;
+
+    /** 更新人name  updatebyname **/
+    private String updatebyname;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /** 企业编号  enterprisenumber **/
+    private String enterprisenumber;
+
+    /** 企业名称  enterprisename **/
+    private String enterprisename;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   设施设备名称  name   **/
+    public String getName() {
+        return name;
+    }
+
+    /**   设施设备名称  name   **/
+    public void setName(String name) {
+        this.name = name == null ? null : name.trim();
+    }
+
+    /**   数量  num   **/
+    public Integer getNum() {
+        return num;
+    }
+
+    /**   数量  num   **/
+    public void setNum(Integer num) {
+        this.num = num;
+    }
+
+    /**   维护、维修、检查项目  checkcontent   **/
+    public String getCheckcontent() {
+        return checkcontent;
+    }
+
+    /**   维护、维修、检查项目  checkcontent   **/
+    public void setCheckcontent(String checkcontent) {
+        this.checkcontent = checkcontent == null ? null : checkcontent.trim();
+    }
+
+    /**   维护时间  checktime   **/
+    public Date getChecktime() {
+        return checktime;
+    }
+
+    /**   维护时间  checktime   **/
+    public void setChecktime(Date checktime) {
+        this.checktime = checktime;
+    }
+
+    /**   维护责任人  checkperson   **/
+    public String getCheckperson() {
+        return checkperson;
+    }
+
+    /**   维护责任人  checkperson   **/
+    public void setCheckperson(String checkperson) {
+        this.checkperson = checkperson == null ? null : checkperson.trim();
+    }
+
+    /**   备注  memo   **/
+    public String getMemo() {
+        return memo;
+    }
+
+    /**   备注  memo   **/
+    public void setMemo(String memo) {
+        this.memo = memo == null ? null : memo.trim();
+    }
+
+    /**   创建时间  createtime   **/
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    /**   创建时间  createtime   **/
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    /**   创建人id  createby   **/
+    public Long getCreateby() {
+        return createby;
+    }
+
+    /**   创建人id  createby   **/
+    public void setCreateby(Long createby) {
+        this.createby = createby;
+    }
+
+    /**   创建人name  createbyname   **/
+    public String getCreatebyname() {
+        return createbyname;
+    }
+
+    /**   创建人name  createbyname   **/
+    public void setCreatebyname(String createbyname) {
+        this.createbyname = createbyname == null ? null : createbyname.trim();
+    }
+
+    /**   更新时间  updatetime   **/
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    /**   更新时间  updatetime   **/
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    /**   更新人id  updateby   **/
+    public Long getUpdateby() {
+        return updateby;
+    }
+
+    /**   更新人id  updateby   **/
+    public void setUpdateby(Long updateby) {
+        this.updateby = updateby;
+    }
+
+    /**   更新人name  updatebyname   **/
+    public String getUpdatebyname() {
+        return updatebyname;
+    }
+
+    /**   更新人name  updatebyname   **/
+    public void setUpdatebyname(String updatebyname) {
+        this.updatebyname = updatebyname == null ? null : updatebyname.trim();
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    /**   企业编号  enterprisenumber   **/
+    public String getEnterprisenumber() {
+        return enterprisenumber;
+    }
+
+    /**   企业编号  enterprisenumber   **/
+    public void setEnterprisenumber(String enterprisenumber) {
+        this.enterprisenumber = enterprisenumber == null ? null : enterprisenumber.trim();
+    }
+
+    /**   企业名称  enterprisename   **/
+    public String getEnterprisename() {
+        return enterprisename;
+    }
+
+    /**   企业名称  enterprisename   **/
+    public void setEnterprisename(String enterprisename) {
+        this.enterprisename = enterprisename == null ? null : enterprisename.trim();
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/StandardGuardRoll.java b/src/main/java/com/gk/firework/Domain/StandardGuardRoll.java
new file mode 100644
index 0000000..0264469
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/StandardGuardRoll.java
@@ -0,0 +1,213 @@
+package com.gk.firework.Domain;
+
+import java.util.Date;
+
+public class StandardGuardRoll {
+    /** 主键id  id **/
+    private Long id;
+
+    /** 岗位  position **/
+    private String position;
+
+    /** 姓名  name **/
+    private String name;
+
+    /** 性别  sex **/
+    private String sex;
+
+    /** 身份证号  identify **/
+    private String identify;
+
+    /** 联系电话  telephone **/
+    private String telephone;
+
+    /** 备注  memo **/
+    private String memo;
+
+    /** 创建时间  createtime **/
+    private Date createtime;
+
+    /** 创建人id  createby **/
+    private Long createby;
+
+    /** 创建人name  createbyname **/
+    private String createbyname;
+
+    /** 更新时间  updatetime **/
+    private Date updatetime;
+
+    /** 更新人id  updateby **/
+    private Long updateby;
+
+    /** 更新人name  updatebyname **/
+    private String updatebyname;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /** 企业编号  enterprisenumber **/
+    private String enterprisenumber;
+
+    /** 企业名称  enterprisename **/
+    private String enterprisename;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   岗位  position   **/
+    public String getPosition() {
+        return position;
+    }
+
+    /**   岗位  position   **/
+    public void setPosition(String position) {
+        this.position = position == null ? null : position.trim();
+    }
+
+    /**   姓名  name   **/
+    public String getName() {
+        return name;
+    }
+
+    /**   姓名  name   **/
+    public void setName(String name) {
+        this.name = name == null ? null : name.trim();
+    }
+
+    /**   性别  sex   **/
+    public String getSex() {
+        return sex;
+    }
+
+    /**   性别  sex   **/
+    public void setSex(String sex) {
+        this.sex = sex == null ? null : sex.trim();
+    }
+
+    /**   身份证号  identify   **/
+    public String getIdentify() {
+        return identify;
+    }
+
+    /**   身份证号  identify   **/
+    public void setIdentify(String identify) {
+        this.identify = identify == null ? null : identify.trim();
+    }
+
+    /**   联系电话  telephone   **/
+    public String getTelephone() {
+        return telephone;
+    }
+
+    /**   联系电话  telephone   **/
+    public void setTelephone(String telephone) {
+        this.telephone = telephone == null ? null : telephone.trim();
+    }
+
+    /**   备注  memo   **/
+    public String getMemo() {
+        return memo;
+    }
+
+    /**   备注  memo   **/
+    public void setMemo(String memo) {
+        this.memo = memo == null ? null : memo.trim();
+    }
+
+    /**   创建时间  createtime   **/
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    /**   创建时间  createtime   **/
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    /**   创建人id  createby   **/
+    public Long getCreateby() {
+        return createby;
+    }
+
+    /**   创建人id  createby   **/
+    public void setCreateby(Long createby) {
+        this.createby = createby;
+    }
+
+    /**   创建人name  createbyname   **/
+    public String getCreatebyname() {
+        return createbyname;
+    }
+
+    /**   创建人name  createbyname   **/
+    public void setCreatebyname(String createbyname) {
+        this.createbyname = createbyname == null ? null : createbyname.trim();
+    }
+
+    /**   更新时间  updatetime   **/
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    /**   更新时间  updatetime   **/
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    /**   更新人id  updateby   **/
+    public Long getUpdateby() {
+        return updateby;
+    }
+
+    /**   更新人id  updateby   **/
+    public void setUpdateby(Long updateby) {
+        this.updateby = updateby;
+    }
+
+    /**   更新人name  updatebyname   **/
+    public String getUpdatebyname() {
+        return updatebyname;
+    }
+
+    /**   更新人name  updatebyname   **/
+    public void setUpdatebyname(String updatebyname) {
+        this.updatebyname = updatebyname == null ? null : updatebyname.trim();
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    /**   企业编号  enterprisenumber   **/
+    public String getEnterprisenumber() {
+        return enterprisenumber;
+    }
+
+    /**   企业编号  enterprisenumber   **/
+    public void setEnterprisenumber(String enterprisenumber) {
+        this.enterprisenumber = enterprisenumber == null ? null : enterprisenumber.trim();
+    }
+
+    /**   企业名称  enterprisename   **/
+    public String getEnterprisename() {
+        return enterprisename;
+    }
+
+    /**   企业名称  enterprisename   **/
+    public void setEnterprisename(String enterprisename) {
+        this.enterprisename = enterprisename == null ? null : enterprisename.trim();
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/StandardHiddenDangerLeger.java b/src/main/java/com/gk/firework/Domain/StandardHiddenDangerLeger.java
new file mode 100644
index 0000000..91925c4
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/StandardHiddenDangerLeger.java
@@ -0,0 +1,236 @@
+package com.gk.firework.Domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import org.springframework.data.relational.core.mapping.Table;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@TableName("standardhiddendangerleger")
+public class StandardHiddenDangerLeger implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    /** 主键id  id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 检查时间  checktime **/
+    private Date checktime;
+
+    /** 存在隐患  content **/
+    private String content;
+
+    /** 隐患类型  type **/
+    private String type;
+
+    /** 整改方式  rectifymethod **/
+    private String rectifymethod;
+
+    /** 整改期限  rectifydeadline **/
+    private Date rectifydeadline;
+
+    /** 整改负责人  rectifyperson **/
+    private String rectifyperson;
+
+    /** 整改状态  rectifystatus **/
+    private String rectifystatus;
+
+    /** 创建时间  createtime **/
+    private Date createtime;
+
+    /** 创建人id  createby **/
+    private Long createby;
+
+    /** 创建人name  createbyname **/
+    private String createbyname;
+
+    /** 更新时间  updatetime **/
+    private Date updatetime;
+
+    /** 更新人id  updateby **/
+    private Long updateby;
+
+    /** 更新人name  updatebyname **/
+    private String updatebyname;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /** 企业编号  enterprisenumber **/
+    private String enterprisenumber;
+
+    /** 企业名称  enterprisename **/
+    private String enterprisename;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   检查时间  checktime   **/
+    public Date getChecktime() {
+        return checktime;
+    }
+
+    /**   检查时间  checktime   **/
+    public void setChecktime(Date checktime) {
+        this.checktime = checktime;
+    }
+
+    /**   存在隐患  content   **/
+    public String getContent() {
+        return content;
+    }
+
+    /**   存在隐患  content   **/
+    public void setContent(String content) {
+        this.content = content == null ? null : content.trim();
+    }
+
+    /**   隐患类型  type   **/
+    public String getType() {
+        return type;
+    }
+
+    /**   隐患类型  type   **/
+    public void setType(String type) {
+        this.type = type == null ? null : type.trim();
+    }
+
+    /**   整改方式  rectifymethod   **/
+    public String getRectifymethod() {
+        return rectifymethod;
+    }
+
+    /**   整改方式  rectifymethod   **/
+    public void setRectifymethod(String rectifymethod) {
+        this.rectifymethod = rectifymethod == null ? null : rectifymethod.trim();
+    }
+
+    /**   整改期限  rectifydeadline   **/
+    public Date getRectifydeadline() {
+        return rectifydeadline;
+    }
+
+    /**   整改期限  rectifydeadline   **/
+    public void setRectifydeadline(Date rectifydeadline) {
+        this.rectifydeadline = rectifydeadline;
+    }
+
+    /**   整改负责人  rectifyperson   **/
+    public String getRectifyperson() {
+        return rectifyperson;
+    }
+
+    /**   整改负责人  rectifyperson   **/
+    public void setRectifyperson(String rectifyperson) {
+        this.rectifyperson = rectifyperson == null ? null : rectifyperson.trim();
+    }
+
+    /**   整改状态  rectifystatus   **/
+    public String getRectifystatus() {
+        return rectifystatus;
+    }
+
+    /**   整改状态  rectifystatus   **/
+    public void setRectifystatus(String rectifystatus) {
+        this.rectifystatus = rectifystatus == null ? null : rectifystatus.trim();
+    }
+
+    /**   创建时间  createtime   **/
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    /**   创建时间  createtime   **/
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    /**   创建人id  createby   **/
+    public Long getCreateby() {
+        return createby;
+    }
+
+    /**   创建人id  createby   **/
+    public void setCreateby(Long createby) {
+        this.createby = createby;
+    }
+
+    /**   创建人name  createbyname   **/
+    public String getCreatebyname() {
+        return createbyname;
+    }
+
+    /**   创建人name  createbyname   **/
+    public void setCreatebyname(String createbyname) {
+        this.createbyname = createbyname == null ? null : createbyname.trim();
+    }
+
+    /**   更新时间  updatetime   **/
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    /**   更新时间  updatetime   **/
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    /**   更新人id  updateby   **/
+    public Long getUpdateby() {
+        return updateby;
+    }
+
+    /**   更新人id  updateby   **/
+    public void setUpdateby(Long updateby) {
+        this.updateby = updateby;
+    }
+
+    /**   更新人name  updatebyname   **/
+    public String getUpdatebyname() {
+        return updatebyname;
+    }
+
+    /**   更新人name  updatebyname   **/
+    public void setUpdatebyname(String updatebyname) {
+        this.updatebyname = updatebyname == null ? null : updatebyname.trim();
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    /**   企业编号  enterprisenumber   **/
+    public String getEnterprisenumber() {
+        return enterprisenumber;
+    }
+
+    /**   企业编号  enterprisenumber   **/
+    public void setEnterprisenumber(String enterprisenumber) {
+        this.enterprisenumber = enterprisenumber == null ? null : enterprisenumber.trim();
+    }
+
+    /**   企业名称  enterprisename   **/
+    public String getEnterprisename() {
+        return enterprisename;
+    }
+
+    /**   企业名称  enterprisename   **/
+    public void setEnterprisename(String enterprisename) {
+        this.enterprisename = enterprisename == null ? null : enterprisename.trim();
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/StandardLawList.java b/src/main/java/com/gk/firework/Domain/StandardLawList.java
new file mode 100644
index 0000000..9030034
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/StandardLawList.java
@@ -0,0 +1,281 @@
+package com.gk.firework.Domain;
+
+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 org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@TableName("standardlawlist")
+public class StandardLawList implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    /** 主键id  id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**  法律法规标准及其他要求  claim **/
+    private String claim;
+
+    /** 生效日期  effectivedate **/
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    private Date effectivedate;
+
+    /** 颁布部门  department **/
+    private String department;
+
+    /** 法规/标准编号  number **/
+    private String number;
+
+    /** 相关条款说明  description **/
+    private String description;
+
+    /** 适用范围  ranges **/
+    private String ranges;
+
+    /** 更新情况  updateinfo **/
+    private String updateinfo;
+
+    /** 排序顺序(数字越小,排列越靠前)  orderindex **/
+    private Integer orderindex;
+
+    /** 地址  url **/
+    private String url;
+
+    /** 文件名  filename **/
+    private String filename;
+
+    /** 创建时间  createtime **/
+    private Date createtime;
+
+    /** 创建人id  createby **/
+    private Long createby;
+
+    /** 创建人name  createbyname **/
+    private String createbyname;
+
+    /** 更新时间  updatetime **/
+    private Date updatetime;
+
+    /** 更新人id  updateby **/
+    private Long updateby;
+
+    /** 更新人name  updatebyname **/
+    private String updatebyname;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    private String enterprisenumber;
+
+    private String enterprisename;
+
+    @TableField(exist = false)
+    private MultipartFile file;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**    法律法规标准及其他要求  claim   **/
+    public String getClaim() {
+        return claim;
+    }
+
+    /**    法律法规标准及其他要求  claim   **/
+    public void setClaim(String claim) {
+        this.claim = claim == null ? null : claim.trim();
+    }
+
+    /**   生效日期  effectivedate   **/
+    public Date getEffectivedate() {
+        return effectivedate;
+    }
+
+    /**   生效日期  effectivedate   **/
+    public void setEffectivedate(Date effectivedate) {
+        this.effectivedate = effectivedate;
+    }
+
+    /**   颁布部门  department   **/
+    public String getDepartment() {
+        return department;
+    }
+
+    /**   颁布部门  department   **/
+    public void setDepartment(String department) {
+        this.department = department == null ? null : department.trim();
+    }
+
+    /**   法规/标准编号  number   **/
+    public String getNumber() {
+        return number;
+    }
+
+    /**   法规/标准编号  number   **/
+    public void setNumber(String number) {
+        this.number = number == null ? null : number.trim();
+    }
+
+    /**   相关条款说明  description   **/
+    public String getDescription() {
+        return description;
+    }
+
+    /**   相关条款说明  description   **/
+    public void setDescription(String description) {
+        this.description = description == null ? null : description.trim();
+    }
+
+    public String getRanges() {
+        return ranges;
+    }
+
+    public void setRanges(String ranges) {
+        this.ranges = ranges;
+    }
+
+    /**   更新情况  updateinfo   **/
+    public String getUpdateinfo() {
+        return updateinfo;
+    }
+
+    /**   更新情况  updateinfo   **/
+    public void setUpdateinfo(String updateinfo) {
+        this.updateinfo = updateinfo == null ? null : updateinfo.trim();
+    }
+
+    /**   排序顺序(数字越小,排列越靠前)  orderindex   **/
+    public Integer getOrderindex() {
+        return orderindex;
+    }
+
+    /**   排序顺序(数字越小,排列越靠前)  orderindex   **/
+    public void setOrderindex(Integer orderindex) {
+        this.orderindex = orderindex;
+    }
+
+    /**   地址  url   **/
+    public String getUrl() {
+        return url;
+    }
+
+    /**   地址  url   **/
+    public void setUrl(String url) {
+        this.url = url == null ? null : url.trim();
+    }
+
+    /**   文件名  filename   **/
+    public String getFilename() {
+        return filename;
+    }
+
+    /**   文件名  filename   **/
+    public void setFilename(String filename) {
+        this.filename = filename == null ? null : filename.trim();
+    }
+
+    /**   创建时间  createtime   **/
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    /**   创建时间  createtime   **/
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    /**   创建人id  createby   **/
+    public Long getCreateby() {
+        return createby;
+    }
+
+    /**   创建人id  createby   **/
+    public void setCreateby(Long createby) {
+        this.createby = createby;
+    }
+
+    /**   创建人name  createbyname   **/
+    public String getCreatebyname() {
+        return createbyname;
+    }
+
+    /**   创建人name  createbyname   **/
+    public void setCreatebyname(String createbyname) {
+        this.createbyname = createbyname == null ? null : createbyname.trim();
+    }
+
+    /**   更新时间  updatetime   **/
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    /**   更新时间  updatetime   **/
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    /**   更新人id  updateby   **/
+    public Long getUpdateby() {
+        return updateby;
+    }
+
+    /**   更新人id  updateby   **/
+    public void setUpdateby(Long updateby) {
+        this.updateby = updateby;
+    }
+
+    /**   更新人name  updatebyname   **/
+    public String getUpdatebyname() {
+        return updatebyname;
+    }
+
+    /**   更新人name  updatebyname   **/
+    public void setUpdatebyname(String updatebyname) {
+        this.updatebyname = updatebyname == null ? null : updatebyname.trim();
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    public MultipartFile getFile() {
+        return file;
+    }
+
+    public void setFile(MultipartFile file) {
+        this.file = file;
+    }
+
+    public String getEnterprisenumber() {
+        return enterprisenumber;
+    }
+
+    public void setEnterprisenumber(String enterprisenumber) {
+        this.enterprisenumber = enterprisenumber;
+    }
+
+    public String getEnterprisename() {
+        return enterprisename;
+    }
+
+    public void setEnterprisename(String enterprisename) {
+        this.enterprisename = enterprisename;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/StandardProductLeger.java b/src/main/java/com/gk/firework/Domain/StandardProductLeger.java
new file mode 100644
index 0000000..f02550a
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/StandardProductLeger.java
@@ -0,0 +1,197 @@
+package com.gk.firework.Domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@TableName("standardproductleger")
+public class StandardProductLeger implements Serializable {
+
+
+    private static final long serialVersionUID = 1L;
+    /** 主键id  id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 生产厂家  manufacturer **/
+    private String manufacturer;
+
+    /** 产品级别  level **/
+    private String level;
+
+    /** 产品类别  type **/
+    private String type;
+
+    /** 产品规格  specification **/
+    private String specification;
+
+    /** 创建时间  createtime **/
+    private Date createtime;
+
+    /** 创建人id  createby **/
+    private Long createby;
+
+    /** 创建人name  createbyname **/
+    private String createbyname;
+
+    /** 更新时间  updatetime **/
+    private Date updatetime;
+
+    /** 更新人id  updateby **/
+    private Long updateby;
+
+    /** 更新人name  updatebyname **/
+    private String updatebyname;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /** 企业编号  enterprisenumber **/
+    private String enterprisenumber;
+
+    /** 企业名称  enterprisename **/
+    private String enterprisename;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   生产厂家  manufacturer   **/
+    public String getManufacturer() {
+        return manufacturer;
+    }
+
+    /**   生产厂家  manufacturer   **/
+    public void setManufacturer(String manufacturer) {
+        this.manufacturer = manufacturer == null ? null : manufacturer.trim();
+    }
+
+    /**   产品级别  level   **/
+    public String getLevel() {
+        return level;
+    }
+
+    /**   产品级别  level   **/
+    public void setLevel(String level) {
+        this.level = level == null ? null : level.trim();
+    }
+
+    /**   产品类别  type   **/
+    public String getType() {
+        return type;
+    }
+
+    /**   产品类别  type   **/
+    public void setType(String type) {
+        this.type = type == null ? null : type.trim();
+    }
+
+    /**   产品规格  specification   **/
+    public String getSpecification() {
+        return specification;
+    }
+
+    /**   产品规格  specification   **/
+    public void setSpecification(String specification) {
+        this.specification = specification == null ? null : specification.trim();
+    }
+
+    /**   创建时间  createtime   **/
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    /**   创建时间  createtime   **/
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    /**   创建人id  createby   **/
+    public Long getCreateby() {
+        return createby;
+    }
+
+    /**   创建人id  createby   **/
+    public void setCreateby(Long createby) {
+        this.createby = createby;
+    }
+
+    /**   创建人name  createbyname   **/
+    public String getCreatebyname() {
+        return createbyname;
+    }
+
+    /**   创建人name  createbyname   **/
+    public void setCreatebyname(String createbyname) {
+        this.createbyname = createbyname == null ? null : createbyname.trim();
+    }
+
+    /**   更新时间  updatetime   **/
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    /**   更新时间  updatetime   **/
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    /**   更新人id  updateby   **/
+    public Long getUpdateby() {
+        return updateby;
+    }
+
+    /**   更新人id  updateby   **/
+    public void setUpdateby(Long updateby) {
+        this.updateby = updateby;
+    }
+
+    /**   更新人name  updatebyname   **/
+    public String getUpdatebyname() {
+        return updatebyname;
+    }
+
+    /**   更新人name  updatebyname   **/
+    public void setUpdatebyname(String updatebyname) {
+        this.updatebyname = updatebyname == null ? null : updatebyname.trim();
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    /**   企业编号  enterprisenumber   **/
+    public String getEnterprisenumber() {
+        return enterprisenumber;
+    }
+
+    /**   企业编号  enterprisenumber   **/
+    public void setEnterprisenumber(String enterprisenumber) {
+        this.enterprisenumber = enterprisenumber == null ? null : enterprisenumber.trim();
+    }
+
+    /**   企业名称  enterprisename   **/
+    public String getEnterprisename() {
+        return enterprisename;
+    }
+
+    /**   企业名称  enterprisename   **/
+    public void setEnterprisename(String enterprisename) {
+        this.enterprisename = enterprisename == null ? null : enterprisename.trim();
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/StandardRewardRecord.java b/src/main/java/com/gk/firework/Domain/StandardRewardRecord.java
new file mode 100644
index 0000000..1114781
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/StandardRewardRecord.java
@@ -0,0 +1,222 @@
+package com.gk.firework.Domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@TableName("standardrewardrecord")
+public class StandardRewardRecord implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    /** 主键id  id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 人员  staff **/
+    private String staff;
+
+    /** 岗位  post **/
+    private String post;
+
+    /** 奖惩原因  reason **/
+    private String reason;
+
+    /** 奖惩方式  method **/
+    private String method;
+
+    /** 奖惩时间  occurtime **/
+    private Date occurtime;
+
+    /** 创建时间  createtime **/
+    private Date createtime;
+
+    /** 创建人id  createby **/
+    private Long createby;
+
+    /** 创建人name  createbyname **/
+    private String createbyname;
+
+    /** 更新时间  updatetime **/
+    private Date updatetime;
+
+    /** 更新人id  updateby **/
+    private Long updateby;
+
+    /** 更新人name  updatebyname **/
+    private String updatebyname;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /** 企业编号  enterprisenumber **/
+    private String enterprisenumber;
+
+    /** 企业名称  enterprisename **/
+    private String enterprisename;
+
+    /** 奖:1,惩:0  type **/
+    private Boolean type;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   人员  staff   **/
+    public String getStaff() {
+        return staff;
+    }
+
+    /**   人员  staff   **/
+    public void setStaff(String staff) {
+        this.staff = staff == null ? null : staff.trim();
+    }
+
+    /**   岗位  post   **/
+    public String getPost() {
+        return post;
+    }
+
+    /**   岗位  post   **/
+    public void setPost(String post) {
+        this.post = post == null ? null : post.trim();
+    }
+
+    /**   奖惩原因  reason   **/
+    public String getReason() {
+        return reason;
+    }
+
+    /**   奖惩原因  reason   **/
+    public void setReason(String reason) {
+        this.reason = reason == null ? null : reason.trim();
+    }
+
+    /**   奖惩方式  method   **/
+    public String getMethod() {
+        return method;
+    }
+
+    /**   奖惩方式  method   **/
+    public void setMethod(String method) {
+        this.method = method == null ? null : method.trim();
+    }
+
+    /**   奖惩时间  occurtime   **/
+    public Date getOccurtime() {
+        return occurtime;
+    }
+
+    /**   奖惩时间  occurtime   **/
+    public void setOccurtime(Date occurtime) {
+        this.occurtime = occurtime;
+    }
+
+    /**   创建时间  createtime   **/
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    /**   创建时间  createtime   **/
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    /**   创建人id  createby   **/
+    public Long getCreateby() {
+        return createby;
+    }
+
+    /**   创建人id  createby   **/
+    public void setCreateby(Long createby) {
+        this.createby = createby;
+    }
+
+    /**   创建人name  createbyname   **/
+    public String getCreatebyname() {
+        return createbyname;
+    }
+
+    /**   创建人name  createbyname   **/
+    public void setCreatebyname(String createbyname) {
+        this.createbyname = createbyname == null ? null : createbyname.trim();
+    }
+
+    /**   更新时间  updatetime   **/
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    /**   更新时间  updatetime   **/
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    /**   更新人id  updateby   **/
+    public Long getUpdateby() {
+        return updateby;
+    }
+
+    /**   更新人id  updateby   **/
+    public void setUpdateby(Long updateby) {
+        this.updateby = updateby;
+    }
+
+    /**   更新人name  updatebyname   **/
+    public String getUpdatebyname() {
+        return updatebyname;
+    }
+
+    /**   更新人name  updatebyname   **/
+    public void setUpdatebyname(String updatebyname) {
+        this.updatebyname = updatebyname == null ? null : updatebyname.trim();
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    /**   企业编号  enterprisenumber   **/
+    public String getEnterprisenumber() {
+        return enterprisenumber;
+    }
+
+    /**   企业编号  enterprisenumber   **/
+    public void setEnterprisenumber(String enterprisenumber) {
+        this.enterprisenumber = enterprisenumber == null ? null : enterprisenumber.trim();
+    }
+
+    /**   企业名称  enterprisename   **/
+    public String getEnterprisename() {
+        return enterprisename;
+    }
+
+    /**   企业名称  enterprisename   **/
+    public void setEnterprisename(String enterprisename) {
+        this.enterprisename = enterprisename == null ? null : enterprisename.trim();
+    }
+
+    /**   奖:1,惩:0  type   **/
+    public Boolean getType() {
+        return type;
+    }
+
+    /**   奖:1,惩:0  type   **/
+    public void setType(Boolean type) {
+        this.type = type;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/StandardSupplyMarketObject.java b/src/main/java/com/gk/firework/Domain/StandardSupplyMarketObject.java
new file mode 100644
index 0000000..cf6d320
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/StandardSupplyMarketObject.java
@@ -0,0 +1,235 @@
+package com.gk.firework.Domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+//供销对象台账
+@TableName("standardsupplymarketobject")
+public class StandardSupplyMarketObject implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    /** 主键id  id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 单位名称  unitname **/
+    private String unitname;
+
+    /** 单位地址  unitaddress **/
+    private String unitaddress;
+
+    /** 证照是否有效  isvalid **/
+    private Boolean isvalid;
+
+    /** 联系人  contactperson **/
+    private String contactperson;
+
+    /** 联系电话  phone **/
+    private String phone;
+
+    /** 备注  memo **/
+    private String memo;
+
+    /** 创建时间  createtime **/
+    private Date createtime;
+
+    /** 创建人id  createby **/
+    private Long createby;
+
+    /** 创建人name  createbyname **/
+    private String createbyname;
+
+    /** 更新时间  updatetime **/
+    private Date updatetime;
+
+    /** 更新人id  updateby **/
+    private Long updateby;
+
+    /** 更新人name  updatebyname **/
+    private String updatebyname;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /** 企业编号  enterprisenumber **/
+    private String enterprisenumber;
+
+    /** 企业名称  enterprisename **/
+    private String enterprisename;
+
+    /** 菜单  menu **/
+    private String menu;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   单位名称  unitname   **/
+    public String getUnitname() {
+        return unitname;
+    }
+
+    /**   单位名称  unitname   **/
+    public void setUnitname(String unitname) {
+        this.unitname = unitname == null ? null : unitname.trim();
+    }
+
+    /**   单位地址  unitaddress   **/
+    public String getUnitaddress() {
+        return unitaddress;
+    }
+
+    /**   单位地址  unitaddress   **/
+    public void setUnitaddress(String unitaddress) {
+        this.unitaddress = unitaddress == null ? null : unitaddress.trim();
+    }
+
+    /**   证照是否有效  isvalid   **/
+    public Boolean getIsvalid() {
+        return isvalid;
+    }
+
+    /**   证照是否有效  isvalid   **/
+    public void setIsvalid(Boolean isvalid) {
+        this.isvalid = isvalid;
+    }
+
+    /**   联系人  contactperson   **/
+    public String getContactperson() {
+        return contactperson;
+    }
+
+    /**   联系人  contactperson   **/
+    public void setContactperson(String contactperson) {
+        this.contactperson = contactperson == null ? null : contactperson.trim();
+    }
+
+    /**   联系电话  phone   **/
+    public String getPhone() {
+        return phone;
+    }
+
+    /**   联系电话  phone   **/
+    public void setPhone(String phone) {
+        this.phone = phone == null ? null : phone.trim();
+    }
+
+    /**   备注  memo   **/
+    public String getMemo() {
+        return memo;
+    }
+
+    /**   备注  memo   **/
+    public void setMemo(String memo) {
+        this.memo = memo == null ? null : memo.trim();
+    }
+
+    /**   创建时间  createtime   **/
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    /**   创建时间  createtime   **/
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    /**   创建人id  createby   **/
+    public Long getCreateby() {
+        return createby;
+    }
+
+    /**   创建人id  createby   **/
+    public void setCreateby(Long createby) {
+        this.createby = createby;
+    }
+
+    /**   创建人name  createbyname   **/
+    public String getCreatebyname() {
+        return createbyname;
+    }
+
+    /**   创建人name  createbyname   **/
+    public void setCreatebyname(String createbyname) {
+        this.createbyname = createbyname == null ? null : createbyname.trim();
+    }
+
+    /**   更新时间  updatetime   **/
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    /**   更新时间  updatetime   **/
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    /**   更新人id  updateby   **/
+    public Long getUpdateby() {
+        return updateby;
+    }
+
+    /**   更新人id  updateby   **/
+    public void setUpdateby(Long updateby) {
+        this.updateby = updateby;
+    }
+
+    /**   更新人name  updatebyname   **/
+    public String getUpdatebyname() {
+        return updatebyname;
+    }
+
+    /**   更新人name  updatebyname   **/
+    public void setUpdatebyname(String updatebyname) {
+        this.updatebyname = updatebyname == null ? null : updatebyname.trim();
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    /**   企业编号  enterprisenumber   **/
+    public String getEnterprisenumber() {
+        return enterprisenumber;
+    }
+
+    /**   企业编号  enterprisenumber   **/
+    public void setEnterprisenumber(String enterprisenumber) {
+        this.enterprisenumber = enterprisenumber == null ? null : enterprisenumber.trim();
+    }
+
+    /**   企业名称  enterprisename   **/
+    public String getEnterprisename() {
+        return enterprisename;
+    }
+
+    /**   企业名称  enterprisename   **/
+    public void setEnterprisename(String enterprisename) {
+        this.enterprisename = enterprisename == null ? null : enterprisename.trim();
+    }
+
+    /**   菜单  menu   **/
+    public String getMenu() {
+        return menu;
+    }
+
+    /**   菜单  menu   **/
+    public void setMenu(String menu) {
+        this.menu = menu == null ? null : menu.trim();
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/StandardTemplate1.java b/src/main/java/com/gk/firework/Domain/StandardTemplate1.java
new file mode 100644
index 0000000..eb76868
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/StandardTemplate1.java
@@ -0,0 +1,233 @@
+package com.gk.firework.Domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@TableName("standardtemplate1")
+public class StandardTemplate1 implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    /** 主键id  id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 菜单  menu **/
+    private String menu;
+
+    /** 地址  url **/
+    private String url;
+
+    /** 文件名  filename **/
+    private String filename;
+
+    /** 制定时间  settime **/
+    private Date settime;
+
+    /** 企业编号  enterprisenumber **/
+    private String enterprisenumber;
+
+    /** 企业名称  enterprisename **/
+    private String enterprisename;
+
+    /** 名称  name **/
+    private String name;
+
+    /** 创建时间  createtime **/
+    private Date createtime;
+
+    /** 创建人id  createby **/
+    private Long createby;
+
+    /** 创建人name  createbyname **/
+    private String createbyname;
+
+    /** 更新时间  updatetime **/
+    private Date updatetime;
+
+    /** 更新人id  updateby **/
+    private String updateby;
+
+    /** 更新人name  updatebyname **/
+    private String updatebyname;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /** 类型  type **/
+    private Integer type;
+
+    /** 内容  content **/
+    private String content;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   菜单  menu   **/
+    public String getMenu() {
+        return menu;
+    }
+
+    /**   菜单  menu   **/
+    public void setMenu(String menu) {
+        this.menu = menu == null ? null : menu.trim();
+    }
+
+    /**   地址  url   **/
+    public String getUrl() {
+        return url;
+    }
+
+    /**   地址  url   **/
+    public void setUrl(String url) {
+        this.url = url == null ? null : url.trim();
+    }
+
+    /**   文件名  filename   **/
+    public String getFilename() {
+        return filename;
+    }
+
+    /**   文件名  filename   **/
+    public void setFilename(String filename) {
+        this.filename = filename == null ? null : filename.trim();
+    }
+
+    /**   制定时间  settime   **/
+    public Date getSettime() {
+        return settime;
+    }
+
+    /**   制定时间  settime   **/
+    public void setSettime(Date settime) {
+        this.settime = settime;
+    }
+
+    /**   企业编号  enterprisenumber   **/
+    public String getEnterprisenumber() {
+        return enterprisenumber;
+    }
+
+    /**   企业编号  enterprisenumber   **/
+    public void setEnterprisenumber(String enterprisenumber) {
+        this.enterprisenumber = enterprisenumber == null ? null : enterprisenumber.trim();
+    }
+
+    /**   企业名称  enterprisename   **/
+    public String getEnterprisename() {
+        return enterprisename;
+    }
+
+    /**   企业名称  enterprisename   **/
+    public void setEnterprisename(String enterprisename) {
+        this.enterprisename = enterprisename == null ? null : enterprisename.trim();
+    }
+
+    /**   名称  name   **/
+    public String getName() {
+        return name;
+    }
+
+    /**   名称  name   **/
+    public void setName(String name) {
+        this.name = name == null ? null : name.trim();
+    }
+
+    /**   创建时间  createtime   **/
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    /**   创建时间  createtime   **/
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    /**   创建人id  createby   **/
+    public Long getCreateby() {
+        return createby;
+    }
+
+    /**   创建人id  createby   **/
+    public void setCreateby(Long createby) {
+        this.createby = createby;
+    }
+
+    /**   创建人name  createbyname   **/
+    public String getCreatebyname() {
+        return createbyname;
+    }
+
+    /**   创建人name  createbyname   **/
+    public void setCreatebyname(String createbyname) {
+        this.createbyname = createbyname == null ? null : createbyname.trim();
+    }
+
+    /**   更新时间  updatetime   **/
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    /**   更新时间  updatetime   **/
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    /**   更新人id  updateby   **/
+    public String getUpdateby() {
+        return updateby;
+    }
+
+    /**   更新人id  updateby   **/
+    public void setUpdateby(String updateby) {
+        this.updateby = updateby == null ? null : updateby.trim();
+    }
+
+    /**   更新人name  updatebyname   **/
+    public String getUpdatebyname() {
+        return updatebyname;
+    }
+
+    /**   更新人name  updatebyname   **/
+    public void setUpdatebyname(String updatebyname) {
+        this.updatebyname = updatebyname == null ? null : updatebyname.trim();
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    /**   内容  content   **/
+    public String getContent() {
+        return content;
+    }
+
+    /**   内容  content   **/
+    public void setContent(String content) {
+        this.content = content == null ? null : content.trim();
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/StaticStock.java b/src/main/java/com/gk/firework/Domain/StaticStock.java
new file mode 100644
index 0000000..0093a63
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/StaticStock.java
@@ -0,0 +1,278 @@
+package com.gk.firework.Domain;
+
+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 java.math.BigDecimal;
+import java.util.Date;
+@TableName("staticstock")
+public class StaticStock {
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /**   id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 企业ID  owner **/
+    private Long owner;
+
+    /** 企业名称  enterpriseName **/
+    @TableField(value = "enterprisename")
+    private String enterpriseName;
+
+    /** 企业编号  enterpriseNumber **/
+    @TableField(value = "enterprisenumber")
+    private String enterpriseNumber;
+
+    /** 企业类型  safetySuperVision **/
+    @TableField(value = "safetysupervision")
+    private String safetySuperVision;
+
+    /** 省  province **/
+    private String province;
+
+    /** 市  city **/
+    private String city;
+
+    /** 区  district **/
+    private String district;
+
+    /** 库存数量  stockNum **/
+    @TableField(value = "stocknum")
+    private BigDecimal stockNum;
+
+    /** 爆竹类数量  firecracker **/
+    private BigDecimal firecracker;
+
+    /** 喷花类数量  spray **/
+    private BigDecimal spray;
+
+    /** 旋转类数量  rotation **/
+    private BigDecimal rotation;
+
+    /** 吐珠类数量  bead **/
+    private BigDecimal bead;
+
+    /** 玩具类数量  toy **/
+    private BigDecimal toy;
+
+    /** 组合烟花类数量  combined **/
+    private BigDecimal combined;
+
+    /** 更新人  updatedby **/
+    private String updatedby;
+
+    /** 更新时间  updateat **/
+    private Date updateat;
+
+    /** 标记  flag **/
+    private Byte flag;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   企业ID  owner   **/
+    public Long getOwner() {
+        return owner;
+    }
+
+    /**   企业ID  owner   **/
+    public void setOwner(Long owner) {
+        this.owner = owner;
+    }
+
+    /**   企业名称  enterpriseName   **/
+    public String getEnterpriseName() {
+        return enterpriseName;
+    }
+
+    /**   企业名称  enterpriseName   **/
+    public void setEnterpriseName(String enterpriseName) {
+        this.enterpriseName = enterpriseName == null ? null : enterpriseName.trim();
+    }
+
+    /**   企业编号  enterpriseNumber   **/
+    public String getEnterpriseNumber() {
+        return enterpriseNumber;
+    }
+
+    /**   企业编号  enterpriseNumber   **/
+    public void setEnterpriseNumber(String enterpriseNumber) {
+        this.enterpriseNumber = enterpriseNumber == null ? null : enterpriseNumber.trim();
+    }
+
+    /**   企业类型  safetySuperVision   **/
+    public String getSafetySuperVision() {
+        return safetySuperVision;
+    }
+
+    /**   企业类型  safetySuperVision   **/
+    public void setSafetySuperVision(String safetySuperVision) {
+        this.safetySuperVision = safetySuperVision == null ? null : safetySuperVision.trim();
+    }
+
+    /**   省  province   **/
+    public String getProvince() {
+        return province;
+    }
+
+    /**   省  province   **/
+    public void setProvince(String province) {
+        this.province = province == null ? null : province.trim();
+    }
+
+    /**   市  city   **/
+    public String getCity() {
+        return city;
+    }
+
+    /**   市  city   **/
+    public void setCity(String city) {
+        this.city = city == null ? null : city.trim();
+    }
+
+    /**   区  district   **/
+    public String getDistrict() {
+        return district;
+    }
+
+    /**   区  district   **/
+    public void setDistrict(String district) {
+        this.district = district == null ? null : district.trim();
+    }
+
+    /**   库存数量  stockNum   **/
+    public BigDecimal getStockNum() {
+        return stockNum;
+    }
+
+    /**   库存数量  stockNum   **/
+    public void setStockNum(BigDecimal stockNum) {
+        this.stockNum = stockNum;
+    }
+
+    /**   爆竹类数量  firecracker   **/
+    public BigDecimal getFirecracker() {
+        return firecracker;
+    }
+
+    /**   爆竹类数量  firecracker   **/
+    public void setFirecracker(BigDecimal firecracker) {
+        this.firecracker = firecracker;
+    }
+
+    /**   喷花类数量  spray   **/
+    public BigDecimal getSpray() {
+        return spray;
+    }
+
+    /**   喷花类数量  spray   **/
+    public void setSpray(BigDecimal spray) {
+        this.spray = spray;
+    }
+
+    /**   旋转类数量  rotation   **/
+    public BigDecimal getRotation() {
+        return rotation;
+    }
+
+    /**   旋转类数量  rotation   **/
+    public void setRotation(BigDecimal rotation) {
+        this.rotation = rotation;
+    }
+
+    /**   吐珠类数量  bead   **/
+    public BigDecimal getBead() {
+        return bead;
+    }
+
+    /**   吐珠类数量  bead   **/
+    public void setBead(BigDecimal bead) {
+        this.bead = bead;
+    }
+
+    /**   玩具类数量  toy   **/
+    public BigDecimal getToy() {
+        return toy;
+    }
+
+    /**   玩具类数量  toy   **/
+    public void setToy(BigDecimal toy) {
+        this.toy = toy;
+    }
+
+    /**   组合烟花类数量  combined   **/
+    public BigDecimal getCombined() {
+        return combined;
+    }
+
+    /**   组合烟花类数量  combined   **/
+    public void setCombined(BigDecimal combined) {
+        this.combined = combined;
+    }
+
+    /**   更新人  updatedby   **/
+    public String getUpdatedby() {
+        return updatedby;
+    }
+
+    /**   更新人  updatedby   **/
+    public void setUpdatedby(String updatedby) {
+        this.updatedby = updatedby == null ? null : updatedby.trim();
+    }
+
+    /**   更新时间  updateat   **/
+    public Date getUpdateat() {
+        return updateat;
+    }
+
+    /**   更新时间  updateat   **/
+    public void setUpdateat(Date updateat) {
+        this.updateat = updateat;
+    }
+
+    /**   标记  flag   **/
+    public Byte getFlag() {
+        return flag;
+    }
+
+    /**   标记  flag   **/
+    public void setFlag(Byte flag) {
+        this.flag = flag;
+    }
+
+    public StaticStock() {
+    }
+
+    public StaticStock(Long owner, String enterpriseName, String enterpriseNumber, String safetySuperVision, String province, String city, String district, BigDecimal stockNum, BigDecimal firecracker, BigDecimal spray, BigDecimal rotation, BigDecimal bead, BigDecimal toy, BigDecimal combined, String updatedby, Date updateat, Byte flag) {
+        this.owner = owner;
+        this.enterpriseName = enterpriseName;
+        this.enterpriseNumber = enterpriseNumber;
+        this.safetySuperVision = safetySuperVision;
+        this.province = province;
+        this.city = city;
+        this.district = district;
+        this.stockNum = stockNum;
+        this.firecracker = firecracker;
+        this.spray = spray;
+        this.rotation = rotation;
+        this.bead = bead;
+        this.toy = toy;
+        this.combined = combined;
+        this.updatedby = updatedby;
+        this.updateat = updateat;
+        this.flag = flag;
+    }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/StockInfo.java b/src/main/java/com/gk/firework/Domain/StockInfo.java
new file mode 100644
index 0000000..56aff37
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/StockInfo.java
@@ -0,0 +1,238 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.util.Date;
+
+@TableName("stock")
+public class StockInfo implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    public static final String STOCK_SOLD = "已售出";
+    /**   id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** product表id  productid **/
+    private Long productid;
+
+    /** 流向码  directioncode **/
+    private String directioncode;
+
+    /** 流向码箱码  directionboxcode **/
+    private String directionboxcode;
+
+    /** 数量  num **/
+    private Integer num;
+
+    /** 归属公司(销售点,个人)  owner **/
+    private String owner;
+
+    /** 状态  status **/
+    private String status;
+
+    /** 入库日期  indate **/
+    private Date indate;
+
+    /** 出库日期  outdate **/
+    private Date outdate;
+
+    /** 操作人  operator **/
+    private String operator;
+
+    /** 入库方式(1,常规入库;2,快速入库;3,退货入库)  type **/
+    private Byte type;
+
+    /** 备注(保留字段)  remark **/
+    private String remark;
+
+    /** 创建人  createdby **/
+    private String createdby;
+
+    /** 创建时间  createddate **/
+    private Date createddate;
+
+    /** 修改人  modifiedby **/
+    private String modifiedby;
+
+    /** 修改时间  modifieddate **/
+    private Date modifieddate;
+
+    /** 零售入库标记(0:批量入库;1:零售入库)  flag **/
+    private Byte flag;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   product表id  productid   **/
+    public Long getProductid() {
+        return productid;
+    }
+
+    /**   product表id  productid   **/
+    public void setProductid(Long productid) {
+        this.productid = productid;
+    }
+
+    /**   流向码  directioncode   **/
+    public String getDirectioncode() {
+        return directioncode;
+    }
+
+    /**   流向码  directioncode   **/
+    public void setDirectioncode(String directioncode) {
+        this.directioncode = directioncode == null ? null : directioncode.trim();
+    }
+
+    /**   流向码箱码  directionboxcode   **/
+    public String getDirectionboxcode() {
+        return directionboxcode;
+    }
+
+    /**   流向码箱码  directionboxcode   **/
+    public void setDirectionboxcode(String directionboxcode) {
+        this.directionboxcode = directionboxcode == null ? null : directionboxcode.trim();
+    }
+
+    /**   数量  num   **/
+    public Integer getNum() {
+        return num;
+    }
+
+    /**   数量  num   **/
+    public void setNum(Integer num) {
+        this.num = num;
+    }
+
+    /**   归属公司(销售点,个人)  owner   **/
+    public String getOwner() {
+        return owner;
+    }
+
+    /**   归属公司(销售点,个人)  owner   **/
+    public void setOwner(String owner) {
+        this.owner = owner == null ? null : owner.trim();
+    }
+
+    /**   状态  status   **/
+    public String getStatus() {
+        return status;
+    }
+
+    /**   状态  status   **/
+    public void setStatus(String status) {
+        this.status = status == null ? null : status.trim();
+    }
+
+    /**   入库日期  indate   **/
+    public Date getIndate() {
+        return indate;
+    }
+
+    /**   入库日期  indate   **/
+    public void setIndate(Date indate) {
+        this.indate = indate;
+    }
+
+    /**   出库日期  outdate   **/
+    public Date getOutdate() {
+        return outdate;
+    }
+
+    /**   出库日期  outdate   **/
+    public void setOutdate(Date outdate) {
+        this.outdate = outdate;
+    }
+
+    /**   操作人  operator   **/
+    public String getOperator() {
+        return operator;
+    }
+
+    /**   操作人  operator   **/
+    public void setOperator(String operator) {
+        this.operator = operator == null ? null : operator.trim();
+    }
+
+    /**   入库方式(1,常规入库;2,快速入库;3,退货入库)  type   **/
+    public Byte getType() {
+        return type;
+    }
+
+    /**   入库方式(1,常规入库;2,快速入库;3,退货入库)  type   **/
+    public void setType(Byte type) {
+        this.type = type;
+    }
+
+    /**   备注(保留字段)  remark   **/
+    public String getRemark() {
+        return remark;
+    }
+
+    /**   备注(保留字段)  remark   **/
+    public void setRemark(String remark) {
+        this.remark = remark == null ? null : remark.trim();
+    }
+
+    /**   创建人  createdby   **/
+    public String getCreatedby() {
+        return createdby;
+    }
+
+    /**   创建人  createdby   **/
+    public void setCreatedby(String createdby) {
+        this.createdby = createdby == null ? null : createdby.trim();
+    }
+
+    /**   创建时间  createddate   **/
+    public Date getCreateddate() {
+        return createddate;
+    }
+
+    /**   创建时间  createddate   **/
+    public void setCreateddate(Date createddate) {
+        this.createddate = createddate;
+    }
+
+    /**   修改人  modifiedby   **/
+    public String getModifiedby() {
+        return modifiedby;
+    }
+
+    /**   修改人  modifiedby   **/
+    public void setModifiedby(String modifiedby) {
+        this.modifiedby = modifiedby == null ? null : modifiedby.trim();
+    }
+
+    /**   修改时间  modifieddate   **/
+    public Date getModifieddate() {
+        return modifieddate;
+    }
+
+    /**   修改时间  modifieddate   **/
+    public void setModifieddate(Date modifieddate) {
+        this.modifieddate = modifieddate;
+    }
+
+    /**   零售入库标记(0:批量入库;1:零售入库)  flag   **/
+    public Byte getFlag() {
+        return flag;
+    }
+
+    /**   零售入库标记(0:批量入库;1:零售入库)  flag   **/
+    public void setFlag(Byte flag) {
+        this.flag = flag;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/TransportCarrier.java b/src/main/java/com/gk/firework/Domain/TransportCarrier.java
new file mode 100644
index 0000000..79fa703
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/TransportCarrier.java
@@ -0,0 +1,197 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.util.Date;
+
+@TableName("transportcarrier")
+public class TransportCarrier implements Serializable {
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id  id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 单位名称  companyname **/
+    private String companyname;
+
+    /** 危险货物道路运输资质证号  number **/
+    private String number;
+
+    /** 地址  address **/
+    private String address;
+
+    /** 负责人姓名  name **/
+    private String name;
+
+    /** 联系电话  phone **/
+    private String phone;
+
+    /** 有效时间  validtime **/
+    private Date validtime;
+
+    /** 创建人id  createby **/
+    private Long createby;
+
+    /** 创建人姓名  createbyname **/
+    private String createbyname;
+
+    /** 更新人id  updateby **/
+    private Long updateby;
+
+    /** 更新人姓名  updatebyname **/
+    private String updatebyname;
+
+    /** 更新时间  updatetime **/
+    private Date updatetime;
+
+    /** 创建时间  createtimte **/
+    private Date createtime;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   单位名称  companyname   **/
+    public String getCompanyname() {
+        return companyname;
+    }
+
+    /**   单位名称  companyname   **/
+    public void setCompanyname(String companyname) {
+        this.companyname = companyname == null ? null : companyname.trim();
+    }
+
+    /**   危险货物道路运输资质证号  number   **/
+    public String getNumber() {
+        return number;
+    }
+
+    /**   危险货物道路运输资质证号  number   **/
+    public void setNumber(String number) {
+        this.number = number == null ? null : number.trim();
+    }
+
+    /**   地址  address   **/
+    public String getAddress() {
+        return address;
+    }
+
+    /**   地址  address   **/
+    public void setAddress(String address) {
+        this.address = address == null ? null : address.trim();
+    }
+
+    /**   负责人姓名  name   **/
+    public String getName() {
+        return name;
+    }
+
+    /**   负责人姓名  name   **/
+    public void setName(String name) {
+        this.name = name == null ? null : name.trim();
+    }
+
+    /**   联系电话  phone   **/
+    public String getPhone() {
+        return phone;
+    }
+
+    /**   联系电话  phone   **/
+    public void setPhone(String phone) {
+        this.phone = phone == null ? null : phone.trim();
+    }
+
+    /**   有效时间  validtime   **/
+    public Date getValidtime() {
+        return validtime;
+    }
+
+    /**   有效时间  validtime   **/
+    public void setValidtime(Date validtime) {
+        this.validtime = validtime;
+    }
+
+    /**   创建人id  createby   **/
+    public Long getCreateby() {
+        return createby;
+    }
+
+    /**   创建人id  createby   **/
+    public void setCreateby(Long createby) {
+        this.createby = createby;
+    }
+
+    /**   创建人姓名  createbyname   **/
+    public String getCreatebyname() {
+        return createbyname;
+    }
+
+    /**   创建人姓名  createbyname   **/
+    public void setCreatebyname(String createbyname) {
+        this.createbyname = createbyname == null ? null : createbyname.trim();
+    }
+
+    /**   更新人id  updateby   **/
+    public Long getUpdateby() {
+        return updateby;
+    }
+
+    /**   更新人id  updateby   **/
+    public void setUpdateby(Long updateby) {
+        this.updateby = updateby;
+    }
+
+    /**   更新人姓名  updatebyname   **/
+    public String getUpdatebyname() {
+        return updatebyname;
+    }
+
+    /**   更新人姓名  updatebyname   **/
+    public void setUpdatebyname(String updatebyname) {
+        this.updatebyname = updatebyname == null ? null : updatebyname.trim();
+    }
+
+    /**   更新时间  updatetime   **/
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    /**   更新时间  updatetime   **/
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/TransportCert.java b/src/main/java/com/gk/firework/Domain/TransportCert.java
new file mode 100644
index 0000000..9ea9442
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/TransportCert.java
@@ -0,0 +1,301 @@
+package com.gk.firework.Domain;
+
+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 com.fasterxml.jackson.annotation.JsonFormat;
+import com.gk.firework.Domain.Enum.CertificateStatus;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+
+@TableName("transportcert")
+public class TransportCert implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /**   id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 运输证单号  code **/
+    private String code;
+
+    /** 企业单位编号  enterprisenumber **/
+    private String enterprisenumber;
+
+    /** 状态  status **/
+    private CertificateStatus status;
+
+    /** 审批时间  processtime **/
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
+    private Date processtime;
+
+    /** 审批人  processperson **/
+    private String processperson;
+
+    /** 运输车辆牌号  carnumber **/
+    private String carnumber;
+
+    /** 收货人:单位名称  receivercompanyname **/
+    private String receivercompanyname;
+
+    /** 收货人:地址  receiveraddress **/
+    private String receiveraddress;
+
+    /** 收货人:负责人姓名  receiverprincipalname **/
+    private String receiverprincipalname;
+
+    /** 收货人:负责人电话  receiverprincipalphone **/
+    private String receiverprincipalphone;
+
+    /** 电子合同 逗号分割  contractcode **/
+    private String contractcode;
+
+    /** 创建时间  createtime **/
+    private Date createtime;
+
+    /** 创建人id  createby **/
+    private Long createby;
+
+    /** 创建人name  createbyname **/
+    private String createbyname;
+
+    /** 更新时间  updatetime **/
+    private Date updatetime;
+
+    /** 更新人id  updateby **/
+    private Long updateby;
+
+    /** 更信人name  updatebyname **/
+    private String updatebyname;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    //驾驶人|押运人
+    @TableField(exist = false)
+    private List<TransportCertificatePerson> transportPerson;
+
+    //产品信息
+    @TableField(exist = false)
+    private List<TransportCertProduct> transportProduct;
+
+    //文件信息
+    @TableField(exist = false)
+    private List<TransportCertFile> transportFile;
+
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   运输证单号  code   **/
+    public String getCode() {
+        return code;
+    }
+
+    /**   运输证单号  code   **/
+    public void setCode(String code) {
+        this.code = code == null ? null : code.trim();
+    }
+
+    /**   企业单位编号  enterprisenumber   **/
+    public String getEnterprisenumber() {
+        return enterprisenumber;
+    }
+
+    /**   企业单位编号  enterprisenumber   **/
+    public void setEnterprisenumber(String enterprisenumber) {
+        this.enterprisenumber = enterprisenumber == null ? null : enterprisenumber.trim();
+    }
+
+    public CertificateStatus getStatus() {
+        return status;
+    }
+
+    public void setStatus(CertificateStatus status) {
+        this.status = status;
+    }
+
+    /**   审批时间  processtime   **/
+    public Date getprocesstime() {
+        return processtime;
+    }
+
+    /**   审批时间  processtime   **/
+    public void setprocesstime(Date processtime) {
+        this.processtime = processtime;
+    }
+
+    /**   审批人  processperson   **/
+    public String getProcessperson() {
+        return processperson;
+    }
+
+    /**   审批人  processperson   **/
+    public void setProcessperson(String processperson) {
+        this.processperson = processperson == null ? null : processperson.trim();
+    }
+
+    /**   运输车辆牌号  carnumber   **/
+    public String getCarnumber() {
+        return carnumber;
+    }
+
+    /**   运输车辆牌号  carnumber   **/
+    public void setCarnumber(String carnumber) {
+        this.carnumber = carnumber == null ? null : carnumber.trim();
+    }
+
+    /**   收货人:单位名称  receivercompanyname   **/
+    public String getReceivercompanyname() {
+        return receivercompanyname;
+    }
+
+    /**   收货人:单位名称  receivercompanyname   **/
+    public void setReceivercompanyname(String receivercompanyname) {
+        this.receivercompanyname = receivercompanyname == null ? null : receivercompanyname.trim();
+    }
+
+    /**   收货人:地址  receiveraddress   **/
+    public String getReceiveraddress() {
+        return receiveraddress;
+    }
+
+    /**   收货人:地址  receiveraddress   **/
+    public void setReceiveraddress(String receiveraddress) {
+        this.receiveraddress = receiveraddress == null ? null : receiveraddress.trim();
+    }
+
+    /**   收货人:负责人姓名  receiverprincipalname   **/
+    public String getReceiverprincipalname() {
+        return receiverprincipalname;
+    }
+
+    /**   收货人:负责人姓名  receiverprincipalname   **/
+    public void setReceiverprincipalname(String receiverprincipalname) {
+        this.receiverprincipalname = receiverprincipalname == null ? null : receiverprincipalname.trim();
+    }
+
+    /**   收货人:负责人电话  receiverprincipalphone   **/
+    public String getReceiverprincipalphone() {
+        return receiverprincipalphone;
+    }
+
+    /**   收货人:负责人电话  receiverprincipalphone   **/
+    public void setReceiverprincipalphone(String receiverprincipalphone) {
+        this.receiverprincipalphone = receiverprincipalphone == null ? null : receiverprincipalphone.trim();
+    }
+
+    /**   电子合同 逗号分割  contractcode   **/
+    public String getContractcode() {
+        return contractcode;
+    }
+
+    /**   电子合同 逗号分割  contractcode   **/
+    public void setContractcode(String contractcode) {
+        this.contractcode = contractcode == null ? null : contractcode.trim();
+    }
+
+    /**   创建时间  createtime   **/
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    /**   创建时间  createtime   **/
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    /**   创建人id  createby   **/
+    public Long getCreateby() {
+        return createby;
+    }
+
+    /**   创建人id  createby   **/
+    public void setCreateby(Long createby) {
+        this.createby = createby;
+    }
+
+    /**   创建人name  createbyname   **/
+    public String getCreatebyname() {
+        return createbyname;
+    }
+
+    /**   创建人name  createbyname   **/
+    public void setCreatebyname(String createbyname) {
+        this.createbyname = createbyname == null ? null : createbyname.trim();
+    }
+
+    /**   更新时间  updatetime   **/
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    /**   更新时间  updatetime   **/
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    /**   更新人id  updateby   **/
+    public Long getUpdateby() {
+        return updateby;
+    }
+
+    /**   更新人id  updateby   **/
+    public void setUpdateby(Long updateby) {
+        this.updateby = updateby;
+    }
+
+    /**   更信人name  updatebyname   **/
+    public String getUpdatebyname() {
+        return updatebyname;
+    }
+
+    /**   更信人name  updatebyname   **/
+    public void setUpdatebyname(String updatebyname) {
+        this.updatebyname = updatebyname == null ? null : updatebyname.trim();
+    }
+
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    public List<TransportCertificatePerson> getTransportPerson() {
+        return transportPerson;
+    }
+
+    public void setTransportPerson(List<TransportCertificatePerson> transportPerson) {
+        this.transportPerson = transportPerson;
+    }
+
+    public List<TransportCertProduct> getTransportProduct() {
+        return transportProduct;
+    }
+
+    public void setTransportProduct(List<TransportCertProduct> transportProduct) {
+        this.transportProduct = transportProduct;
+    }
+
+    public List<TransportCertFile> getTransportFile() {
+        return transportFile;
+    }
+
+    public void setTransportFile(List<TransportCertFile> transportFile) {
+        this.transportFile = transportFile;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/TransportCertFile.java b/src/main/java/com/gk/firework/Domain/TransportCertFile.java
new file mode 100644
index 0000000..2c410b4
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/TransportCertFile.java
@@ -0,0 +1,94 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+
+@TableName("transportcertfile")
+public class TransportCertFile implements Serializable {
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id  id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 运输证code  certificatecode **/
+    private String certificatecode;
+
+    /** 地址  url **/
+    private String url;
+
+    /** 文件后缀  type **/
+    private String type;
+
+    /** 文件名  filename **/
+    private String filename;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   运输证code  certificatecode   **/
+    public String getCertificatecode() {
+        return certificatecode;
+    }
+
+    /**   运输证code  certificatecode   **/
+    public void setCertificatecode(String certificatecode) {
+        this.certificatecode = certificatecode == null ? null : certificatecode.trim();
+    }
+
+    /**   地址  url   **/
+    public String getUrl() {
+        return url;
+    }
+
+    /**   地址  url   **/
+    public void setUrl(String url) {
+        this.url = url == null ? null : url.trim();
+    }
+
+    /**   文件后缀  type   **/
+    public String getType() {
+        return type;
+    }
+
+    /**   文件后缀  type   **/
+    public void setType(String type) {
+        this.type = type == null ? null : type.trim();
+    }
+
+    /**   文件名  filename   **/
+    public String getFilename() {
+        return filename;
+    }
+
+    /**   文件名  filename   **/
+    public void setFilename(String filename) {
+        this.filename = filename == null ? null : filename.trim();
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/TransportCertProduct.java b/src/main/java/com/gk/firework/Domain/TransportCertProduct.java
new file mode 100644
index 0000000..77fb4be
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/TransportCertProduct.java
@@ -0,0 +1,158 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+
+@TableName("transportcertproduct")
+public class TransportCertProduct implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id  id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 运输证code  certificatecode **/
+    private String certificatecode;
+
+    /** 产品code  productcode **/
+    private String productcode;
+
+    /** 产品规格(数量)  productnum **/
+    private Integer productnum;
+
+    /** 类别  type **/
+    private String type;
+
+    /** 名称  name **/
+    private String name;
+
+    /** 级别  level **/
+    private String level;
+
+    /** 包装方式  packing **/
+    private String packing;
+
+    /** 规格  specification **/
+    private String specification;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /** 每件产品发出箱数  num **/
+    private Integer num;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   运输证code  certificatecode   **/
+    public String getCertificatecode() {
+        return certificatecode;
+    }
+
+    /**   运输证code  certificatecode   **/
+    public void setCertificatecode(String certificatecode) {
+        this.certificatecode = certificatecode == null ? null : certificatecode.trim();
+    }
+
+    /**   产品code  productcode   **/
+    public String getProductcode() {
+        return productcode;
+    }
+
+    /**   产品code  productcode   **/
+    public void setProductcode(String productcode) {
+        this.productcode = productcode == null ? null : productcode.trim();
+    }
+
+    /**   产品规格(数量)  productnum   **/
+    public Integer getProductnum() {
+        return productnum;
+    }
+
+    /**   产品规格(数量)  productnum   **/
+    public void setProductnum(Integer productnum) {
+        this.productnum = productnum;
+    }
+
+    /**   类别  type   **/
+    public String getType() {
+        return type;
+    }
+
+    /**   类别  type   **/
+    public void setType(String type) {
+        this.type = type == null ? null : type.trim();
+    }
+
+    /**   名称  name   **/
+    public String getName() {
+        return name;
+    }
+
+    /**   名称  name   **/
+    public void setName(String name) {
+        this.name = name == null ? null : name.trim();
+    }
+
+    /**   级别  level   **/
+    public String getLevel() {
+        return level;
+    }
+
+    /**   级别  level   **/
+    public void setLevel(String level) {
+        this.level = level == null ? null : level.trim();
+    }
+
+    /**   包装方式  packing   **/
+    public String getPacking() {
+        return packing;
+    }
+
+    /**   包装方式  packing   **/
+    public void setPacking(String packing) {
+        this.packing = packing == null ? null : packing.trim();
+    }
+
+    /**   规格  specification   **/
+    public String getSpecification() {
+        return specification;
+    }
+
+    /**   规格  specification   **/
+    public void setSpecification(String specification) {
+        this.specification = specification == null ? null : specification.trim();
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    /**   每件产品发出箱数  num   **/
+    public Integer getNum() {
+        return num;
+    }
+
+    /**   每件产品发出箱数  num   **/
+    public void setNum(Integer num) {
+        this.num = num;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/TransportCertificate.java b/src/main/java/com/gk/firework/Domain/TransportCertificate.java
new file mode 100644
index 0000000..f87dde3
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/TransportCertificate.java
@@ -0,0 +1,631 @@
+package com.gk.firework.Domain;
+
+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 com.fasterxml.jackson.annotation.JsonFormat;
+import com.gk.firework.Domain.Enum.CertificateStatus;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+@TableName("transportcertificate")
+public class TransportCertificate implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /**   id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    /**
+     * 运输编号
+     **/
+    private String code;
+    //电子合同 逗号分割
+    private String contractcode;
+    //签发人
+    private String signperson ;
+    //填发人
+    private String issueperson ;
+    //填发人联系电话
+    private String issuepersonphone;
+
+    private CertificateStatus status;
+
+    private String certstatus;
+
+    /** 企业单位编号  enterprisenumber **/
+    private String enterprisenumber;
+
+    /** 运输证类型  type **/
+    private String type;
+
+    /** 销售单位id  salecompanyid **/
+    private Long salecompanyid;
+
+    /** 销售单位name  salecompanyname **/
+    private String salecompanyname;
+
+    /** 生产经营许可证  productionlicense **/
+    private String productionlicense;
+
+    /** 安全买卖合同编号  contractnumber **/
+    private String contractnumber;
+
+    /** 托运人:单位名称  shippercompanyname **/
+    private String shippercompanyname;
+
+    /** 托运人:地址  shipperaddress **/
+    private String shipperaddress;
+
+    /** 托运人:负责人电话  shipperprincipalphone **/
+    private String shipperprincipalphone;
+
+    /** 托运人:负责人姓名  shipperprincipalname **/
+    private String shipperprincipalname;
+
+    /** 托运人:经办人姓名  shippermanagername **/
+    private String shippermanagername;
+
+    /** 托运人:经办人身份证号  shippermanageridentify **/
+    private String shippermanageridentify;
+
+    /** 托运人:经办人电话  shippermanagerphone **/
+    private String shippermanagerphone;
+
+    /** 收货人:单位名称  receivercompanyname **/
+    private String receivercompanyname;
+
+    /** 收货人:地址  receiveraddress **/
+    private String receiveraddress;
+
+    /** 收货人:负责人姓名  receiverprincipalname **/
+    private String receiverprincipalname;
+
+    /** 收货人:负责人电话  receiverprincipalphone **/
+    private String receiverprincipalphone;
+
+    /** 承运人id  carrierid **/
+    private Long carrierid;
+
+    /** 承运人单位名称  carriercompanyname **/
+    private String carriercompanyname;
+
+    /** 承运人:地址  carrieraddress **/
+    private String carrieraddress;
+
+    /** 承运人:负责人姓名  carrierprincipalname **/
+    private String carrierprincipalname;
+
+    /** 承运人:负责人电话  carrierprincipalphone **/
+    private String carrierprincipalphone;
+
+    /** 承运人:资格证号 carriernumber **/
+    private String carriernumber;
+
+    /** 承运人:运输车辆牌号 carriercarnumber **/
+    private String carriercarnumber;
+
+    /** 承运人:道路运输证号 carriercarnumber **/
+    private String carrierroadnumber;
+
+    /** 承运人:证件有效期 carriervalidtime **/
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
+    private Date carriervalidtime;
+
+    /** 其他:起始地  otherdeparture **/
+    private String otherdeparture;
+
+    /** 其他:到达地  otherdestination **/
+    private String otherdestination;
+
+    /** 其他:运输起始时间  othershipstarttime **/
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
+    private Date othershipstarttime;
+
+    /** 其他:运输截止时间  othershipendtime **/
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
+    private Date othershipendtime;
+
+    /** 其他:备注  othermemo **/
+    private String othermemo;
+
+    /** 创建时间  createtime **/
+    private Date createtime;
+
+    /** 创建人id  createby **/
+    private Long createby;
+
+    /** 创建人name  createbyname **/
+    private String createbyname;
+
+    /** 更新时间  updatetime **/
+    private Date updatetime;
+
+    /** 更新人id  updateby **/
+    private Long updateby;
+
+    /** 更信人name  updatebyname **/
+    private String updatebyname;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /** 截止日期  validflag **/
+    private Date deadline;
+
+    //驾驶人|押运人
+    @TableField(exist = false)
+    private List<TransportCertificatePerson> transportPerson;
+
+    //产品信息
+    @TableField(exist = false)
+    private List<TransportCertificateProduct> transportProduct;
+
+    //途径地
+    @TableField(exist = false)
+    private List<TransportCertificateApproach> transportApproach;
+
+    @TableField(exist = false)
+    private TransportCertificateFile transportFile;
+
+
+
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   运输证类型  type   **/
+    public String getType() {
+        return type;
+    }
+
+    /**   运输证类型  type   **/
+    public void setType(String type) {
+        this.type = type == null ? null : type.trim();
+    }
+
+    /**   销售单位id  salecompanyid   **/
+    public Long getSalecompanyid() {
+        return salecompanyid;
+    }
+
+    /**   销售单位id  salecompanyid   **/
+    public void setSalecompanyid(Long salecompanyid) {
+        this.salecompanyid = salecompanyid;
+    }
+
+    /**   销售单位name  salecompanyname   **/
+    public String getSalecompanyname() {
+        return salecompanyname;
+    }
+
+    /**   销售单位name  salecompanyname   **/
+    public void setSalecompanyname(String salecompanyname) {
+        this.salecompanyname = salecompanyname == null ? null : salecompanyname.trim();
+    }
+
+    /**   生产经营许可证  productionlicense   **/
+    public String getProductionlicense() {
+        return productionlicense;
+    }
+
+    /**   生产经营许可证  productionlicense   **/
+    public void setProductionlicense(String productionlicense) {
+        this.productionlicense = productionlicense == null ? null : productionlicense.trim();
+    }
+
+    /**   安全买卖合同编号  contractnumber   **/
+    public String getContractnumber() {
+        return contractnumber;
+    }
+
+    /**   安全买卖合同编号  contractnumber   **/
+    public void setContractnumber(String contractnumber) {
+        this.contractnumber = contractnumber == null ? null : contractnumber.trim();
+    }
+
+    /**   托运人:单位名称  shippercompanyname   **/
+    public String getShippercompanyname() {
+        return shippercompanyname;
+    }
+
+    /**   托运人:单位名称  shippercompanyname   **/
+    public void setShippercompanyname(String shippercompanyname) {
+        this.shippercompanyname = shippercompanyname == null ? null : shippercompanyname.trim();
+    }
+
+    /**   托运人:负责人姓名  shipperaddress   **/
+    public String getShipperaddress() {
+        return shipperaddress;
+    }
+
+    /**   托运人:负责人姓名  shipperaddress   **/
+    public void setShipperaddress(String shipperaddress) {
+        this.shipperaddress = shipperaddress == null ? null : shipperaddress.trim();
+    }
+
+    /**   托运人:负责人电话  shipperprincipalname   **/
+    public String getShipperprincipalname() {
+        return shipperprincipalname;
+    }
+
+    /**   托运人:负责人电话  shipperprincipalname   **/
+    public void setShipperprincipalname(String shipperprincipalname) {
+        this.shipperprincipalname = shipperprincipalname == null ? null : shipperprincipalname.trim();
+    }
+
+    /**   托运人:经办人姓名  shippermanagername   **/
+    public String getShippermanagername() {
+        return shippermanagername;
+    }
+
+    /**   托运人:经办人姓名  shippermanagername   **/
+    public void setShippermanagername(String shippermanagername) {
+        this.shippermanagername = shippermanagername == null ? null : shippermanagername.trim();
+    }
+
+    /**   托运人:经办人身份证号  shippermanageridentify   **/
+    public String getShippermanageridentify() {
+        return shippermanageridentify;
+    }
+
+    /**   托运人:经办人身份证号  shippermanageridentify   **/
+    public void setShippermanageridentify(String shippermanageridentify) {
+        this.shippermanageridentify = shippermanageridentify == null ? null : shippermanageridentify.trim();
+    }
+
+    /**   托运人:经办人电话  shippermanagerphone   **/
+    public String getShippermanagerphone() {
+        return shippermanagerphone;
+    }
+
+    /**   托运人:经办人电话  shippermanagerphone   **/
+    public void setShippermanagerphone(String shippermanagerphone) {
+        this.shippermanagerphone = shippermanagerphone == null ? null : shippermanagerphone.trim();
+    }
+
+    /**   收货人:单位名称  receivercompanyname   **/
+    public String getReceivercompanyname() {
+        return receivercompanyname;
+    }
+
+    /**   收货人:单位名称  receivercompanyname   **/
+    public void setReceivercompanyname(String receivercompanyname) {
+        this.receivercompanyname = receivercompanyname == null ? null : receivercompanyname.trim();
+    }
+
+    /**   收货人:地址  receiveraddress   **/
+    public String getReceiveraddress() {
+        return receiveraddress;
+    }
+
+    /**   收货人:地址  receiveraddress   **/
+    public void setReceiveraddress(String receiveraddress) {
+        this.receiveraddress = receiveraddress == null ? null : receiveraddress.trim();
+    }
+
+    /**   收货人:负责人姓名  receiverprincipalname   **/
+    public String getReceiverprincipalname() {
+        return receiverprincipalname;
+    }
+
+    /**   收货人:负责人姓名  receiverprincipalname   **/
+    public void setReceiverprincipalname(String receiverprincipalname) {
+        this.receiverprincipalname = receiverprincipalname == null ? null : receiverprincipalname.trim();
+    }
+
+    /**   收货人:负责人电话  receiverprincipalphone   **/
+    public String getReceiverprincipalphone() {
+        return receiverprincipalphone;
+    }
+
+    /**   收货人:负责人电话  receiverprincipalphone   **/
+    public void setReceiverprincipalphone(String receiverprincipalphone) {
+        this.receiverprincipalphone = receiverprincipalphone == null ? null : receiverprincipalphone.trim();
+    }
+
+    /**   承运人id  carrierid   **/
+    public Long getCarrierid() {
+        return carrierid;
+    }
+
+    /**   承运人id  carrierid   **/
+    public void setCarrierid(Long carrierid) {
+        this.carrierid = carrierid;
+    }
+
+    /**   承运人单位名称  carriercompanyname   **/
+    public String getCarriercompanyname() {
+        return carriercompanyname;
+    }
+
+    /**   承运人单位名称  carriercompanyname   **/
+    public void setCarriercompanyname(String carriercompanyname) {
+        this.carriercompanyname = carriercompanyname == null ? null : carriercompanyname.trim();
+    }
+
+    /**   其他:成员人  otherdeparture   **/
+    public String getOtherdeparture() {
+        return otherdeparture;
+    }
+
+    /**   其他:成员人  otherdeparture   **/
+    public void setOtherdeparture(String otherdeparture) {
+        this.otherdeparture = otherdeparture == null ? null : otherdeparture.trim();
+    }
+
+    /**   其他:到达地  otherdestination   **/
+    public String getOtherdestination() {
+        return otherdestination;
+    }
+
+    /**   其他:到达地  otherdestination   **/
+    public void setOtherdestination(String otherdestination) {
+        this.otherdestination = otherdestination == null ? null : otherdestination.trim();
+    }
+
+    /**   其他:运输起始时间  othershipstarttime   **/
+    public Date getOthershipstarttime() {
+        return othershipstarttime;
+    }
+
+    /**   其他:运输起始时间  othershipstarttime   **/
+    public void setOthershipstarttime(Date othershipstarttime) {
+        this.othershipstarttime = othershipstarttime;
+    }
+
+    /**   其他:运输截止时间  othershipendtime   **/
+    public Date getOthershipendtime() {
+        return othershipendtime;
+    }
+
+    /**   其他:运输截止时间  othershipendtime   **/
+    public void setOthershipendtime(Date othershipendtime) {
+        this.othershipendtime = othershipendtime;
+    }
+
+    /**   其他:备注  othermemo   **/
+    public String getOthermemo() {
+        return othermemo;
+    }
+
+    /**   其他:备注  othermemo   **/
+    public void setOthermemo(String othermemo) {
+        this.othermemo = othermemo == null ? null : othermemo.trim();
+    }
+
+
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    public Long getCreateby() {
+        return createby;
+    }
+
+    public void setCreateby(Long createby) {
+        this.createby = createby;
+    }
+
+    public String getCreatebyname() {
+        return createbyname;
+    }
+
+    public void setCreatebyname(String createbyname) {
+        this.createbyname = createbyname;
+    }
+
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    public Long getUpdateby() {
+        return updateby;
+    }
+
+    public void setUpdateby(Long updateby) {
+        this.updateby = updateby;
+    }
+
+    public String getUpdatebyname() {
+        return updatebyname;
+    }
+
+    public void setUpdatebyname(String updatebyname) {
+        this.updatebyname = updatebyname;
+    }
+
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    public List<TransportCertificatePerson> getTransportPerson() {
+        return transportPerson;
+    }
+
+    public void setTransportPerson(List<TransportCertificatePerson> transportPerson) {
+        this.transportPerson = transportPerson;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getCarrieraddress() {
+        return carrieraddress;
+    }
+
+    public void setCarrieraddress(String carrieraddress) {
+        this.carrieraddress = carrieraddress;
+    }
+
+    public String getCarrierprincipalname() {
+        return carrierprincipalname;
+    }
+
+    public void setCarrierprincipalname(String carrierprincipalname) {
+        this.carrierprincipalname = carrierprincipalname;
+    }
+
+    public String getCarrierprincipalphone() {
+        return carrierprincipalphone;
+    }
+
+    public void setCarrierprincipalphone(String carrierprincipalphone) {
+        this.carrierprincipalphone = carrierprincipalphone;
+    }
+
+    public String getCarriernumber() {
+        return carriernumber;
+    }
+
+    public void setCarriernumber(String carriernumber) {
+        this.carriernumber = carriernumber;
+    }
+
+    public String getCarriercarnumber() {
+        return carriercarnumber;
+    }
+
+    public void setCarriercarnumber(String carriercarnumber) {
+        this.carriercarnumber = carriercarnumber;
+    }
+
+    public Date getCarriervalidtime() {
+        return carriervalidtime;
+    }
+
+    public void setCarriervalidtime(Date carriervalidtime) {
+        this.carriervalidtime = carriervalidtime;
+    }
+
+    public List<TransportCertificateProduct> getTransportProduct() {
+        return transportProduct;
+    }
+
+    public void setTransportProduct(List<TransportCertificateProduct> transportProduct) {
+        this.transportProduct = transportProduct;
+    }
+
+    public List<TransportCertificateApproach> getTransportApproach() {
+        return transportApproach;
+    }
+
+    public void setTransportApproach(List<TransportCertificateApproach> transportApproach) {
+        this.transportApproach = transportApproach;
+    }
+
+    public String getContractcode() {
+        return contractcode == null ? "":contractcode;
+    }
+
+    public void setContractcode(String contractcode) {
+        this.contractcode = contractcode;
+    }
+
+    public TransportCertificateFile getTransportFile() {
+        return transportFile == null?new TransportCertificateFile():transportFile;
+    }
+
+    public void setTransportFile(TransportCertificateFile transportFile) {
+        this.transportFile = transportFile;
+    }
+
+    public String getShipperprincipalphone() {
+        return shipperprincipalphone;
+    }
+
+    public void setShipperprincipalphone(String shipperprincipalphone) {
+        this.shipperprincipalphone = shipperprincipalphone;
+    }
+
+    public CertificateStatus getStatus() {
+        return status;
+    }
+
+    public void setStatus(CertificateStatus status) {
+        this.status = status;
+    }
+
+    public String getEnterprisenumber() {
+        return enterprisenumber;
+    }
+
+    public void setEnterprisenumber(String enterprisenumber) {
+        this.enterprisenumber = enterprisenumber;
+    }
+
+    public String getSignperson() {
+        return signperson;
+    }
+
+    public void setSignperson(String signperson) {
+        this.signperson = signperson;
+    }
+
+    public String getIssueperson() {
+        return issueperson;
+    }
+
+    public void setIssueperson(String issueperson) {
+        this.issueperson = issueperson;
+    }
+
+    public String getIssuepersonphone() {
+        return issuepersonphone;
+    }
+
+    public void setIssuepersonphone(String issuepersonphone) {
+        this.issuepersonphone = issuepersonphone;
+    }
+
+    public String getCarrierroadnumber() {
+        return carrierroadnumber;
+    }
+
+    public void setCarrierroadnumber(String carrierroadnumber) {
+        this.carrierroadnumber = carrierroadnumber;
+    }
+
+    public Date getDeadline() {
+        return deadline;
+    }
+
+    public void setDeadline(Date deadline) {
+        this.deadline = deadline;
+    }
+
+    public String getCertstatus() {
+        return certstatus;
+    }
+
+    public void setCertstatus(String certstatus) {
+        this.certstatus = certstatus;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/TransportCertificateApproach.java b/src/main/java/com/gk/firework/Domain/TransportCertificateApproach.java
new file mode 100644
index 0000000..d71abde
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/TransportCertificateApproach.java
@@ -0,0 +1,95 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+
+@TableName("transportcertificateapproach")
+public class TransportCertificateApproach implements Serializable {
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /**   id **/
+    @TableId(type = IdType.AUTO)
+    /** 主键id  id **/
+    private Long id;
+
+    /** 运输证编码  certificatecode **/
+    private String certificatecode;
+
+    /** 省  province **/
+    private String province;
+
+    /** 市  city **/
+    private String city;
+
+    /** 区  district **/
+    private String district;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   运输证编码  certificatecode   **/
+    public String getCertificatecode() {
+        return certificatecode;
+    }
+
+    /**   运输证编码  certificatecode   **/
+    public void setCertificatecode(String certificatecode) {
+        this.certificatecode = certificatecode == null ? null : certificatecode.trim();
+    }
+
+    /**   省  province   **/
+    public String getProvince() {
+        return province;
+    }
+
+    /**   省  province   **/
+    public void setProvince(String province) {
+        this.province = province == null ? null : province.trim();
+    }
+
+    /**   市  city   **/
+    public String getCity() {
+        return city;
+    }
+
+    /**   市  city   **/
+    public void setCity(String city) {
+        this.city = city == null ? null : city.trim();
+    }
+
+    /**   区  district   **/
+    public String getDistrict() {
+        return district;
+    }
+
+    /**   区  district   **/
+    public void setDistrict(String district) {
+        this.district = district == null ? null : district.trim();
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/TransportCertificateArrivalRecord.java b/src/main/java/com/gk/firework/Domain/TransportCertificateArrivalRecord.java
new file mode 100644
index 0000000..eda65c8
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/TransportCertificateArrivalRecord.java
@@ -0,0 +1,133 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.util.Date;
+
+@TableName("transportcertificatearrivalrecord")
+public class TransportCertificateArrivalRecord implements Serializable {
+
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /**   id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 运输证编号  certificatecode **/
+    private String certificatecode;
+
+    /** 产品名称  productname **/
+    private String productname;
+
+    /** 产品码  productcode **/
+    private String productcode;
+
+    /** 创建人(提交人)id  createby **/
+    private Long createby;
+
+    /** 创建人(提交人)姓名  createbyname **/
+    private String createbyname;
+
+    /** 创建时间  createtime **/
+    private Date createtime;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /** 到货数量  **/
+    private Integer arrivalnum;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   运输证编号  certificatecode   **/
+    public String getCertificatecode() {
+        return certificatecode;
+    }
+
+    /**   运输证编号  certificatecode   **/
+    public void setCertificatecode(String certificatecode) {
+        this.certificatecode = certificatecode == null ? null : certificatecode.trim();
+    }
+
+    /**   产品名称  productname   **/
+    public String getProductname() {
+        return productname;
+    }
+
+    /**   产品名称  productname   **/
+    public void setProductname(String productname) {
+        this.productname = productname == null ? null : productname.trim();
+    }
+
+    /**   产品码  productcode   **/
+    public String getProductcode() {
+        return productcode;
+    }
+
+    /**   产品码  productcode   **/
+    public void setProductcode(String productcode) {
+        this.productcode = productcode == null ? null : productcode.trim();
+    }
+
+    /**   创建人(提交人)id  createby   **/
+    public Long getCreateby() {
+        return createby;
+    }
+
+    /**   创建人(提交人)id  createby   **/
+    public void setCreateby(Long createby) {
+        this.createby = createby;
+    }
+
+    /**   创建人(提交人)姓名  createbyname   **/
+    public String getCreatebyname() {
+        return createbyname;
+    }
+
+    /**   创建人(提交人)姓名  createbyname   **/
+    public void setCreatebyname(String createbyname) {
+        this.createbyname = createbyname == null ? null : createbyname.trim();
+    }
+
+    /**   创建时间  createtime   **/
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    /**   创建时间  createtime   **/
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    public Integer getArrivalnum() {
+        return arrivalnum;
+    }
+
+    public void setArrivalnum(Integer arrivalnum) {
+        this.arrivalnum = arrivalnum;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/TransportCertificateFile.java b/src/main/java/com/gk/firework/Domain/TransportCertificateFile.java
new file mode 100644
index 0000000..dd944da
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/TransportCertificateFile.java
@@ -0,0 +1,185 @@
+package com.gk.firework.Domain;
+
+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 org.springframework.beans.factory.annotation.Autowired;
+
+import java.io.Serializable;
+
+@TableName("transportcertificatefile")
+public class TransportCertificateFile implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /**   id **/
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 运输证code  certificatecode **/
+    private String certificatecode;
+
+    /** 承运单位从事危险货物运输资格证明  url1 **/
+    private String url1;
+
+    /** 驾驶员、押运员从事危险运输资格证明  url2 **/
+    private String url2;
+
+    /** 驾驶员、押运员身份证  url3 **/
+    private String url3;
+
+    /** 危险货物运输车辆道路运输证明  url4 **/
+    private String url4;
+
+    /** 托运人烟花爆竹生产经营许可证  url5 **/
+    private String url5;
+
+    /** 销售单位烟花宝珠生产经营许可证  url6 **/
+    private String url6;
+
+    /** 烟花爆竹购销合同  url7 **/
+    private String url7;
+
+    /** 烟花爆竹产品质量检测报告  url8 **/
+    private String url8;
+
+    /** 烟花爆竹产品包装合格证明  url9 **/
+    private String url9;
+
+    /** 公安机关要求提供其他申请资料  url10 **/
+    private String url10;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   运输证code  certificatecode   **/
+    public String getCertificatecode() {
+        return certificatecode;
+    }
+
+    /**   运输证code  certificatecode   **/
+    public void setCertificatecode(String certificatecode) {
+        this.certificatecode = certificatecode == null ? null : certificatecode.trim();
+    }
+
+    /**   承运单位从事危险货物运输资格证明  url1   **/
+    public String getUrl1() {
+        return url1;
+    }
+
+    /**   承运单位从事危险货物运输资格证明  url1   **/
+    public void setUrl1(String url1) {
+        this.url1 = url1 == null ? null : url1.trim();
+    }
+
+    /**   驾驶员、押运员从事危险运输资格证明  url2   **/
+    public String getUrl2() {
+        return url2;
+    }
+
+    /**   驾驶员、押运员从事危险运输资格证明  url2   **/
+    public void setUrl2(String url2) {
+        this.url2 = url2 == null ? null : url2.trim();
+    }
+
+    /**   驾驶员、押运员身份证  url3   **/
+    public String getUrl3() {
+        return url3;
+    }
+
+    /**   驾驶员、押运员身份证  url3   **/
+    public void setUrl3(String url3) {
+        this.url3 = url3 == null ? null : url3.trim();
+    }
+
+    /**   危险货物运输车辆道路运输证明  url4   **/
+    public String getUrl4() {
+        return url4;
+    }
+
+    /**   危险货物运输车辆道路运输证明  url4   **/
+    public void setUrl4(String url4) {
+        this.url4 = url4 == null ? null : url4.trim();
+    }
+
+    /**   托运人烟花爆竹生产经营许可证  url5   **/
+    public String getUrl5() {
+        return url5;
+    }
+
+    /**   托运人烟花爆竹生产经营许可证  url5   **/
+    public void setUrl5(String url5) {
+        this.url5 = url5 == null ? null : url5.trim();
+    }
+
+    /**   销售单位烟花宝珠生产经营许可证  url6   **/
+    public String getUrl6() {
+        return url6;
+    }
+
+    /**   销售单位烟花宝珠生产经营许可证  url6   **/
+    public void setUrl6(String url6) {
+        this.url6 = url6 == null ? null : url6.trim();
+    }
+
+    /**   烟花爆竹购销合同  url7   **/
+    public String getUrl7() {
+        return url7;
+    }
+
+    /**   烟花爆竹购销合同  url7   **/
+    public void setUrl7(String url7) {
+        this.url7 = url7 == null ? null : url7.trim();
+    }
+
+    /**   烟花爆竹产品质量检测报告  url8   **/
+    public String getUrl8() {
+        return url8;
+    }
+
+    /**   烟花爆竹产品质量检测报告  url8   **/
+    public void setUrl8(String url8) {
+        this.url8 = url8 == null ? null : url8.trim();
+    }
+
+    /**   烟花爆竹产品包装合格证明  url9   **/
+    public String getUrl9() {
+        return url9;
+    }
+
+    /**   烟花爆竹产品包装合格证明  url9   **/
+    public void setUrl9(String url9) {
+        this.url9 = url9 == null ? null : url9.trim();
+    }
+
+    /**   公安机关要求提供其他申请资料  url10   **/
+    public String getUrl10() {
+        return url10;
+    }
+
+    /**   公安机关要求提供其他申请资料  url10   **/
+    public void setUrl10(String url10) {
+        this.url10 = url10 == null ? null : url10.trim();
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/TransportCertificatePerson.java b/src/main/java/com/gk/firework/Domain/TransportCertificatePerson.java
new file mode 100644
index 0000000..6b459b8
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/TransportCertificatePerson.java
@@ -0,0 +1,145 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.util.Date;
+@TableName("transportcertificateperson")
+public class TransportCertificatePerson implements Serializable {
+
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /**   id **/
+    @TableId(type = IdType.AUTO)
+    /** 主键id  id **/
+    private Long id;
+
+    /** 运输证编码  certificatecode **/
+    private String certificatecode;
+
+    /** 人员id  personid **/
+    private Long personid;
+
+    /** 人员姓名  personname **/
+    private String personname;
+
+    /** 人员身份证号  personidentify **/
+    private String personidentify;
+
+    /** 资格证有效期  validtime **/
+    private Date validtime;
+
+    /** 资格证  number **/
+    private String number;
+
+    /** 联系电话  phone **/
+    private String phone;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    private String type;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   运输证编码  certificatecode   **/
+    public String getCertificatecode() {
+        return certificatecode;
+    }
+
+    /**   运输证编码  certificatecode   **/
+    public void setCertificatecode(String certificatecode) {
+        this.certificatecode = certificatecode == null ? null : certificatecode.trim();
+    }
+
+    /**   人员id  personid   **/
+    public Long getPersonid() {
+        return personid;
+    }
+
+    /**   人员id  personid   **/
+    public void setPersonid(Long personid) {
+        this.personid = personid;
+    }
+
+    /**   人员姓名  personname   **/
+    public String getPersonname() {
+        return personname;
+    }
+
+    /**   人员姓名  personname   **/
+    public void setPersonname(String personname) {
+        this.personname = personname == null ? null : personname.trim();
+    }
+
+    /**   人员身份证号  personidentify   **/
+    public String getPersonidentify() {
+        return personidentify;
+    }
+
+    /**   人员身份证号  personidentify   **/
+    public void setPersonidentify(String personidentify) {
+        this.personidentify = personidentify == null ? null : personidentify.trim();
+    }
+
+    /**   资格证有效期  validtime   **/
+    public Date getValidtime() {
+        return validtime;
+    }
+
+    /**   资格证有效期  validtime   **/
+    public void setValidtime(Date validtime) {
+        this.validtime = validtime;
+    }
+
+    /**   资格证  number   **/
+    public String getNumber() {
+        return number;
+    }
+
+    /**   资格证  number   **/
+    public void setNumber(String number) {
+        this.number = number == null ? null : number.trim();
+    }
+
+    /**   联系电话  phone   **/
+    public String getPhone() {
+        return phone;
+    }
+
+    /**   联系电话  phone   **/
+    public void setPhone(String phone) {
+        this.phone = phone == null ? null : phone.trim();
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/TransportCertificateProduct.java b/src/main/java/com/gk/firework/Domain/TransportCertificateProduct.java
new file mode 100644
index 0000000..ed55cc4
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/TransportCertificateProduct.java
@@ -0,0 +1,170 @@
+package com.gk.firework.Domain;
+
+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 org.apache.ibatis.type.IntegerTypeHandler;
+
+import java.io.Serializable;
+
+@TableName("transportcertificateproduct")
+public class TransportCertificateProduct implements Serializable {
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /**   id **/
+    @TableId(type = IdType.AUTO)
+    /** 主键id  id **/
+    private Long id;
+
+    /** 运输证code  certificatecode **/
+    private String certificatecode;
+
+    /** 产品code  productcode **/
+    private String productcode;
+
+    /** 产品数量  num **/
+    private Integer num;
+
+    /** 类别  type **/
+    private String type;
+
+    /** 名称  name **/
+    private String name;
+
+    /** 级别  level **/
+    private String level;
+
+    /** 包装方式  packing **/
+    private String packing;
+
+    /** 规格  specification **/
+    private String specification;
+
+    /** 到货数量  arrivalnum **/
+    private Integer arrivalnum;
+
+    private Integer productnum;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   运输证code  certificatecode   **/
+    public String getCertificatecode() {
+        return certificatecode;
+    }
+
+    /**   运输证code  certificatecode   **/
+    public void setCertificatecode(String certificatecode) {
+        this.certificatecode = certificatecode == null ? null : certificatecode.trim();
+    }
+
+    /**   产品code  productcode   **/
+    public String getProductcode() {
+        return productcode;
+    }
+
+    /**   产品code  productcode   **/
+    public void setProductcode(String productcode) {
+        this.productcode = productcode == null ? null : productcode.trim();
+    }
+
+    /**   产品数量  num   **/
+    public Integer getNum() {
+        return num;
+    }
+
+    /**   产品数量  num   **/
+    public void setNum(Integer num) {
+        this.num = num;
+    }
+
+    /**   类别  type   **/
+    public String getType() {
+        return type;
+    }
+
+    /**   类别  type   **/
+    public void setType(String type) {
+        this.type = type == null ? null : type.trim();
+    }
+
+    /**   名称  name   **/
+    public String getName() {
+        return name;
+    }
+
+    /**   名称  name   **/
+    public void setName(String name) {
+        this.name = name == null ? null : name.trim();
+    }
+
+    /**   级别  level   **/
+    public String getLevel() {
+        return level;
+    }
+
+    /**   级别  level   **/
+    public void setLevel(String level) {
+        this.level = level == null ? null : level.trim();
+    }
+
+    /**   包装方式  packing   **/
+    public String getPacking() {
+        return packing;
+    }
+
+    /**   包装方式  packing   **/
+    public void setPacking(String packing) {
+        this.packing = packing == null ? null : packing.trim();
+    }
+
+    /**   规格  specification   **/
+    public String getSpecification() {
+        return specification;
+    }
+
+    /**   规格  specification   **/
+    public void setSpecification(String specification) {
+        this.specification = specification == null ? null : specification.trim();
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+
+    public Integer getArrivalnum() {
+        return arrivalnum;
+    }
+
+    public void setArrivalnum(Integer arrivalnum) {
+        this.arrivalnum = arrivalnum;
+    }
+
+    public Integer getProductnum() {
+        return productnum;
+    }
+
+    public void setProductnum(Integer productnum) {
+        this.productnum = productnum;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/TransportPerson.java b/src/main/java/com/gk/firework/Domain/TransportPerson.java
new file mode 100644
index 0000000..4070674
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/TransportPerson.java
@@ -0,0 +1,222 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.util.Date;
+
+@TableName("transportperson")
+public class TransportPerson implements Serializable {
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id  id **/
+    @TableId(type = IdType.AUTO)
+    /** 主键id  id **/
+    private Long id;
+
+    /** 类别  type **/
+    private String type;
+
+    /** 姓名  name **/
+    private String name;
+
+    /** 身份证号  identify **/
+    private String identify;
+
+    /** 资格证  certificate **/
+    private String certificate;
+
+    /** 有效期  validtime **/
+    private Date validtime;
+
+    /** 创建人id  createby **/
+    private Long createby;
+
+    /** 创建人姓名  createbyname **/
+    private String createbyname;
+
+    /** 更新人id  updateby **/
+    private Long updateby;
+
+    /** 更新人姓名  updatebyname **/
+    private String updatebyname;
+
+    /** 更新时间  updatetime **/
+    private Date updatetime;
+
+    /** 创建时间  createtimte **/
+    private Date createtime;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /** 联系电话  phone **/
+    private String phone;
+
+    /** 隶属承运人id  belongid **/
+    private Long belongid;
+
+    /** 隶属承运人name  belongname **/
+    private String belongname;
+
+    /**   主键id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   主键id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   类别  type   **/
+    public String getType() {
+        return type;
+    }
+
+    /**   类别  type   **/
+    public void setType(String type) {
+        this.type = type == null ? null : type.trim();
+    }
+
+    /**   姓名  name   **/
+    public String getName() {
+        return name;
+    }
+
+    /**   姓名  name   **/
+    public void setName(String name) {
+        this.name = name == null ? null : name.trim();
+    }
+
+    /**   身份证号  identify   **/
+    public String getIdentify() {
+        return identify;
+    }
+
+    /**   身份证号  identify   **/
+    public void setIdentify(String identify) {
+        this.identify = identify == null ? null : identify.trim();
+    }
+
+    /**   资格证  certificate   **/
+    public String getCertificate() {
+        return certificate;
+    }
+
+    /**   资格证  certificate   **/
+    public void setCertificate(String certificate) {
+        this.certificate = certificate == null ? null : certificate.trim();
+    }
+
+    /**   有效期  validtime   **/
+    public Date getValidtime() {
+        return validtime;
+    }
+
+    /**   有效期  validtime   **/
+    public void setValidtime(Date validtime) {
+        this.validtime = validtime;
+    }
+
+    /**   创建人id  createby   **/
+    public Long getCreateby() {
+        return createby;
+    }
+
+    /**   创建人id  createby   **/
+    public void setCreateby(Long createby) {
+        this.createby = createby;
+    }
+
+    /**   创建人姓名  createbyname   **/
+    public String getCreatebyname() {
+        return createbyname;
+    }
+
+    /**   创建人姓名  createbyname   **/
+    public void setCreatebyname(String createbyname) {
+        this.createbyname = createbyname == null ? null : createbyname.trim();
+    }
+
+    /**   更新人id  updateby   **/
+    public Long getUpdateby() {
+        return updateby;
+    }
+
+    /**   更新人id  updateby   **/
+    public void setUpdateby(Long updateby) {
+        this.updateby = updateby;
+    }
+
+    /**   更新人姓名  updatebyname   **/
+    public String getUpdatebyname() {
+        return updatebyname;
+    }
+
+    /**   更新人姓名  updatebyname   **/
+    public void setUpdatebyname(String updatebyname) {
+        this.updatebyname = updatebyname == null ? null : updatebyname.trim();
+    }
+
+    /**   更新时间  updatetime   **/
+    public Date getUpdatetime() {
+        return updatetime;
+    }
+
+    /**   更新时间  updatetime   **/
+    public void setUpdatetime(Date updatetime) {
+        this.updatetime = updatetime;
+    }
+
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+
+    /**   有效标识  validflag   **/
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    /**   有效标识  validflag   **/
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    /**   隶属承运人id  belongid   **/
+    public Long getBelongid() {
+        return belongid;
+    }
+
+    /**   隶属承运人id  belongid   **/
+    public void setBelongid(Long belongid) {
+        this.belongid = belongid;
+    }
+
+    /**   隶属承运人name  belongname   **/
+    public String getBelongname() {
+        return belongname;
+    }
+
+    /**   隶属承运人name  belongname   **/
+    public void setBelongname(String belongname) {
+        this.belongname = belongname == null ? null : belongname.trim();
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Domain/UserDeadlineOperationLog.java b/src/main/java/com/gk/firework/Domain/UserDeadlineOperationLog.java
new file mode 100644
index 0000000..1fc21bd
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/UserDeadlineOperationLog.java
@@ -0,0 +1,85 @@
+package com.gk.firework.Domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+
+
+@TableName("user_deadline_operation_log")
+public class UserDeadlineOperationLog implements Serializable {
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    // 操作人
+    private String operator;
+    // 操作人Uid
+    private Long operatorUid;
+    // 对象名称
+    private String toUname;
+
+    private Long toUid;
+    // 值
+    private String val;
+
+    private Date gmtCreate;
+
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getOperator() {
+        return operator;
+    }
+
+    public void setOperator(String operator) {
+        this.operator = operator;
+    }
+
+    public Long getOperatorUid() {
+        return operatorUid;
+    }
+
+    public void setOperatorUid(Long operatorUid) {
+        this.operatorUid = operatorUid;
+    }
+
+    public String getToUname() {
+        return toUname;
+    }
+
+    public void setToUname(String toUname) {
+        this.toUname = toUname;
+    }
+
+    public Long getToUid() {
+        return toUid;
+    }
+
+    public void setToUid(Long toUid) {
+        this.toUid = toUid;
+    }
+
+    public String getVal() {
+        return val;
+    }
+
+    public void setVal(String val) {
+        this.val = val;
+    }
+
+    public Date getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(Date gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/UserInfo.java b/src/main/java/com/gk/firework/Domain/UserInfo.java
new file mode 100644
index 0000000..8b7e26f
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/UserInfo.java
@@ -0,0 +1,356 @@
+package com.gk.firework.Domain;
+
+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 java.io.Serializable;
+import java.util.Date;
+
+@TableName("user")
+public class UserInfo implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 用户名  username **/
+    private String username;
+
+    /** 密码  password **/
+    private String password;
+
+    /** 邮箱  email **/
+    private String email;
+
+    /** 统一社会信用代码 code **/
+    private String code;
+
+    /** 办公电话  phone **/
+    private String phone;
+
+    /** 手机号  mobile **/
+    private String mobile;
+
+    /** 单位  company **/
+    private String company;
+
+    /** 部门  department **/
+    private String department;
+
+    /** 职务  job **/
+    private String job;
+
+    /** 创建人  createdby **/
+    private String createdby;
+
+    /** 创建时间  createddate **/
+    private Date createddate;
+
+    /** 更新人  lastmodifiedby **/
+    private String lastmodifiedby;
+
+    /** 更新时间  lastmodifieddate **/
+    private Date lastmodifieddate;
+
+    /** 省份  province **/
+    private String province;
+
+    /** 城市  city **/
+    private String city;
+
+    /** 区县  area **/
+    private String area;
+
+    /** 乡镇  town **/
+    private String town;
+
+    /** 社区  community **/
+    private String community;
+
+    /** 所属企业id  companyid **/
+    private Long companyid;
+
+    /** 状态  status **/
+    private Byte status;
+
+    /** 到期时间  expiredate **/
+    private Date expiredate;
+
+    /** 是否删除  isdel **/
+    private Byte isdel;
+
+    /** 是否销售端  issale **/
+    private Byte issale;
+
+    /** # 1超级管理员,2管理员,3普通用户 **/
+    private Integer type;
+    //企业单位编号
+    private String companynumber;
+
+    private Date deadline;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   用户名  username   **/
+    public String getUsername() {
+        return username;
+    }
+
+    /**   用户名  username   **/
+    public void setUsername(String username) {
+        this.username = username == null ? null : username.trim();
+    }
+
+    /**   密码  password   **/
+    public String getPassword() {
+        return password;
+    }
+
+    /**   密码  password   **/
+    public void setPassword(String password) {
+        this.password = password == null ? null : password.trim();
+    }
+
+    /**   邮箱  email   **/
+    public String getEmail() {
+        return email;
+    }
+
+    /**   邮箱  email   **/
+    public void setEmail(String email) {
+        this.email = email == null ? null : email.trim();
+    }
+
+    /**   办公电话  phone   **/
+    public String getPhone() {
+        return phone;
+    }
+
+    /**   办公电话  phone   **/
+    public void setPhone(String phone) {
+        this.phone = phone == null ? null : phone.trim();
+    }
+
+    /**   手机号  mobile   **/
+    public String getMobile() {
+        return mobile;
+    }
+
+    /**   手机号  mobile   **/
+    public void setMobile(String mobile) {
+        this.mobile = mobile;
+    }
+
+    /**   单位  company   **/
+    public String getCompany() {
+        return company;
+    }
+
+    /**   单位  company   **/
+    public void setCompany(String company) {
+        this.company = company == null ? null : company.trim();
+    }
+
+    /**   部门  department   **/
+    public String getDepartment() {
+        return department;
+    }
+
+    /**   部门  department   **/
+    public void setDepartment(String department) {
+        this.department = department == null ? null : department.trim();
+    }
+
+    /**   职务  job   **/
+    public String getJob() {
+        return job;
+    }
+
+    /**   职务  job   **/
+    public void setJob(String job) {
+        this.job = job == null ? null : job.trim();
+    }
+
+    /**   创建人  createdby   **/
+    public String getCreatedby() {
+        return createdby;
+    }
+
+    /**   创建人  createdby   **/
+    public void setCreatedby(String createdby) {
+        this.createdby = createdby == null ? null : createdby.trim();
+    }
+
+    /**   创建时间  createddate   **/
+    public Date getCreateddate() {
+        return createddate;
+    }
+
+    /**   创建时间  createddate   **/
+    public void setCreateddate(Date createddate) {
+        this.createddate = createddate;
+    }
+
+    /**   更新人  lastmodifiedby   **/
+    public String getLastmodifiedby() {
+        return lastmodifiedby;
+    }
+
+    /**   更新人  lastmodifiedby   **/
+    public void setLastmodifiedby(String lastmodifiedby) {
+        this.lastmodifiedby = lastmodifiedby == null ? null : lastmodifiedby.trim();
+    }
+
+    /**   更新时间  lastmodifieddate   **/
+    public Date getLastmodifieddate() {
+        return lastmodifieddate;
+    }
+
+    /**   更新时间  lastmodifieddate   **/
+    public void setLastmodifieddate(Date lastmodifieddate) {
+        this.lastmodifieddate = lastmodifieddate;
+    }
+
+    /**   省份  province   **/
+    public String getProvince() {
+        return province;
+    }
+
+    /**   省份  province   **/
+    public void setProvince(String province) {
+        this.province = province == null ? null : province.trim();
+    }
+
+    /**   城市  city   **/
+    public String getCity() {
+        return city;
+    }
+
+    /**   城市  city   **/
+    public void setCity(String city) {
+        this.city = city == null ? null : city.trim();
+    }
+
+    /**   区县  area   **/
+    public String getArea() {
+        return area;
+    }
+
+    /**   区县  area   **/
+    public void setArea(String area) {
+        this.area = area == null ? null : area.trim();
+    }
+
+    /**   乡镇  town   **/
+    public String getTown() {
+        return town;
+    }
+
+    /**   乡镇  town   **/
+    public void setTown(String town) {
+        this.town = town == null ? null : town.trim();
+    }
+
+    /**   社区  community   **/
+    public String getCommunity() {
+        return community;
+    }
+
+    /**   社区  community   **/
+    public void setCommunity(String community) {
+        this.community = community == null ? null : community.trim();
+    }
+
+    /**   所属企业id  companyid   **/
+    public Long getCompanyid() {
+        return companyid;
+    }
+
+    /**   所属企业id  companyid   **/
+    public void setCompanyid(Long companyid) {
+        this.companyid = companyid;
+    }
+
+    /**   状态  status   **/
+    public Byte getStatus() {
+        return status;
+    }
+
+    /**   状态  status   **/
+    public void setStatus(Byte status) {
+        this.status = status;
+    }
+
+    /**   到期时间  expiredate   **/
+    public Date getExpiredate() {
+        return expiredate;
+    }
+
+    /**   到期时间  expiredate   **/
+    public void setExpiredate(Date expiredate) {
+        this.expiredate = expiredate;
+    }
+
+    /**   是否删除  isdel   **/
+    public Byte getIsdel() {
+        return isdel;
+    }
+
+    /**   是否删除  isdel   **/
+    public void setIsdel(Byte isdel) {
+        this.isdel = isdel;
+    }
+
+    /**   是否销售端  issale   **/
+    public Byte getIssale() {
+        return issale;
+    }
+
+    /**   是否销售端  issale   **/
+    public void setIssale(Byte issale) {
+        this.issale = issale;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public String getCompanynumber() {
+        return companynumber;
+    }
+
+    public void setCompanynumber(String companynumber) {
+        this.companynumber = companynumber;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public Date getDeadline() {
+        return deadline;
+    }
+
+    public void setDeadline(Date deadline) {
+        this.deadline = deadline;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/UserRolesInfo.java b/src/main/java/com/gk/firework/Domain/UserRolesInfo.java
new file mode 100644
index 0000000..4d68d1e
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/UserRolesInfo.java
@@ -0,0 +1,55 @@
+package com.gk.firework.Domain;
+
+
+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 java.io.Serializable;
+
+@TableName("userroles")
+public class UserRolesInfo implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    /** id  id **/
+    private Long id;
+
+    /** 用户id  userid **/
+    private Long userid;
+
+    /** 角色id  roleid **/
+    private Long roleid;
+
+    /**   id  id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**   id  id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   用户id  userid   **/
+    public Long getUserid() {
+        return userid;
+    }
+
+    /**   用户id  userid   **/
+    public void setUserid(Long userid) {
+        this.userid = userid;
+    }
+
+    /**   角色id  roleid   **/
+    public Long getRoleid() {
+        return roleid;
+    }
+
+    /**   角色id  roleid   **/
+    public void setRoleid(Long roleid) {
+        this.roleid = roleid;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/Base64Encrypt.java b/src/main/java/com/gk/firework/Domain/Utils/Base64Encrypt.java
new file mode 100644
index 0000000..519fee7
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/Base64Encrypt.java
@@ -0,0 +1,33 @@
+package com.gk.firework.Domain.Utils;
+
+import java.io.IOException;
+
+public class Base64Encrypt {
+    /**
+     * 编码
+     *
+     * @param bstr
+     * @return String
+     */
+    public static String encode(byte[] bstr) {
+        return new sun.misc.BASE64Encoder().encode(bstr);
+    }
+
+    /**
+     * 解码
+     *
+     * @param str
+     * @return string
+     */
+    public static byte[] decode(String str) {
+        byte[] bt = null;
+        try {
+            sun.misc.BASE64Decoder decoder = new sun.misc.BASE64Decoder();
+            bt = decoder.decodeBuffer(str);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+        return bt;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/BeanProperty.java b/src/main/java/com/gk/firework/Domain/Utils/BeanProperty.java
new file mode 100644
index 0000000..41fbc24
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/BeanProperty.java
@@ -0,0 +1,22 @@
+package com.gk.firework.Domain.Utils;
+
+/**
+ * Bean属性
+ * @author L.cm
+ */
+public class BeanProperty {
+	private final String name;
+	private final Class<?> type;
+
+	public BeanProperty(String name, Class<?> type) {
+		this.name = name;
+		this.type = type;
+	}
+
+	public String getName() {
+		return name;
+	}
+	public Class<?> getType() {
+		return type;
+	}
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/BeanUtils.java b/src/main/java/com/gk/firework/Domain/Utils/BeanUtils.java
new file mode 100644
index 0000000..d5e24d5
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/BeanUtils.java
@@ -0,0 +1,223 @@
+package com.gk.firework.Domain.Utils;
+
+
+import org.springframework.cglib.beans.BeanCopier;
+import org.springframework.cglib.beans.BeanGenerator;
+import org.springframework.cglib.beans.BeanMap;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+import java.beans.PropertyDescriptor;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.lang.reflect.Method;
+import java.util.Map;
+
+/**
+ * 基于CGlib
+ * 实体工具类,目前copy不支持map、list
+ * @author L.cm
+ * email: 596392912@qq.com
+ * site:http://www.dreamlu.net
+ * @date 2015年4月26日下午5:10:42
+ */
+public final class BeanUtils extends org.springframework.beans.BeanUtils {
+	private BeanUtils(){}
+
+	/**
+	 * 实例化对象
+	 * @param clazz 类
+	 * @return 对象
+	 */
+	@SuppressWarnings("unchecked")
+	public static <T> T newInstance(Class<?> clazz) {
+		return (T) instantiate(clazz);
+	}
+
+	/**
+	 * 实例化对象
+	 * @param clazzStr 类名
+	 * @return 对象
+	 */
+	public static <T> T newInstance(String clazzStr) {
+		try {
+			Class<?> clazz = Class.forName(clazzStr);
+			return newInstance(clazz);
+		} catch (ClassNotFoundException e) {
+			throw new RuntimeException(e);
+		}
+	}
+
+	/**
+	 * 获取Bean的属性
+	 * @param bean bean
+	 * @param propertyName 属性名
+	 * @return 属性值
+	 */
+	public static Object getProperty(Object bean, String propertyName) {
+		PropertyDescriptor pd = getPropertyDescriptor(bean.getClass(), propertyName);
+		if (pd == null) {
+			throw new RuntimeException("Could not read property '" + propertyName + "' from bean PropertyDescriptor is null");
+		}
+		Method readMethod = pd.getReadMethod();
+		if (readMethod == null) {
+			throw new RuntimeException("Could not read property '" + propertyName + "' from bean readMethod is null");
+		}
+		if (!readMethod.isAccessible()) {
+			readMethod.setAccessible(true);
+		}
+		try {
+			return readMethod.invoke(bean);
+		} catch (Throwable ex) {
+			throw new RuntimeException("Could not read property '" + propertyName + "' from bean", ex);
+		}
+	}
+
+	/**
+	 * 设置Bean属性
+	 * @param bean bean
+	 * @param propertyName 属性名
+	 * @param value 属性值
+	 */
+	public static void setProperty(Object bean, String propertyName, Object value) {
+		PropertyDescriptor pd = getPropertyDescriptor(bean.getClass(), propertyName);
+		if (pd == null) {
+			throw new RuntimeException("Could not set property '" + propertyName + "' to bean PropertyDescriptor is null");
+		}
+		Method writeMethod = pd.getWriteMethod();
+		if (writeMethod == null) {
+			throw new RuntimeException("Could not set property '" + propertyName + "' to bean writeMethod is null");
+		}
+		if (!writeMethod.isAccessible()) {
+			writeMethod.setAccessible(true);
+		}
+		try {
+			writeMethod.invoke(bean, value);
+		} catch (Throwable ex) {
+			throw new RuntimeException("Could not set property '" + propertyName + "' to bean", ex);
+		}
+	}
+
+	/**
+	 * 给一个Bean添加字段
+	 * @param superBean 父级Bean
+	 * @param props 新增属性
+	 * @return  {Object}
+	 */
+	public static Object generator(Object superBean, BeanProperty... props) {
+		Class<?> superclass = superBean.getClass();
+		Object genBean = generator(superclass, props);
+		BeanUtils.copy(superBean, genBean);
+		return genBean;
+	}
+
+	/**
+	 * 给一个class添加字段
+	 * @param superclass 父级
+	 * @param props 新增属性
+	 * @return {Object}
+	 */
+	public static Object generator(Class<?> superclass, BeanProperty... props) {
+		BeanGenerator generator = new BeanGenerator();
+		generator.setSuperclass(superclass);
+		generator.setUseCache(true);
+		for (BeanProperty prop : props) {
+			generator.addProperty(prop.getName(), prop.getType());
+		}
+		return generator.create();
+	}
+
+	/**
+	 * copy 对象属性到另一个对象,默认不使用Convert
+	 * @param src
+	 * @param clazz 类名
+	 * @return T
+	 */
+	public static <T> T copy(Object src, Class<T> clazz) {
+		BeanCopier copier = BeanCopier.create(src.getClass(), clazz, false);
+
+		T to = newInstance(clazz);
+		copier.copy(src, to, null);
+		return to;
+	}
+
+	/**
+	 * 拷贝对象
+	 * @param src 源对象
+	 * @param dist 需要赋值的对象
+	 */
+	public static void copy(Object src, Object dist) {
+		BeanCopier copier = BeanCopier
+				.create(src.getClass(), dist.getClass(), false);
+
+		copier.copy(src, dist, null);
+	}
+
+	/**
+	 * 将对象装成map形式
+	 * @param src
+	 * @return
+	 */
+	@SuppressWarnings("rawtypes")
+	public static Map toMap(Object src) {
+		return BeanMap.create(src);
+	}
+
+	/**
+	 * 将map 转为 bean
+	 */
+	public static <T> T toBean(Map<String, Object> beanMap, Class<T> valueType) {
+		T bean = BeanUtils.newInstance(valueType);
+		PropertyDescriptor[] beanPds = getPropertyDescriptors(valueType);
+		for (PropertyDescriptor propDescriptor : beanPds) {
+			String propName = propDescriptor.getName();
+			// 过滤class属性
+			if (propName.equals("class")) {
+				continue;
+			}
+			if (beanMap.containsKey(propName)) {
+				Method writeMethod = propDescriptor.getWriteMethod();
+				if (null == writeMethod) {
+					continue;
+				}
+				Object value = beanMap.get(propName);
+				if (!writeMethod.isAccessible()) {
+					writeMethod.setAccessible(true);
+				}
+				try {
+					writeMethod.invoke(bean, value);
+				} catch (Throwable e) {
+					throw new RuntimeException("Could not set property '" + propName + "' to bean", e);
+				}
+			}
+		}
+		return bean;
+	}
+
+	public static String beanToXml(Object obj,Class<?> load) throws JAXBException {
+		JAXBContext context = JAXBContext.newInstance(load);
+		Marshaller marshaller = context.createMarshaller();
+		marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
+		marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
+		StringWriter writer = new StringWriter();
+		marshaller.marshal(obj,writer);
+		return writer.toString();
+	}
+
+	/**
+	 * xml文件配置转换为对象
+	 * @param xml  xml字符串
+	 * @param load    java对象.Class
+	 * @return    java对象
+	 * @throws JAXBException
+	 */
+	public static Object xmlToBean(String xml,Class<?> load) throws JAXBException {
+	    JAXBContext context = JAXBContext.newInstance(load);
+	    Unmarshaller unmarshaller = context.createUnmarshaller();
+		return unmarshaller.unmarshal(new ByteArrayInputStream(xml.getBytes()));
+	}
+
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/BooleanReason.java b/src/main/java/com/gk/firework/Domain/Utils/BooleanReason.java
new file mode 100644
index 0000000..0bf5c92
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/BooleanReason.java
@@ -0,0 +1,48 @@
+package com.gk.firework.Domain.Utils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class BooleanReason {
+    private Boolean value;
+    private List<String> reasons = new ArrayList<String>();
+    private String resultmsg ;
+    private Object data;
+    private Long totalnum;
+
+    public Boolean getValue() {
+        return value;
+    }
+
+    public void setValue(Boolean value) {
+        this.value = value;
+    }
+
+    public List<String> getReasons() {
+        return reasons;
+    }
+
+    public void addReason(String reason) {
+        this.reasons.add(reason);
+    }
+
+    public String getResultmsg() {
+        return this.reasons.size() > 0? this.reasons.get(this.reasons.size()-1): null;
+    }
+
+    public Object getData() {
+        return data;
+    }
+
+    public void setData(Object data) {
+        this.data = data;
+    }
+
+    public Long getTotalnum() {
+        return totalnum;
+    }
+
+    public void setTotalnum(Long totalnum) {
+        this.totalnum = totalnum;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/CommonUtil.java b/src/main/java/com/gk/firework/Domain/Utils/CommonUtil.java
new file mode 100644
index 0000000..b8bdc08
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/CommonUtil.java
@@ -0,0 +1,139 @@
+package com.gk.firework.Domain.Utils;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.setting.Setting;
+import com.google.common.base.Splitter;
+import com.google.common.collect.Lists;
+import io.jsonwebtoken.Claims;
+import io.jsonwebtoken.Jwts;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Optional;
+import java.util.function.Function;
+import java.util.function.Supplier;
+import java.util.stream.Collectors;
+
+/**
+ * 常用工具类
+ *
+ * @author zhangby
+ * @date 2019-05-13 12:20
+ */
+public class CommonUtil {
+
+    /**
+     * 解析token
+     * @return
+     */
+    public static Claims parseJwtNoBearer(String jwt){
+        try{
+            Claims claims = Jwts.parser()
+                    .setSigningKey("springCloud_oauth_service".getBytes())
+                    .parseClaimsJws(jwt).getBody();
+            return claims;
+        }catch(Exception ex){
+            ex.printStackTrace();
+            return null;
+        }
+    }
+
+    /**
+     * 解析token
+     * @param jsonWebToken
+     * @param base64Security
+     * @return
+     */
+    public static Claims parseJWT(String jsonWebToken, String base64Security){
+        String jwt = jsonWebToken.replace("Bearer ", "");
+        try{
+            Claims claims = Jwts.parser()
+                    .setSigningKey(base64Security.getBytes())
+                    .parseClaimsJws(jwt).getBody();
+            return claims;
+        }catch(Exception ex){
+            ex.printStackTrace();
+            return null;
+        }
+    }
+
+    /**
+     * 解析token
+     * @param jsonWebToken
+     * @return
+     */
+    public static Claims parseJWT(String jsonWebToken){
+        return emptyStr(jsonWebToken).map(token -> CommonUtil.parseJWT(token, "springCloud_oauth_service")).orElse(null);
+    }
+
+    /**
+     * list数据转换
+     * @param list list对象
+     * @param func lamdba 表达式 function
+     * @param <E> 原对象
+     * @param <T> 转换完的对象
+     * @return List<E>
+     */
+    public static <E,T> List<E> convers(List<T> list, Function<T, E> func) {
+        return list.stream().collect(ArrayList::new, (li, p) -> li.add(func.apply(p)), List::addAll);
+    }
+
+    /**
+     * 加载错误信息
+     * @return
+     */
+    public static String loadErrorMsg(String num, Object... msg) {
+        //获取错误码配置信息
+        Setting errorSetting = ConfigUtil.getErrorSetting();
+        //获取错误码
+        String errMsg = errorSetting.get(StrUtil.format("code_{}", num));
+        if (ObjectUtil.isNotNull(msg)) {
+            errMsg = StrUtil.format(errMsg, msg);
+        }
+        return errMsg;
+    }
+
+    /**
+     * 字符串模板替换 截取
+     * ClassTest::getDictList4Function,{}::{} ->[ClassTest,getDictList4Function]
+     *
+     * @param str
+     * @param temp
+     * @return
+     */
+    public static List<String> splitStr4Temp(String str, String temp) {
+        List<String> rsList = Lists.newArrayList();
+        Iterator<String> iterator = Splitter.on("{}").omitEmptyStrings().split(temp).iterator();
+        while (iterator.hasNext()) {
+            str = str.replace(iterator.next(), "〆");
+        }
+        Iterator<String> split = Splitter.on("〆").omitEmptyStrings().split(str).iterator();
+        while (split.hasNext()) {
+            rsList.add(split.next());
+        }
+        return rsList.stream().filter(StrUtil::isNotBlank).collect(Collectors.toList());
+    }
+
+    /**
+     * 异常捕获
+     * @param resolver resolver
+     * @param <T> T
+     * @return
+     */
+    public static <T> Optional<T> resolve(Supplier<T> resolver) {
+        Optional<T> optional = Optional.empty();
+        try {
+            T result = resolver.get();
+            optional = Optional.ofNullable(result);
+        } catch (Exception e) {
+            optional = Optional.empty();
+        }
+        return optional;
+    }
+
+    public static Optional<String> emptyStr(String string) {
+        return Optional.ofNullable(string).filter(StrUtil::isNotBlank);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/ConfigUtil.java b/src/main/java/com/gk/firework/Domain/Utils/ConfigUtil.java
new file mode 100644
index 0000000..ead89e3
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/ConfigUtil.java
@@ -0,0 +1,39 @@
+package com.gk.firework.Domain.Utils;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.setting.Setting;
+
+/**
+ * 获取公用配置文件
+ *
+ *
+ * @author zhangby
+ * @date 2019-05-13 16:13
+ */
+public class ConfigUtil {
+    /**
+     * 异常错误码配置
+     */
+    private static Setting errorSetting = null;
+
+    /**
+     * 获取错误码配置
+     */
+    public static Setting getErrorSetting() {
+        return configFunction("error.setting", errorSetting);
+    }
+
+    /**
+     * 读取系统配置信息
+     *
+     * @param configName
+     * @return
+     */
+    private static Setting configFunction(String configName, Setting prop) {
+        if (ObjectUtil.isNull(prop)) {
+            prop = new Setting(configName);
+        }
+        return prop;
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/Constants.java b/src/main/java/com/gk/firework/Domain/Utils/Constants.java
new file mode 100644
index 0000000..779a382
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/Constants.java
@@ -0,0 +1,139 @@
+package com.gk.firework.Domain.Utils;
+
+/**
+ * 静态文件
+ *
+ * @author zhangby
+ * @date 2019-05-13 12:19
+ */
+public class Constants {
+
+
+    /************************* 系统常量 *********************************/
+    /**
+     * yes_no: 0 否
+     */
+    public static final Integer YES_NO_0 = 0;
+    /**
+     * yes_no: 1 是
+     */
+    public static final Integer YES_NO_1 = 1;
+    /**
+     * 成功: success
+     */
+    public static final String SUCCESS = "success";
+    /**
+     * 失败: fail
+     */
+    public static final String FAIL = "fail";
+
+    /**
+     * 非过滤URL **,
+     */
+    public static final String FILTER_EXCLUDE_PATH = "/,/v2/api-docs,/swagger-resources/**,/swagger-ui.html,/webjars/**,/auth/**,/api/**,/error,/upload/**,/dbback/**,/push/**,/register/add,/register/isNameExist,/register/isNumberExist,/districtByName,/district,/logs/**";
+
+    /**
+     * 登录授权类型
+     */
+    public static final String AUTH_TYPE = "auth_type";
+
+    /**
+     * 当前用户id
+     */
+    public static final String CURRENT_USER_ID = "current_user_id";
+
+    /**
+     * 管理员角色id
+     */
+    public static final String ROLE_ADMIN_ID = "1";
+
+    /**
+     * 系统管理员id
+     */
+    public static final String USER_ADMIN_ID = "1";
+
+    /**
+     * 系统父类id
+     */
+    public static final String SYS_PARENT_ID = "0";
+
+    /************************* 通用错误信息 ******************************/
+
+    /**  错误码 (ERROR CODE)  */
+    /**
+     * 正常 code:000
+     */
+    public static final String NORMAL = "000";
+    /**
+     * 错误 code:999
+     */
+    public static final String ERROR = "999";
+
+
+    /**  错误信息 (ERROR MESSAGE) */
+    /**
+     * 正常 code:000
+     */
+    public static final String MSG_000 = "成功";
+    /**
+     * 错误 code:999
+     */
+    public static final String MSG_999 = "系统错误";
+
+
+    /**
+     * @Description: enterpriseresources->tabletype
+     * @author celin
+     */
+
+    /**
+    * @Description: 标准化
+    */
+    public static final String STANDARDIZATION = "Standardization";
+
+    /**
+    * @Description: 证书
+    */
+    public static final String LICENSE = "License";
+
+    /**
+     * @Description: 仓库
+     */
+    public static final String WAREHOUSE = "Warehouse";
+
+    /**
+     * @Description: 人员
+     */
+    public static final String PERSON = "Person";
+
+    /**
+     * @Description: 文件
+     */
+    public static final String DOCUMENT = "Document";
+
+    /**
+     * @Description: 上传反馈
+     */
+    public static final String FEED = "Feed";
+
+
+    /**
+     * @Description: 法定代表人
+     */
+    public static final String LEGAL_REPRESENTATIVE = "法定代表人";
+
+    /**
+     * @Description: 主要负责人
+     */
+    public static final String MAIN_PRINCIPAL = "主要负责人";
+
+    /**
+     * @Description: 安全负责人
+     */
+    public static final String SECURITY_OFFICER = "安全负责人";
+
+    /**
+     * @Description: 信息员
+     */
+    public static final String INFORMATION_OFFICER = "信息员";
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/DateUtils.java b/src/main/java/com/gk/firework/Domain/Utils/DateUtils.java
new file mode 100644
index 0000000..92fdf3c
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/DateUtils.java
@@ -0,0 +1,31 @@
+package com.gk.firework.Domain.Utils;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class DateUtils {
+
+    /**
+     * 根据时间 和时间格式 校验是否正确
+     * @param length 校验的长度
+     * @param sDate 校验的日期
+     * @param format 校验的格式
+     * @return
+     */
+    public static boolean isLegalDate(int length, String sDate,String format) {
+        int legalLen = length;
+        if ((sDate == null) || (sDate.length() != legalLen)) {
+            return false;
+        }
+        DateFormat formatter = new SimpleDateFormat(format);
+        try {
+            Date date = formatter.parse(sDate);
+            return sDate.equals(formatter.format(date));
+        } catch (Exception e) {
+            return false;
+        }
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/DigestUtils.java b/src/main/java/com/gk/firework/Domain/Utils/DigestUtils.java
new file mode 100644
index 0000000..2996fc2
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/DigestUtils.java
@@ -0,0 +1,29 @@
+package com.gk.firework.Domain.Utils;
+
+import org.apache.commons.codec.Charsets;
+
+/**
+ * 加密相关工具类直接使用Spring util封装,减少jar依赖
+ * @author L.cm
+ */
+public class DigestUtils extends org.springframework.util.DigestUtils {
+
+    /**
+     * Calculates the MD5 digest and returns the value as a 32 character hex string.
+     *
+     * @param data Data to digest
+     * @return MD5 digest as a hex string
+     */
+    public static String md5Hex(final String data) {
+        return DigestUtils.md5DigestAsHex(data.getBytes(Charsets.UTF_8));
+    }
+
+    /**
+     * Return a hexadecimal string representation of the MD5 digest of the given bytes.
+     * @param bytes the bytes to calculate the digest over
+     * @return a hexadecimal digest string
+     */
+    public static String md5Hex(final byte[] bytes) {
+        return DigestUtils.md5DigestAsHex(bytes);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/DivideFlagUtil.java b/src/main/java/com/gk/firework/Domain/Utils/DivideFlagUtil.java
new file mode 100644
index 0000000..6d1ab41
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/DivideFlagUtil.java
@@ -0,0 +1,23 @@
+package com.gk.firework.Domain.Utils;
+
+import com.gk.firework.Domain.Enterprise;
+
+public class DivideFlagUtil {
+
+    private static  final int ENTERPRISE_TABLE = 20;
+
+
+    public static int enterpriseDivideFlagGenerate(int size) {
+
+        if (++size % ENTERPRISE_TABLE == 0)
+            return ENTERPRISE_TABLE;
+        return size % ENTERPRISE_TABLE;
+    }
+
+    public static void main(String[] args) {
+        int i = enterpriseDivideFlagGenerate(20);
+    }
+}
+
+
+
diff --git a/src/main/java/com/gk/firework/Domain/Utils/ExcelProperty.java b/src/main/java/com/gk/firework/Domain/Utils/ExcelProperty.java
new file mode 100644
index 0000000..960aae2
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/ExcelProperty.java
@@ -0,0 +1,100 @@
+package com.gk.firework.Domain.Utils;
+
+import org.apache.poi.ss.usermodel.*;
+
+import java.text.DecimalFormat;
+import java.text.Format;
+import java.util.Date;
+
+/**
+ * Created by Administrator on 2017/8/12.
+ */
+public class ExcelProperty {
+    public static Object getCellValue(Cell cell,FormulaEvaluator evaluator) {
+        Object value = "";
+//        SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");  //日期格式化
+//        DecimalFormat df2 = new DecimalFormat("0.00");  //格式化数字
+
+        if(null == cell)
+        {
+            return "";
+        }
+        switch (cell.getCellTypeEnum()) {
+            case _NONE:
+                value = "";
+                break;
+            case BLANK:
+                value = "";
+                break;
+            case BOOLEAN:
+                value = cell.getBooleanCellValue();
+                break;
+            case ERROR:
+                value = cell.getErrorCellValue();
+                break;
+            case FORMULA:
+                CellValue cellValue = evaluator.evaluate(cell);
+                switch (cellValue.getCellTypeEnum()) {
+                    case _NONE:
+                        value = "";
+                        break;
+                    case BLANK:
+                        value = "";
+                        break;
+                    case BOOLEAN:
+                        value = cellValue.getBooleanValue();
+                        break;
+                    case ERROR:
+                        value = cellValue.getErrorValue();
+                        break;
+                    case NUMERIC:
+                        value = cellValue.getNumberValue();
+                        break;
+                    case STRING:
+                        if(StringUtils.isNotBlank(cell.getStringCellValue()))
+                        {
+                            value=cell.getStringCellValue().trim();
+                        }
+                        else {
+                            value ="";
+                        }
+                        break;
+                    default:
+                        break;
+                }
+                break;
+            case NUMERIC:
+                value=formatNumericCell(cell.getNumericCellValue(), cell);
+                break;
+            case STRING:
+                if(StringUtils.isNotBlank(cell.getStringCellValue()))
+                {
+                    value=cell.getStringCellValue().trim();
+                }
+                else {
+                    value ="";
+                }
+                break;
+            default:
+                break;
+        }
+        return value;
+    }
+
+    public static String formatNumericCell(Double value, Cell cell) {
+        if(cell.getCellTypeEnum() != CellType.NUMERIC && cell.getCellTypeEnum() != CellType.FORMULA) {
+            return null;
+        }
+        //isCellDateFormatted判断该单元格是"时间格式"或者该"单元格的公式算出来的是时间格式"
+        if(DateUtil.isCellDateFormatted(cell)) {
+            Date date = cell.getDateCellValue();
+            DataFormatter dataFormatter = new DataFormatter();
+            Format format = dataFormatter.createFormat(cell);
+            return format.format(date);
+        } else {
+            DecimalFormat df = new DecimalFormat("#.###");  //格式化number String字符
+            return  df.format(value);
+
+        }
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/FileOptUtils.java b/src/main/java/com/gk/firework/Domain/Utils/FileOptUtils.java
new file mode 100644
index 0000000..7347aeb
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/FileOptUtils.java
@@ -0,0 +1,26 @@
+package com.gk.firework.Domain.Utils;
+
+import java.io.File;
+/**
+ * Created by Administrator on 2018/1/28.
+ */
+public class FileOptUtils {
+
+    public static Boolean isDirExists(String filename) {
+        try {
+            File file = new File(filename);
+            if (file.exists()) {
+                if (file.isDirectory()) {
+                    return true;
+                } else {
+                    return false;
+                }
+            } else {
+                file.mkdirs();
+                return true;
+            }
+        } catch (Exception e) {
+          return false;
+        }
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/FilterObject.java b/src/main/java/com/gk/firework/Domain/Utils/FilterObject.java
new file mode 100644
index 0000000..b823ed5
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/FilterObject.java
@@ -0,0 +1,42 @@
+package com.gk.firework.Domain.Utils;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.Map;
+
+public class FilterObject {
+
+    @NotEmpty
+    @NotNull
+    private Integer pageIndex;
+    @NotNull
+    @NotEmpty
+    private Integer pageSize;
+
+    private Map<String, Object> filter;
+
+
+    public Integer getPageIndex() {
+        return pageIndex;
+    }
+
+    public void setPageIndex(Integer pageIndex) {
+        this.pageIndex = pageIndex;
+    }
+
+    public Integer getPageSize() {
+        return pageSize;
+    }
+
+    public void setPageSize(Integer pageSize) {
+        this.pageSize = pageSize;
+    }
+
+    public Map<String, Object> getFilter() {
+        return filter;
+    }
+
+    public void setFilter(Map<String, Object> filter) {
+        this.filter = filter;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/HexUtil.java b/src/main/java/com/gk/firework/Domain/Utils/HexUtil.java
new file mode 100644
index 0000000..d658563
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/HexUtil.java
@@ -0,0 +1,88 @@
+package com.gk.firework.Domain.Utils;
+
+import org.apache.commons.lang3.StringUtils;
+
+public class HexUtil {
+    /**
+     * 将十六进制的字符串转换成字节数组
+     *
+     * @param hexString
+     * @return
+     */
+    public static byte[] hexStrToByteArrs(String hexString) {
+        if (StringUtils.isEmpty(hexString)) {
+            return null;
+        }
+
+        hexString = hexString.replaceAll(" ", "");
+        int len = hexString.length();
+        int index = 0;
+
+        byte[] bytes = new byte[len / 2];
+
+        while (index < len) {
+            String sub = hexString.substring(index, index + 2);
+            bytes[index / 2] = (byte) Integer.parseInt(sub, 16);
+            index += 2;
+        }
+
+        return bytes;
+    }
+
+    /**
+     * 数组转换成十六进制字符串
+     * @return HexString
+     */
+    public static final String bytesToHexString(byte[] bArray) {
+        StringBuffer sb = new StringBuffer(bArray.length);
+        String sTemp;
+        for (int i = 0; i < bArray.length; i++) {
+            sTemp = Integer.toHexString(0xFF & bArray[i]);
+            if (sTemp.length() < 2)
+                sb.append(0);
+            sb.append(sTemp.toUpperCase());
+            // 在这里故意追加一个逗号便于最后的区分
+            sb.append(" ");
+        }
+        return sb.toString();
+    }
+
+
+    /**
+     * 字节转换为浮点
+     *
+     * @param b 字节(至少4个字节)
+     * @param index 开始位置
+     * @return
+     */
+    public static float byte2float(byte[] b, int index) {
+        int l;
+        l = b[index + 0];
+        l &= 0xff;
+        l |= ((long) b[index + 1] << 8);
+        l &= 0xffff;
+        l |= ((long) b[index + 2] << 16);
+        l &= 0xffffff;
+        l |= ((long) b[index + 3] << 24);
+        return Float.intBitsToFloat(l);
+    }
+
+
+    /**四个字节的寄存器(十六进制),两两转成十进制,传过来之后返回浮点数**/
+    public static float GetFloat(int P1, int P2)
+    {
+        int intSign, intSignRest, intExponent, intExponentRest;
+        float faResult, faDigit;
+        intSign = P1 / 32768;
+        intSignRest = P1 % 32768;
+        intExponent = intSignRest / 128;
+        intExponentRest = intSignRest % 128;
+        faDigit = (float)(intExponentRest * 65536 + P2) / 8388608;
+        faResult = (float)Math.pow(-1, intSign) * (float)Math.pow(2, intExponent - 127) * (faDigit + 1);
+        return faResult;
+    }
+
+
+
+
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/HttpUtils.java b/src/main/java/com/gk/firework/Domain/Utils/HttpUtils.java
new file mode 100644
index 0000000..d341c81
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/HttpUtils.java
@@ -0,0 +1,199 @@
+package com.gk.firework.Domain.Utils;
+
+import org.apache.http.Header;
+import org.apache.http.HttpStatus;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.ContentType;
+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;
+import org.apache.log4j.LogManager;
+import org.apache.log4j.Logger;
+
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.util.Map;
+
+public class HttpUtils {
+    private static final Logger logger = LogManager.getLogger(HttpUtils.class);
+
+    public static final String DEF_CHATSET = "UTF-8";
+    public static final int DEF_CONN_TIMEOUT = 30000;
+    public static final int DEF_READ_TIMEOUT = 30000;
+    public static String userAgent =  "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29";
+    /**
+     *
+     * @param strUrl 请求地址
+     * @param params 请求参数
+     * @param method 请求方法
+     * @return  网络请求字符串
+     * @throws Exception
+     */
+    public static String net(String strUrl, Map params, String method) throws Exception {
+        HttpURLConnection conn = null;
+        BufferedReader reader = null;
+        String rs = null;
+        try {
+            StringBuffer sb = new StringBuffer();
+            if(method==null || method.equals("GET")){
+                strUrl = strUrl+"?"+urlencode(params);
+            }
+            URL url = new URL(strUrl);
+            conn = (HttpURLConnection) url.openConnection();
+            if(method==null || method.equals("GET")){
+                conn.setRequestMethod("GET");
+            }else{
+                conn.setRequestMethod("POST");
+                conn.setDoOutput(true);
+            }
+            conn.setRequestProperty("User-agent", userAgent);
+            conn.setUseCaches(false);
+            conn.setConnectTimeout(DEF_CONN_TIMEOUT);
+            conn.setReadTimeout(DEF_READ_TIMEOUT);
+            conn.setInstanceFollowRedirects(false);
+            conn.connect();
+            if (params!= null && method.equals("POST")) {
+                try {
+                    DataOutputStream out = new DataOutputStream(conn.getOutputStream());
+                    out.writeBytes(urlencode(params));
+                } catch (Exception e) {
+                    // TODO: handle exception
+                }
+            }
+            InputStream is = conn.getInputStream();
+            reader = new BufferedReader(new InputStreamReader(is, DEF_CHATSET));
+            String strRead = null;
+            while ((strRead = reader.readLine()) != null) {
+                sb.append(strRead);
+            }
+            rs = sb.toString();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            if (reader != null) {
+                reader.close();
+            }
+            if (conn != null) {
+                conn.disconnect();
+            }
+        }
+        return rs;
+    }
+
+    //将map型转为请求参数型
+    public static String urlencode(Map<String,Object>data) {
+        StringBuilder sb = new StringBuilder();
+        for (Map.Entry i : data.entrySet()) {
+            try {
+                sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue()+"","UTF-8")).append("&");
+            } catch (UnsupportedEncodingException e) {
+                e.printStackTrace();
+            }
+        }
+        return sb.toString();
+    }
+
+    //post json
+//    public static String sendPost(String url, String data) {
+//        String response = null;
+//        try {
+//            HttpClient httpclient = null;
+//            HttpResponse httpresponse = null;
+//            HttpPost httppost = null;
+//
+//            try {
+//                httpclient = HttpClients.createDefault();
+//                httppost = new HttpPost(url);
+//                StringEntity stringentity = new StringEntity(data,
+//                        ContentType.create("application/json", "UTF-8"));
+//                httppost.setEntity(stringentity);
+//                httpresponse = httpclient.execute(httppost);
+//                response = EntityUtils
+//                        .toString(httpresponse.getEntity());
+//                // 检验返回码
+//                 int statusCode = httpresponse.getStatusLine().getStatusCode();
+//                 if(statusCode != HttpStatus.SC_OK){
+//                     logger.error("请求出错: "+statusCode);
+//                     if (statusCode == 307) {
+//                         Header header = httpresponse.getFirstHeader("location"); // 跳转的目标地址是在 HTTP-HEAD上
+//                         String newuri = header.getValue(); // 这就是跳转后的地址,再向这个地址发出新申请
+//                         logger.error(newuri);
+//
+//                         httppost = new HttpPost(newuri);
+//                         StringEntity newstringentity = new StringEntity(data,
+//                                 ContentType.create("application/json", "UTF-8"));
+//                         httppost.setEntity(newstringentity);
+//                         httpresponse = httpclient.execute(httppost);
+//                         response = EntityUtils
+//                                 .toString(httpresponse.getEntity());
+//
+//                         logger.error("请求出错: "+httpresponse.getStatusLine().getStatusCode());
+//                     }
+//
+//                 }
+//            } catch (Exception e){
+//                e.printStackTrace();
+//            }finally {
+//                if(httppost != null){
+//                try {
+//                    httppost.releaseConnection();
+//                    Thread.sleep(500);
+//                } catch (InterruptedException e) {
+//                    e.printStackTrace();
+//                }
+//            }
+//            }
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//        return response;
+//    }
+
+    public static String sendPost(String url, String data) {
+        String resData = null;
+        try {
+            RequestConfig config = RequestConfig.custom().setRedirectsEnabled(false).build();//不允许重定向
+            CloseableHttpClient client = HttpClients.custom().setDefaultRequestConfig(config).build();
+
+//            CloseableHttpClient client = HttpClients.createDefault();
+            HttpPost post = new HttpPost(url);
+            post.setHeader("Content-Type", "application/json;charset=UTF-8");
+            StringEntity se = new StringEntity(data, "UTF-8");
+            se.setContentEncoding("UTF-8");
+            se.setContentType("application/json");
+            post.setEntity(se);
+            CloseableHttpResponse response = client.execute(post);
+            resData = EntityUtils.toString(response.getEntity());
+            // 检验返回码
+            int statusCode = response.getStatusLine().getStatusCode();
+            if(statusCode != HttpStatus.SC_OK){
+                logger.error("请求出错: "+statusCode);
+                if (statusCode == 307) {
+                    Header header = response.getFirstHeader("Location"); // 跳转的目标地址是在 HTTP-HEAD上
+                    String newuri = header.getValue(); // 这就是跳转后的地址,再向这个地址发出新申请
+                    logger.error(newuri);
+
+                    post = new HttpPost(newuri);
+                    StringEntity newstringentity = new StringEntity(data,
+                            ContentType.create("application/json", "UTF-8"));
+                    post.setEntity(newstringentity);
+                    response = client.execute(post);
+                    resData = EntityUtils.toString(response.getEntity());
+                    logger.error("请求出错: "+response.getStatusLine().getStatusCode());
+                }
+            }
+            client.close();
+            logger.info(resData);
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+        }
+        return resData;
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/IdCardUtil.java b/src/main/java/com/gk/firework/Domain/Utils/IdCardUtil.java
new file mode 100644
index 0000000..79e7d23
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/IdCardUtil.java
@@ -0,0 +1,171 @@
+package com.gk.firework.Domain.Utils;
+
+import java.util.HashSet;
+import java.util.regex.Pattern;
+
+public class IdCardUtil {
+
+
+    /** 大陆地区地域编码最大值 **/
+    public static final int MAX_MAINLAND_AREACODE = 659004;
+    /** 大陆地区地域编码最小值 **/
+    public static final int MIN_MAINLAND_AREACODE = 110000;
+    /** 香港地域编码值 **/
+    public static final int HONGKONG_AREACODE = 810000; // 香港地域编码值
+    /** 台湾地域编码值 **/
+    public static final int TAIWAN_AREACODE = 710000;
+    /** 澳门地域编码值 **/
+    public static final int MACAO_AREACODE = 820000;
+
+    /** 数字正则 **/
+    public static final String regexNum = "^[0-9]*$";
+    /** 闰年生日正则 **/
+    public static final String regexBirthdayInLeapYear = "^((19[0-9]{2})|(200[0-9])|(201[0-5]))((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))$";
+    /** 平年生日正则 **/
+    public static final String regexBirthdayInCommonYear = "^((19[0-9]{2})|(200[0-9])|(201[0-5]))((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))$";
+
+    private static final HashSet<String> BLACK_SET = new HashSet<String>() {
+
+        private static final long serialVersionUID = 48136604486603324L;
+        {
+            add("111111111111111");
+        }
+    };
+
+    /**
+     * <p>
+     * 身份证格式强校验
+     * </p>
+     * <p>
+     *  1、号码的结构 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,
+     * 八位数字出生日期码,三位数字顺序码和一位数字校验码。
+     * </p>
+     * <p>
+     * 2、地址码(前六位数)表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。
+     * </p>
+     * <p>
+     * 3、出生日期码(第七位至十四位)表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。
+     * </p>
+     * <p>
+     * 4、顺序码(第十五位至十七位)表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号, 顺序码的奇数分配给男性,偶数分配给女性。
+     * </p>
+     * <p>
+     * 5、校验码(第十八位数)
+     * (1)十七位数字本体码加权求和公式 S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前17位数字的权求和
+     * Ai:表示第i位置上的身份证号码数字值 Wi:表示第i位置上的加权因子 Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4
+     * 2 (2)计算模 Y = mod(S, 11) (3)通过模得到对应的校验码 Y: 0 1 2 3 4 5 6 7 8 9 10 校验码: 1 0
+     * X 9 8 7 6 5 4 3 2
+     * </p>
+     */
+    public static final boolean strongVerifyIdNumber(String idNumber) {
+        if (StringUtils.isEmpty(idNumber)) {
+            return false;
+        }
+        idNumber = idNumber.trim();
+
+        if (BLACK_SET.contains(idNumber)) {
+            return false;
+        }
+        if (!checkIdNumberRegex(idNumber)) {
+            return false;
+        }
+        if (!checkIdNumberArea(idNumber.substring(0, 6))) {
+            return false;
+        }
+        idNumber = convertFifteenToEighteen(idNumber);
+        if (!checkBirthday(idNumber.substring(6, 14))) {
+            return false;
+        }
+        if (!checkIdNumberVerifyCode(idNumber)) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * 身份证正则校验
+     */
+    private static boolean checkIdNumberRegex(String idNumber) {
+        return Pattern.matches("^([0-9]{17}[0-9Xx])|([0-9]{15})$", idNumber);
+    }
+
+    /**
+     * 身份证地区码检查
+     */
+    private static boolean checkIdNumberArea(String idNumberArea) {
+        int areaCode = Integer.parseInt(idNumberArea);
+        if (areaCode == HONGKONG_AREACODE || areaCode == MACAO_AREACODE || areaCode == TAIWAN_AREACODE) {
+            return true;
+        }
+        if (areaCode <= MAX_MAINLAND_AREACODE && areaCode >= MIN_MAINLAND_AREACODE) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * 将15位身份证转换为18位
+     */
+    private static String convertFifteenToEighteen(String idNumber) {
+        if (15 != idNumber.length()) {
+            return idNumber;
+        }
+        idNumber = idNumber.substring(0, 6) + "19" + idNumber.substring(6, 15);
+        idNumber = idNumber + getVerifyCode(idNumber);
+        return idNumber;
+    }
+
+    /**
+     * 根据身份证前17位计算身份证校验码
+     */
+    private static String getVerifyCode(String idNumber) {
+        if (!Pattern.matches(regexNum, idNumber.substring(0, 17))) {
+            return null;
+        }
+        String[] ValCodeArr = { "1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2" };
+        String[] Wi = { "7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2" };
+
+        int sum = 0;
+        for (int i = 0; i < 17; i++) {
+            sum = sum + Integer.parseInt(String.valueOf(idNumber.charAt(i))) * Integer.parseInt(Wi[i]);
+        }
+        return ValCodeArr[sum % 11];
+    }
+
+    /**
+     * 身份证出生日期嘛检查
+     */
+    private static boolean checkBirthday(String idNumberBirthdayStr) {
+        Integer year = null;
+        try {
+            year = Integer.valueOf(idNumberBirthdayStr.substring(0, 4));
+        } catch (Exception e) {
+        }
+        if (null == year) {
+            return false;
+        }
+        if (isLeapYear(year)) {
+            return Pattern.matches(regexBirthdayInLeapYear, idNumberBirthdayStr);
+        } else {
+            return Pattern.matches(regexBirthdayInCommonYear, idNumberBirthdayStr);
+        }
+    }
+
+    /**
+     * 判断是否为闰年
+     */
+    private static boolean isLeapYear(int year) {
+        return (year % 400 == 0) || (year % 100 != 0 && year % 4 == 0);
+    }
+
+    /**
+     * 身份证校验码检查
+     */
+    private static boolean checkIdNumberVerifyCode(String idNumber) {
+        return getVerifyCode(idNumber).equalsIgnoreCase(idNumber.substring(17));
+    }
+
+
+
+
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/JacksonObjectMapper.java b/src/main/java/com/gk/firework/Domain/Utils/JacksonObjectMapper.java
new file mode 100644
index 0000000..fd7edf3
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/JacksonObjectMapper.java
@@ -0,0 +1,27 @@
+package com.gk.firework.Domain.Utils;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.stereotype.Component;
+
+import java.text.SimpleDateFormat;
+import java.util.Locale;
+import java.util.TimeZone;
+
+/**
+ * 解决Jackson 差8小时的问题
+ *
+ */
+@Component("jacksonObjectMapper")
+public class JacksonObjectMapper extends ObjectMapper {
+
+    private static final long serialVersionUID = 4288193147502386170L;
+
+    private static final Locale CHINA = Locale.CHINA;
+
+    public JacksonObjectMapper() {
+        this.setLocale(CHINA);
+        this.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", CHINA));
+        this.setTimeZone(TimeZone.getTimeZone("GMT+8"));
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/JaxbUtils.java b/src/main/java/com/gk/firework/Domain/Utils/JaxbUtils.java
new file mode 100644
index 0000000..7c0ed18
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/JaxbUtils.java
@@ -0,0 +1,92 @@
+package com.gk.firework.Domain.Utils;
+
+import javax.xml.bind.*;
+import javax.xml.transform.stream.StreamSource;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * Created by Administrator on 2017/11/29.
+ */
+public class JaxbUtils <T>{
+    public static String JaxbObj2Xml (Object object,Boolean withhead){
+        String xmlString="";
+        try {
+            StringWriter sw = new StringWriter();
+            Marshaller jaxbMarshaller = null;
+            try {
+               JAXBContext jaxbContext = getContext(object.getClass());
+                jaxbMarshaller = jaxbContext.createMarshaller();
+            } catch (JAXBException e) {
+                e.printStackTrace();
+            }
+
+            jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, false); // 格式化输出
+            jaxbMarshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");// 编码格式,默认为utf-8
+            jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);// 是否省略xml头信息
+
+            jaxbMarshaller.marshal(object, sw);
+            xmlString=sw.toString();
+            if(withhead)
+            {
+                xmlString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + xmlString;
+            }
+        } catch (JAXBException e) {
+            e.printStackTrace();
+        }
+        return  xmlString;
+    }
+
+    public static <T> T JaxbXml2Obj(String xmlstr, Class<T> classz) throws JAXBException {
+        T req;
+        try {
+            JAXBContext context = JAXBContext.newInstance(classz);
+            Unmarshaller shaller = context.createUnmarshaller();
+
+            req = (T) shaller.unmarshal(new StringReader(xmlstr));
+        } catch (JAXBException e) {
+            throw e;
+        }
+        return  req;
+    }
+
+    public static Map<Class<?>,JAXBContext> contextMap = new ConcurrentHashMap<Class<?>,JAXBContext>();
+
+    public static String convertToXml(Object obj) throws JAXBException{
+        Class<?> clazz;
+        if (obj instanceof JAXBElement){
+            clazz = ((JAXBElement<?>)obj).getDeclaredType();
+        }else {
+            clazz = obj.getClass();
+        }
+        StringWriter sw = new StringWriter();
+        getContext(clazz).createMarshaller().marshal(obj,sw);
+        return sw.toString();
+    }
+
+    public static <T> T convertToJavaBean(String xml,Class<T>clazz)throws JAXBException{
+        StringReader reader = new StringReader(xml);
+        return getContext(clazz).createUnmarshaller().unmarshal(new StreamSource(reader),clazz).getValue();
+    }
+
+    private static JAXBContext getContext(Class<?>clazz) throws JAXBException{
+        JAXBContext context = contextMap.get(clazz);
+        if (null == context){
+            context = JAXBContext.newInstance(clazz);
+            contextMap.put(clazz,context);
+        }
+        return context;
+    }
+
+
+
+
+
+
+
+
+
+
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/JsonUtils.java b/src/main/java/com/gk/firework/Domain/Utils/JsonUtils.java
new file mode 100644
index 0000000..969430d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/JsonUtils.java
@@ -0,0 +1,48 @@
+package com.gk.firework.Domain.Utils;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import java.io.IOException;
+
+
+public final class JsonUtils {
+    private JsonUtils() {}
+
+    /**
+     * 将对象序列化成json字符串
+     * @param object javaBean
+     * @return jsonString json字符串
+     */
+    public static String toJson(Object object) {
+        try {
+            return getInstance().writeValueAsString(object);
+        } catch (JsonProcessingException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * 将json反序列化成对象
+     * @param jsonString jsonString
+     * @param valueType class
+     * @param <T> T 泛型标记
+     * @return Bean
+     */
+    public static <T> T parse(String jsonString, Class<T> valueType) {
+        try {
+            return getInstance().readValue(jsonString, valueType);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    private static ObjectMapper getInstance() {
+        return JacksonHolder.INSTANCE;
+    }
+
+    private static class JacksonHolder {
+        private static ObjectMapper INSTANCE = new JacksonObjectMapper();
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/MatrixToImageWriter.java b/src/main/java/com/gk/firework/Domain/Utils/MatrixToImageWriter.java
new file mode 100644
index 0000000..a527583
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/MatrixToImageWriter.java
@@ -0,0 +1,82 @@
+package com.gk.firework.Domain.Utils;
+
+import com.google.zxing.BarcodeFormat;
+import com.google.zxing.EncodeHintType;
+import com.google.zxing.MultiFormatWriter;
+import com.google.zxing.WriterException;
+import com.google.zxing.common.BitMatrix;
+import sun.misc.BASE64Encoder;
+
+import javax.imageio.ImageIO;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Hashtable;
+
+public class MatrixToImageWriter {
+    private static final int BLACK = 0xFF000000;
+    private static final int WHITE = 0xFFFFFFFF;
+
+    private MatrixToImageWriter() {
+    }
+
+    private static BufferedImage toBufferedImage(BitMatrix matrix) {
+        int width = matrix.getWidth();
+        int height = matrix.getHeight();
+        BufferedImage image = new BufferedImage(width, height,
+                BufferedImage.TYPE_INT_RGB);
+        for (int x = 0; x < width; x++) {
+            for (int y = 0; y < height; y++) {
+                image.setRGB(x, y, matrix.get(x, y) ? BLACK : WHITE);
+            }
+        }
+        return image;
+    }
+    private static void writeToFile(BitMatrix matrix, String format, File file)
+            throws IOException {
+        BufferedImage image = toBufferedImage(matrix);
+        if (!ImageIO.write(image, format, file)) {
+            throw new IOException("Could not write an image of format "
+                    + format + " to " + file);
+        }
+    }
+    private static void writeToStream(BitMatrix matrix, String format,
+                                      OutputStream stream) throws IOException {
+        BufferedImage image = toBufferedImage(matrix);
+        if (!ImageIO.write(image, format, stream)) {
+            throw new IOException("Could not write an image of format " + format);
+        }
+    }
+
+    public static String getBase64Img(String text) throws IOException, WriterException {
+        // 二维码图片宽度
+        int width = 40;
+        // 二维码图片高度
+        int height = 40;
+        // 二维码的图片格式
+        String format = "jpg";
+        Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>();
+        // 内容所使用字符集编码
+        hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
+
+        BitMatrix bitMatrix = new MultiFormatWriter().encode(text,
+                BarcodeFormat.CODE_128, width, height, hints);
+        /*BitMatrix bitMatrix = new MultiFormatWriter().encode(text,
+                BarcodeFormat.QR_CODE, width, height, hints);*/
+        // 生成二维码
+        File outputFile = new File("d:" + File.separator + "new.jpg");
+        MatrixToImageWriter.writeToFile(bitMatrix, format, outputFile);
+
+        ByteArrayOutputStream pngOutputStream = new ByteArrayOutputStream();
+        MatrixToImageWriter.writeToStream(bitMatrix, "PNG", pngOutputStream);
+        byte[] pngData = pngOutputStream.toByteArray();
+        BASE64Encoder encoder = new BASE64Encoder();
+        String png_base64 = encoder.encodeBuffer(pngData).trim();
+        png_base64 = png_base64.replaceAll("\n", "").replaceAll("\r", "");
+        return png_base64;
+    }
+}
+
+
diff --git a/src/main/java/com/gk/firework/Domain/Utils/Message.java b/src/main/java/com/gk/firework/Domain/Utils/Message.java
new file mode 100644
index 0000000..9990860
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/Message.java
@@ -0,0 +1,57 @@
+package com.gk.firework.Domain.Utils;
+
+import com.gk.firework.Domain.Enum.MsgContentType;
+import com.gk.firework.Domain.Enum.MsgType;
+
+public class Message {
+
+    private String type;
+
+    private String message;
+
+    private String contentType;
+
+    //是否市监管部门
+    private Boolean supervision;
+
+
+    public Message(MsgType type, MsgContentType contentType, Boolean supervision) {
+        this.contentType = contentType.getCode();
+        this.type = type.getCode();
+        this.supervision = supervision;
+    }
+
+
+    public String getType() {
+        return type;
+    }
+
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public Boolean getSupervision() {
+        return supervision;
+    }
+
+    public void setSupervision(Boolean supervision) {
+        this.supervision = supervision;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getContentType() {
+        return contentType;
+    }
+
+    public void setContentType(String contentType) {
+        this.contentType = contentType;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/Msg.java b/src/main/java/com/gk/firework/Domain/Utils/Msg.java
new file mode 100644
index 0000000..3dac725
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/Msg.java
@@ -0,0 +1,69 @@
+package com.gk.firework.Domain.Utils;
+
+import com.gk.firework.Domain.Enum.ErrorCode;
+
+public class Msg {
+    private String code;
+
+    private String message;
+
+    private Object result;
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public Object getResult() {
+        return result;
+    }
+
+    public void setResult(Object result) {
+        this.result = result;
+    }
+
+    public Msg() {
+    }
+
+    public Msg(String code, String message) {
+        this.code = code;
+        this.message = message;
+    }
+
+    public Msg(boolean init){
+        if (init){
+            this.code = ErrorCode.SUCCESS.getCode();
+            this.message = ErrorCode.SUCCESS.getMsg();
+        }else {
+            this.code = ErrorCode.ERROR_999.getCode();
+            this.message = ErrorCode.ERROR_999.getMsg();
+        }
+    }
+
+    public Msg(ErrorCode errorCode){
+        this.setCode(errorCode.getCode());
+        this.setMessage(errorCode.getMsg());
+    }
+
+    public Msg(ErrorCode errorCode,String msg){
+        this.setCode(errorCode.getCode());
+        this.setMessage(errorCode.getMsg()+":"+msg);
+    }
+
+    public Msg(String code, String message, Object result) {
+        this.code = code;
+        this.message = message;
+        this.result = result;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/PageInfo.java b/src/main/java/com/gk/firework/Domain/Utils/PageInfo.java
new file mode 100644
index 0000000..be8950a
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/PageInfo.java
@@ -0,0 +1,143 @@
+package com.gk.firework.Domain.Utils;
+
+import java.util.List;
+import java.util.Map;
+
+public class PageInfo {
+    private final static int PAGESIZE = 10; //默认显示的记录数
+
+    private List result;
+
+    private Long totalCount;
+
+    private Integer pageSize;
+
+    private Integer pageIndex;
+
+    private String sort;
+
+    private String order;
+
+    private int from;
+
+    private int size;
+
+    private Map<String, Object> condition; //查询条件
+
+    public PageInfo() {}
+
+    //构造方法
+    public PageInfo(int pageIndex, int pageSize) {
+        //计算当前页
+        if (pageIndex < 0) {
+            this.pageIndex = 1;
+        } else {
+            //当前页
+            this.pageIndex = pageIndex;
+        }
+        //记录每页显示的记录数
+        if (pageSize < 0) {
+            this.pageSize = PAGESIZE;
+        } else {
+            this.pageSize = pageSize;
+        }
+        //计算开始的记录和结束的记录
+        this.from = (this.pageIndex - 1) * this.pageSize;
+        this.size = this.pageSize;
+    }
+
+    // 构造方法
+    public PageInfo(int pageIndex, int pageSize, String sort, String order) {
+        // 计算当前页
+        if (pageIndex < 0) {
+            this.pageIndex = 1;
+        } else {
+            // 当前页
+            this.pageIndex = pageIndex;
+        }
+        // 记录每页显示的记录数
+        if (pageSize < 0) {
+            this.pageSize = PAGESIZE;
+        } else {
+            this.pageSize = pageSize;
+        }
+        // 计算开始的记录和结束的记录
+        this.from = (this.pageIndex - 1) * this.pageSize;
+        this.size = this.pageSize;
+        // 排序字段,正序还是反序
+        this.sort = sort;
+        this.order = order;
+    }
+
+    public List getResult() {
+        return result;
+    }
+
+    public void setResult(List result) {
+        this.result = result;
+    }
+
+    public Long getTotalCount() {
+        return totalCount;
+    }
+
+    public void setTotalCount(Long totalCount) {
+        this.totalCount = totalCount;
+    }
+
+    public Integer getPageSize() {
+        return pageSize;
+    }
+
+    public void setPageSize(Integer pageSize) {
+        this.pageSize = pageSize;
+    }
+
+    public Integer getPageIndex() {
+        return pageIndex;
+    }
+
+    public void setPageIndex(Integer pageIndex) {
+        this.pageIndex = pageIndex;
+    }
+
+    public String getSort() {
+        return sort;
+    }
+
+    public void setSort(String sort) {
+        this.sort = sort;
+    }
+
+    public String getOrder() {
+        return order;
+    }
+
+    public void setOrder(String order) {
+        this.order = order;
+    }
+
+    public int getFrom() {
+        return from;
+    }
+
+    public void setFrom(int from) {
+        this.from = from;
+    }
+
+    public int getSize() {
+        return size;
+    }
+
+    public void setSize(int size) {
+        this.size = size;
+    }
+
+    public Map<String, Object> getCondition() {
+        return condition;
+    }
+
+    public void setCondition(Map<String, Object> condition) {
+        this.condition = condition;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/Properties.java b/src/main/java/com/gk/firework/Domain/Utils/Properties.java
new file mode 100644
index 0000000..f73f39f
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/Properties.java
@@ -0,0 +1,206 @@
+package com.gk.firework.Domain.Utils;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+@Component
+public class Properties {
+
+
+    /**
+    * @Description: 企业信息的文件路径
+    * @date 2021/4/2 14:14
+    */
+    public static String enterprisePath;
+
+    public static String enterprise;
+    /**
+    * @Description: 运输证文件路径
+    * @date 2021/4/2 14:14
+    */
+    public static String transportCertificatePath;
+
+    public static String transportCertificate;
+
+    /**
+    * @Description: 自检报告中 重大隐患文件存储路径
+    * @date 2021/4/8 16:12
+    */
+    public static String hiddenDangerPath;
+
+    public static String hiddenDanger;
+
+    /**
+     * @Description: 导入的文件路径
+     * @date 2021/4/19 9:20
+     */
+    public static String filePath;
+
+    /**
+    * @Description: 安全生产标准化路径
+    * @date 2021/4/30 9:22
+    */
+    public static String standardPath;
+
+    public static String standard;
+
+    /**
+    * @Description: 合同申请的路径
+    * @date 2021/5/10 9:27
+    */
+    public static String contractPath;
+
+    public static String contract;
+
+    /**
+    * @Description:
+    * @date 2021/7/5 13:46
+    */
+    public static String assessApplyPath;
+
+    public static String assessApply;
+
+    /**
+    * @Description: customer
+    * @date 2021/12/16 15:02
+    */
+
+    public static String customerPath;
+
+    public static String customer;
+
+    public  String getEnterprisePath() {
+        return enterprisePath;
+    }
+
+    @Value("${enterprisePath}")
+    public  void setEnterprisePath(String enterprisePath) {
+        Properties.enterprisePath = enterprisePath;
+    }
+
+
+    public  String getEnterprise() {
+        return enterprise;
+    }
+
+    @Value("${enterprise}")
+    public  void setEnterprise(String enterprise) {
+        Properties.enterprise = enterprise;
+    }
+
+
+    public  String getTransportCertificatePath() {
+        return transportCertificatePath;
+    }
+
+    @Value("${transportCertificatePath}")
+    public  void setTransportCertificatePath(String transportCertificatePath) {
+        Properties.transportCertificatePath = transportCertificatePath;
+    }
+
+    public  String getTransportCertificate() {
+        return transportCertificate;
+    }
+
+    @Value("${transportCertificate}")
+    public  void setTransportCertificate(String transportCertificate) {
+        Properties.transportCertificate = transportCertificate;
+    }
+
+    public  String getHiddenDangerPath() {
+        return hiddenDangerPath;
+    }
+    @Value("${hiddenDangerPath}")
+    public  void setHiddenDangerPath(String hiddenDangerPath) {
+        Properties.hiddenDangerPath = hiddenDangerPath;
+    }
+
+    public  String getHiddenDanger() {
+        return hiddenDanger;
+    }
+
+    @Value("${hiddenDanger}")
+    public  void setHiddenDanger(String hiddenDanger) {
+        Properties.hiddenDanger = hiddenDanger;
+    }
+
+    public  String getFilePath() {
+        return filePath;
+    }
+    @Value("${filePath}")
+    public  void setFilePath(String filePath) {
+        Properties.filePath = filePath;
+    }
+
+    public  String getStandardPath() {
+        return standardPath;
+    }
+
+    @Value("${standardPath}")
+    public  void setStandardPath(String standardPath) {
+        Properties.standardPath = standardPath;
+    }
+
+    public  String getStandard() {
+        return standard;
+    }
+
+    @Value("${standard}")
+    public  void setStandard(String standard) {
+        Properties.standard = standard;
+    }
+
+    public  String getContractPath() {
+        return contractPath;
+    }
+    @Value("${contractPath}")
+    public  void setContractPath(String contractPath) {
+        Properties.contractPath = contractPath;
+    }
+
+    public  String getContract() {
+        return contract;
+    }
+
+    @Value("${contract}")
+    public  void setContract(String contract) {
+        Properties.contract = contract;
+    }
+
+    public  String getAssessApplyPath() {
+        return assessApplyPath;
+    }
+
+    @Value("${assessApplyPath}")
+    public  void setAssessApplyPath(String assessApplyPath) {
+        Properties.assessApplyPath = assessApplyPath;
+    }
+
+    public  String getAssessApply() {
+        return assessApply;
+    }
+
+    @Value("${assessApply}")
+    public  void setAssessApply(String assessApply) {
+        Properties.assessApply = assessApply;
+    }
+
+    public  String getCustomerPath() {
+        return customerPath;
+    }
+
+    @Value("${customerPath}")
+    public  void setCustomerPath(String customerPath) {
+        Properties.customerPath = customerPath;
+    }
+
+
+    public  String getCustomer() {
+        return customer;
+    }
+
+    @Value("${customer}")
+    public  void setCustomer(String customer) {
+        Properties.customer = customer;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/QRCode.java b/src/main/java/com/gk/firework/Domain/Utils/QRCode.java
new file mode 100644
index 0000000..e00948d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/QRCode.java
@@ -0,0 +1,43 @@
+package com.gk.firework.Domain.Utils;
+
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.spire.barcode.*;
+import com.spire.doc.*;
+import com.spire.doc.documents.HorizontalAlignment;
+import com.spire.doc.documents.Paragraph;
+import com.spire.doc.fields.DocPicture;
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
+import org.apache.poi.util.Units;
+import org.apache.poi.xwpf.usermodel.*;
+import org.apache.xmlbeans.XmlCursor;
+
+import javax.imageio.ImageIO;
+import javax.servlet.http.HttpServletResponse;
+import java.awt.*;
+import java.awt.image.RenderedImage;
+import java.io.*;
+import java.util.List;
+
+class QRCode {
+
+    /**
+    * @Description: 生成二维码
+    * @date 2021/5/13 8:48
+    */
+    public static Image generateQRCode(String info)
+    {
+        BarcodeSettings settings = new BarcodeSettings();
+        settings.setType(BarCodeType.QR_Code);
+        settings.setData(info);
+        settings.setData2D(info);
+        settings.setLeftMargin(0);
+        settings.setRightMargin(0);
+        settings.setTopMargin(0);
+        settings.setBottomMargin(0);
+        settings.setShowText(false);
+        settings.setQRCodeECL(QRCodeECL.Q);
+        settings.setQRCodeDataMode(QRCodeDataMode.Numeric);
+        BarCodeGenerator generator = new BarCodeGenerator(settings);
+        return  generator.generateImage();
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/Result.java b/src/main/java/com/gk/firework/Domain/Utils/Result.java
new file mode 100644
index 0000000..4ac86d1
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/Result.java
@@ -0,0 +1,66 @@
+package com.gk.firework.Domain.Utils;
+
+import java.io.Serializable;
+
+/**
+ * @description:操作结果集
+ * @author:zhixuan.wang
+ * @date:2015/10/1 14:51
+ */
+public class Result implements Serializable {
+
+    public static final int SUCCESS = 1;
+    public static final int FAILURE = -1;
+
+    private static final long serialVersionUID = 5576237395711742681L;
+
+    private boolean success = false;
+
+    private String msg = "";
+
+    private Object obj = null;
+
+    private String data = "";
+
+    private String sub = "";
+
+    public boolean isSuccess() {
+        return success;
+    }
+
+    public void setSuccess(boolean success) {
+        this.success = success;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    public Object getObj() {
+        return obj;
+    }
+
+    public void setObj(Object obj) {
+        this.obj = obj;
+    }
+
+    public String getData() {
+        return data;
+    }
+
+    public void setData(String data) {
+        this.data = data;
+    }
+
+    public String getSub() {
+        return sub;
+    }
+
+    public void setSub(String sub) {
+        this.sub = sub;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/SignUtils.java b/src/main/java/com/gk/firework/Domain/Utils/SignUtils.java
new file mode 100644
index 0000000..afd8397
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/SignUtils.java
@@ -0,0 +1,69 @@
+package com.gk.firework.Domain.Utils;
+
+import java.util.Map;
+import java.util.Random;
+import java.util.TreeMap;
+
+import static com.gk.firework.Domain.Utils.StringUtils.MD5Encoder;
+
+
+public class SignUtils {
+
+    public static String getTimestamp() {
+        //生成时间戳
+
+        long timestampLong =System.currentTimeMillis();
+
+        String timestampStr = String.valueOf(timestampLong);
+
+        return timestampStr;
+    }
+
+    public static String getNonceStr(int length){
+
+        //生成随机字符串
+
+        String str="zxcvbnmlkjhgfdsaqwertyuiopQWERTYUIOPASDFGHJKLZXCVBNM1234567890";
+
+        Random random=new Random();
+
+        StringBuffer randomStr=new StringBuffer();
+
+        // 设置生成字符串的长度,用于循环
+
+        for(int i=0; i<length; ++i){
+            //从62个的数字或字母中选择
+
+            int number=random.nextInt(62);
+
+            //将产生的数字通过length次承载到sb中
+
+            randomStr.append(str.charAt(number));
+        }
+
+        //将承载的字符转换成字符串
+
+        return randomStr.toString();
+    }
+
+    //类似微信接口的签名生成方法
+    public static String createSign(Map<String, String> params, String privateKey){
+        StringBuilder sb = new StringBuilder();
+        // 将参数以参数名的字典升序排序
+        Map<String, String> sortParams = new TreeMap<String, String>(params);
+        // 遍历排序的字典,并拼接"key=value"格式
+        for (Map.Entry<String, String> entry : sortParams.entrySet()) {
+            String key = entry.getKey();
+            String value =  entry.getValue().trim();
+            if (!StringUtils.isEmpty(value))
+                sb.append("&").append(key).append("=").append(value);
+        }
+        String stringA = sb.toString().replaceFirst("&","");
+        String stringSignTemp = stringA + "&"+"appkey="+privateKey;
+        //将签名使用MD5加密并全部字母变为大写
+        String signValue = MD5Encoder(stringSignTemp,"utf-8").toUpperCase();
+        System.out.println("stringA+privateKey后MD5加密+转换全部大写生成sign为:       "+signValue);
+        return signValue;
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/SpringBeanUtil.java b/src/main/java/com/gk/firework/Domain/Utils/SpringBeanUtil.java
new file mode 100644
index 0000000..d64996b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/SpringBeanUtil.java
@@ -0,0 +1,64 @@
+package com.gk.firework.Domain.Utils;
+
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+
+@Component
+public class SpringBeanUtil implements ApplicationContextAware {
+
+    private static ApplicationContext applicationContext;
+
+    @Override
+    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+        SpringBeanUtil.applicationContext = applicationContext;
+    }
+
+
+    /**
+     * 获取applicationContext
+     *
+     * @return
+     */
+    public static ApplicationContext getApplicationContext() {
+        return applicationContext;
+    }
+
+    /**
+     * 通过name获取 Bean.
+     *
+     * @param name
+     * @return
+     */
+
+    public static Object getBean(String name) {
+        return getApplicationContext().getBean(name);
+    }
+
+    /**
+     * 通过class获取Bean.
+     *
+     * @param clazz
+     * @param <T>
+     * @return
+     */
+
+    public static <T> T getBean(Class<T> clazz) {
+        return getApplicationContext().getBean(clazz);
+    }
+
+
+    /**
+     * 通过name,以及Clazz返回指定的Bean
+     *
+     * @param name
+     * @param clazz
+     * @param <T>
+     * @return
+     */
+    public static <T> T getBean(String name, Class<T> clazz) {
+        return getApplicationContext().getBean(name, clazz);
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/StringUtils.java b/src/main/java/com/gk/firework/Domain/Utils/StringUtils.java
new file mode 100644
index 0000000..a2a9b4a
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/StringUtils.java
@@ -0,0 +1,219 @@
+package com.gk.firework.Domain.Utils;
+
+import sun.misc.BASE64Encoder;
+
+import java.math.BigInteger;
+import java.nio.charset.Charset;
+import java.security.MessageDigest;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * 继承自Spring util的工具类,减少jar依赖
+ * @author L.cm
+ */
+public class StringUtils extends org.springframework.util.StringUtils {
+    /**
+     * Check whether the given {@code CharSequence} contains actual <em>text</em>.
+     * <p>More specifically, this method returns {@code true} if the
+     * {@code CharSequence} is not {@code null}, its length is greater than
+     * 0, and it contains at least one non-whitespace character.
+     * <p><pre class="code">
+     * StringUtils.isBlank(null) = true
+     * StringUtils.isBlank("") = true
+     * StringUtils.isBlank(" ") = true
+     * StringUtils.isBlank("12345") = false
+     * StringUtils.isBlank(" 12345 ") = false
+     * </pre>
+     * @param str the {@code CharSequence} to check (may be {@code null})
+     * @return {@code true} if the {@code CharSequence} is not {@code null},
+     * its length is greater than 0, and it does not contain whitespace only
+     * @see Character#isWhitespace
+     */
+    public static boolean isBlank(final CharSequence cs) {
+        return !StringUtils.isNotBlank(cs);
+    }
+
+    /**
+     * <p>Checks if a CharSequence is not empty (""), not null and not whitespace only.</p>
+     *
+     * <pre>
+     * StringUtils.isNotBlank(null)      = false
+     * StringUtils.isNotBlank("")        = false
+     * StringUtils.isNotBlank(" ")       = false
+     * StringUtils.isNotBlank("bob")     = true
+     * StringUtils.isNotBlank("  bob  ") = true
+     * </pre>
+     *
+     * @param cs  the CharSequence to check, may be null
+     * @return {@code true} if the CharSequence is
+     *  not empty and not null and not whitespace
+     * @see Character#isWhitespace
+     */
+    public static boolean isNotBlank(final CharSequence cs) {
+        return StringUtils.hasText(cs);
+    }
+
+    /**
+     * Convert a {@code Collection} into a delimited {@code String} (e.g. CSV).
+     * <p>Useful for {@code toString()} implementations.
+     * @param coll the {@code Collection} to convert
+     * @param delim the delimiter to use (typically a ",")
+     * @return the delimited {@code String}
+     */
+    public static String join(Collection<?> coll, String delim) {
+        return StringUtils.collectionToDelimitedString(coll, delim);
+    }
+
+    /**
+     * Convert a {@code String} array into a delimited {@code String} (e.g. CSV).
+     * <p>Useful for {@code toString()} implementations.
+     * @param arr the array to display
+     * @param delim the delimiter to use (typically a ",")
+     * @return the delimited {@code String}
+     */
+    public static String join(Object[] arr, String delim) {
+        return StringUtils.arrayToDelimitedString(arr, delim);
+    }
+
+    public static List<String> toList(String id) {
+        List<String> list = new ArrayList<String>();
+        String[] str = id.split(",");
+        for (int i = 0; i < str.length; i++) {
+            list.add(str[i]);
+        }
+        return list;
+        }
+
+        public static String todbstr(String str) {
+            return "'"+ str +"'";
+        }
+
+        public static String MD5Encoder(String s,String charset){
+            try{
+                byte[] btInput = s.getBytes(charset);
+                MessageDigest mdInst = MessageDigest.getInstance("MD5");
+                mdInst.update(btInput);
+
+            byte[] md = mdInst.digest();
+            StringBuffer sb = new StringBuffer();
+            for(int i =0 ;i<md.length;i++)
+            {
+                int val = ((int)md[i]) & 0xff;
+                if(val<16){
+                    sb.append("0");
+                }
+                sb.append(Integer.toHexString(val));
+            }
+            return sb.toString();
+        }
+        catch (Exception e)
+        {
+            return  null;
+        }
+    }
+
+    public static String getMD5(String str) {
+        try {
+            MessageDigest md = MessageDigest.getInstance("MD5");
+            md.update(str.getBytes());
+            // digest()最后确定返回md5 hash值,返回值为8为字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符
+            // BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值
+            return new BigInteger(1, md.digest()).toString(16);
+        } catch (Exception e) {
+            return "";
+        }
+    }
+
+    public static String MD5OpenApiEncoder(String s,String charset){
+        try{
+            byte[] btInput = s.getBytes(charset);
+            MessageDigest mdInst = MessageDigest.getInstance("MD5");
+            mdInst.update(btInput);
+
+            byte[] md = mdInst.digest();
+            StringBuffer sb = new StringBuffer();
+            for(int i =0 ;i<md.length;i++)
+            {
+                int val = ((int)md[i]) & 0xff;
+                if(val<16){
+                    sb.append("0");
+                }
+                sb.append(Integer.toHexString(val));
+            }
+            return sb.toString();
+        }
+        catch (Exception e)
+        {
+            return  null;
+        }
+    }
+
+    public static String md5(String message) {
+        try {
+            MessageDigest md;
+
+            md = MessageDigest.getInstance("md5");
+            byte m5[] = md.digest(message.getBytes());
+            BASE64Encoder encoder = new BASE64Encoder();
+            return encoder.encode(m5);
+        } catch (Exception e) {
+            // TODO Auto-generated catch block
+            return  "";
+        }
+    }
+
+    public static Boolean isSame(String str1,String str2)
+    {
+
+        if(StringUtils.isNotBlank(str1) && StringUtils.isBlank(str2))
+        {
+            return false;
+        }
+        else if(StringUtils.isBlank(str1) && StringUtils.isNotBlank(str2))
+        {
+            return false;
+        }
+        else if(StringUtils.isBlank(str1) && StringUtils.isBlank(str2))
+        {
+            return true;
+        }
+        else {
+            if(!str1.equals(str2)) {
+                return false;
+            }
+            else {
+                return true;
+            }
+        }
+    }
+
+    public static boolean isContainChinese(String str){
+
+        if (StringUtils.isBlank(str)) {
+            return false;
+        }
+        Pattern p = Pattern.compile("[\u4E00-\u9FA5|\\!|\\,|\\。|\\(|\\)|\\《|\\》|\\“|\\”|\\?|\\:|\\;|\\【|\\】]");
+        Matcher m = p.matcher(str);
+        if (m.find()) {
+            return true;
+        }
+        return false;
+    }
+
+    public static String ytoMd5(String sourceStr) {
+        String result = "";
+        try {
+            MessageDigest md5 = MessageDigest.getInstance("MD5");
+            byte[] bytes = md5.digest((sourceStr).getBytes(Charset.forName("utf-8")));
+            result = new String(org.apache.commons.codec.binary.Base64.encodeBase64(bytes),"utf-8");
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/Tree.java b/src/main/java/com/gk/firework/Domain/Utils/Tree.java
new file mode 100644
index 0000000..af589d5
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/Tree.java
@@ -0,0 +1,104 @@
+package com.gk.firework.Domain.Utils;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+
+import java.util.List;
+
+public class Tree implements java.io.Serializable {
+
+    private static final long serialVersionUID = 980682543891282923L;
+    private Long id;
+    private String text;
+    // open,closed
+    private String state = "open";
+    private boolean checked = false;
+    private Object attributes;
+
+    /** null不输出 **/
+    @JsonInclude(Include.NON_NULL)
+    private List<Tree> children;
+    private String iconCls;
+    private Long pid;
+    /**
+     * ajax,iframe,
+     */
+    private String openMode;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getText() {
+        return text;
+    }
+
+    public void setText(String text) {
+        this.text = text;
+    }
+
+    public String getState() {
+        return state;
+    }
+
+    public void setState(String state) {
+        this.state = state;
+    }
+
+    public void setState(Byte opened) {
+        this.state = (null != opened && opened == 1) ? "open" : "closed";
+    }
+
+    public boolean isChecked() {
+        return checked;
+    }
+
+    public void setChecked(boolean checked) {
+        this.checked = checked;
+    }
+
+    public Object getAttributes() {
+        return attributes;
+    }
+
+    public void setAttributes(Object attributes) {
+        this.attributes = attributes;
+    }
+
+    public List<Tree> getChildren() {
+        return children;
+    }
+
+    public void setChildren(List<Tree> children) {
+        this.children = children;
+    }
+
+    public String getIconCls() {
+        return iconCls;
+    }
+
+    public void setIconCls(String iconCls) {
+        this.iconCls = iconCls;
+    }
+
+    public Long getPid() {
+        return pid;
+    }
+
+    public void setPid(Long pid) {
+        this.pid = pid;
+    }
+
+    public String getOpenMode() {
+        return openMode;
+    }
+
+    public void setOpenMode(String openMode) {
+        this.openMode = openMode;
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/UploadUtil.java b/src/main/java/com/gk/firework/Domain/Utils/UploadUtil.java
new file mode 100644
index 0000000..0481c24
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/UploadUtil.java
@@ -0,0 +1,49 @@
+package com.gk.firework.Domain.Utils;
+
+import org.springframework.web.multipart.MultipartFile;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class UploadUtil {
+
+    public static String uploadFile(MultipartFile file,String filePath) throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+        String oldName = file.getOriginalFilename();
+        if (StringUtils.isBlank(oldName)) {
+            return "null";
+        }
+        String newName = sdf.format(new Date()) + oldName.substring(oldName.lastIndexOf("."));
+        File dest = new File(filePath, newName);
+        String url = newName;
+        if (!dest.getParentFile().exists()) {
+            boolean rel = dest.getParentFile().mkdirs();
+            if (!rel) {
+                throw new Exception("文件夹创建失败");
+            }
+        }
+        InputStream is = file.getInputStream();
+        OutputStream os = new FileOutputStream(dest);
+        try {
+            byte[] buffer = new byte[8 * 1024];
+            int bytesRead;
+            while ((bytesRead = is.read(buffer)) != -1) {
+                os.write(buffer, 0, bytesRead);
+            }
+        } catch (Exception e) {
+            throw e;
+        } finally {
+            if (is != null) {
+                is.close();
+            }
+            if (os != null) {
+                os.close();
+            }
+        }
+
+        return url;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/WebSocketClientManager.java b/src/main/java/com/gk/firework/Domain/Utils/WebSocketClientManager.java
new file mode 100644
index 0000000..16df076
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/WebSocketClientManager.java
@@ -0,0 +1,53 @@
+package com.gk.firework.Domain.Utils;
+
+import java.net.URI;
+
+import org.java_websocket.client.WebSocketClient;
+import org.java_websocket.drafts.Draft;
+import org.java_websocket.handshake.ServerHandshake;
+
+public class WebSocketClientManager extends WebSocketClient {
+    private String msg;
+
+    public WebSocketClientManager(URI serverUri, Draft draft) {
+        super(serverUri, draft);
+    }
+
+    @Override
+    public void onOpen(ServerHandshake serverHandshake) {
+//        //获取打印机列表
+//        String getPrinterListCmd = "{\"requestID\":\"984641221345311287\",\"verson\":\"1.0\",\"cmd\":\"getPrinters\"}";
+//        webSocket.send(getPrinterListCmd);
+//
+//        //发送打印任务
+//        String printCmd = "打印任务报文,内容过长此处不粘贴";
+//        webSocket.send(printCmd);
+//        System.out.println("websocket已连接");
+    }
+
+    //WebSocket回调函数
+    @Override
+    public void onMessage(String message) {
+//        //TODO 对打印服务返回的数据进行处理
+//        System.out.println(message);
+        setMsg(message);
+    }
+
+    @Override
+    public void onClose(int i, String s, boolean b) {
+
+    }
+
+    @Override
+    public void onError(Exception e) {
+
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/WebUtils.java b/src/main/java/com/gk/firework/Domain/Utils/WebUtils.java
new file mode 100644
index 0000000..40381d0
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/WebUtils.java
@@ -0,0 +1,197 @@
+package com.gk.firework.Domain.Utils;
+
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.method.HandlerMethod;
+
+import javax.net.ssl.*;
+import java.io.*;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.security.SecureRandom;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * Miscellaneous utilities for web applications.
+ * @author L.cm
+ */
+public class WebUtils extends org.springframework.web.util.WebUtils {
+	/**
+	 * 判断是否ajax请求
+	 * spring ajax 返回含有 ResponseBody 或者 RestController注解
+	 * @param handlerMethod HandlerMethod
+	 * @return 是否ajax请求
+	 */
+
+    private static final String DEFAULT_CHARSET = "UTF-8";
+    private static boolean ignoreSSLCheck = true;
+    private static boolean ignoreHostCheck = true;
+
+    public static boolean isAjax(HandlerMethod handlerMethod) {
+		ResponseBody responseBody = handlerMethod.getMethodAnnotation(ResponseBody.class);
+		if (null != responseBody) {
+			return true;
+		}
+		RestController restAnnotation = handlerMethod.getBean().getClass().getAnnotation(RestController.class);
+		if (null != restAnnotation) {
+			return true;
+		}
+		return false;
+	}
+
+    private static HttpURLConnection getConnection(URL url, String method, String ctype, Map<String, String> headerMap) throws IOException {
+        Object conn = (HttpURLConnection)url.openConnection();
+        if(conn instanceof HttpsURLConnection) {
+            HttpsURLConnection i$ = (HttpsURLConnection)conn;
+            if(ignoreSSLCheck) {
+                try {
+                    SSLContext entry = SSLContext.getInstance("TLS");
+                    entry.init((KeyManager[])null, new TrustManager[]{new TrustAllTrustManager()}, new SecureRandom());
+                    i$.setSSLSocketFactory(entry.getSocketFactory());
+                    i$.setHostnameVerifier(new HostnameVerifier() {
+                        public boolean verify(String hostname, SSLSession session) {
+                            return true;
+                        }
+                    });
+                } catch (Exception var7) {
+                    throw new IOException(var7.toString());
+                }
+            } else if(ignoreHostCheck) {
+                i$.setHostnameVerifier(new HostnameVerifier() {
+                    public boolean verify(String hostname, SSLSession session) {
+                        return true;
+                    }
+                });
+            }
+
+            conn = i$;
+        }
+
+        ((HttpURLConnection)conn).setRequestMethod(method);
+        ((HttpURLConnection)conn).setDoInput(true);
+        ((HttpURLConnection)conn).setDoOutput(true);
+        if(headerMap != null && headerMap.get("TOP_HTTP_DNS_HOST") != null) {
+            ((HttpURLConnection)conn).setRequestProperty("Host", (String)headerMap.get("TOP_HTTP_DNS_HOST"));
+        } else {
+            ((HttpURLConnection)conn).setRequestProperty("Host", url.getHost());
+        }
+
+        ((HttpURLConnection)conn).setRequestProperty("Accept", "text/xml,text/javascript");
+        ((HttpURLConnection)conn).setRequestProperty("Content-Type", ctype);
+        if(headerMap != null) {
+            Iterator i$1 = headerMap.entrySet().iterator();
+
+            while(i$1.hasNext()) {
+                Map.Entry entry1 = (Map.Entry)i$1.next();
+                if(!"TOP_HTTP_DNS_HOST".equals(entry1.getKey())) {
+                    ((HttpURLConnection)conn).setRequestProperty((String)entry1.getKey(), (String)entry1.getValue());
+                }
+            }
+        }
+
+        return (HttpURLConnection)conn;
+    }
+
+    public static String getStreamAsString(InputStream stream, String charset) throws IOException {
+        try {
+            InputStreamReader reader = new InputStreamReader(stream, charset);
+            StringBuilder response = new StringBuilder();
+            char[] buff = new char[1024];
+            boolean read = false;
+
+            int read1;
+            while((read1 = reader.read(buff)) > 0) {
+                response.append(buff, 0, read1);
+            }
+
+            String var6 = response.toString();
+            return var6;
+        } finally {
+            if(stream != null) {
+                stream.close();
+            }
+
+        }
+    }
+
+    public static class TrustAllTrustManager implements X509TrustManager {
+        public TrustAllTrustManager() {
+        }
+
+        public X509Certificate[] getAcceptedIssuers() {
+            return null;
+        }
+
+        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
+        }
+
+        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
+        }
+    }
+
+    public static String ytoSendPost(String url, Map<String, String> params)
+    {
+        OutputStreamWriter out = null;
+        BufferedReader in = null;
+        StringBuilder result = new StringBuilder();
+        try {
+            URL realUrl = new URL(url);
+            HttpURLConnection conn =(HttpURLConnection) realUrl.openConnection();
+            // 发送POST请求必须设置如下两行
+            conn.setDoOutput(true);
+            conn.setDoInput(true);
+            // POST方法
+            conn.setRequestMethod("POST");
+            // 设置通用的请求属性
+            conn.setRequestProperty("accept", "*/*");
+            conn.setRequestProperty("connection", "Keep-Alive");
+            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
+            conn.connect();
+            // 获取URLConnection对象对应的输出流
+            out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
+            // 发送请求参数
+            if (params != null) {
+                StringBuilder param = new StringBuilder();
+                for (Map.Entry<String, String> entry : params.entrySet()) {
+                    if(param.length()>0){
+                        param.append("&");
+                    }
+                    param.append(entry.getKey());
+                    param.append("=");
+                    param.append(entry.getValue());
+                }
+                out.write(param.toString());
+            }
+            // flush输出流的缓冲
+            out.flush();
+            // 定义BufferedReader输入流来读取URL的响应
+            in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
+            String line;
+            while ((line = in.readLine()) != null) {
+                result.append(line);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        //使用finally块来关闭输出流、输入流
+        finally{
+            try{
+                if(out!=null){
+                    out.close();
+                }
+                if(in!=null){
+                    in.close();
+                }
+            }
+            catch(IOException ex){
+                ex.printStackTrace();
+            }
+        }
+        return result.toString();
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Domain/Utils/WordTemplate.java b/src/main/java/com/gk/firework/Domain/Utils/WordTemplate.java
new file mode 100644
index 0000000..ae1bb72
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Utils/WordTemplate.java
@@ -0,0 +1,682 @@
+package com.gk.firework.Domain.Utils;
+
+import com.gk.firework.Domain.Exception.BusinessException;
+import org.apache.poi.ooxml.POIXMLDocumentPart;
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
+import org.apache.poi.util.Units;
+import org.apache.poi.xwpf.usermodel.*;
+import org.apache.xmlbeans.XmlException;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSectPr;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcBorders;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STBorder;
+
+import javax.imageio.ImageIO;
+import java.awt.*;
+import java.awt.image.RenderedImage;
+import java.io.*;
+import java.util.*;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+
+public class WordTemplate {
+
+    private XWPFDocument document;
+
+
+    public void loadTemplate(File file,InputStream in) throws IOException{
+        //File file = new File(fileName);
+        InputStream target = null;
+        if (file != null) {
+            target =  new FileInputStream(file);
+        }else{
+            target = in;
+        }
+        try{
+            document = new XWPFDocument(target);
+            target.close();
+        } catch(IOException ex){
+            if(target != null){
+                target.close();
+            }
+            throw ex;
+        }
+    }
+
+    public void saveFile(String fileName) throws IOException {
+//        File outputFile=new File(fileName);//filename=D:\Users\inner_peace\Downloads
+//        if(!outputFile.exists()){//判断outputFile这个文件夹是否存在,不存在,创建文件夹(Tips:使用mkdirs创建多层目录,而不是mkdir创建单一目录)
+//            System.out.println("start");
+//            outputFile.mkdirs();
+//            System.out.println("end");
+//        }
+        File f=new File(fileName);
+        String a="";
+        if(!f.exists()){//判断outputFile文件夹下是否存在name文件,不存在,创建
+            f.createNewFile();
+        }/*else{//存在,需要重新创建一个不同名字的文件,这边暂时是在文件名称后不断加(01)
+            String xx=name.substring(0,name.length()-5);
+            a=xx+"(1)";
+        }*/
+        /*File ff=new File(fileName+a+".docx");
+        ff.createNewFile();
+        System.out.println(43);*/
+        FileOutputStream fos  = new FileOutputStream(f);
+        try{
+            document.write(fos);
+            fos.close();
+        }catch (IOException ex){
+            if(fos != null){
+                fos.close();
+            }
+            throw ex;
+        }
+    }
+
+    public void saveFileAndQRCode(String fileName,String info) throws IOException {
+        File f=new File(fileName);
+        if(!f.exists()){
+            f.createNewFile();
+        }
+        FileOutputStream fos  = new FileOutputStream(f);
+
+        try{
+            Image image = QRCode.generateQRCode(info);
+            //
+            String QRCodeUrl = Properties.transportCertificatePath + info + "_" + "QRCode.png";
+            File file = new File(QRCodeUrl);
+            if (!file.exists()) {file.createNewFile();}
+
+            ImageIO.write((RenderedImage) image, "png", file);
+                List<XWPFParagraph> paragraphs = document.getParagraphs();
+                for (int i = 0; i < paragraphs.size(); i++) {
+                    XWPFParagraph paragraph = paragraphs.get(i);
+                    List<XWPFRun> runs = paragraph.getRuns();
+                    for (int l = 0; l < runs.size(); l++) {
+                        XWPFRun run = runs.get(l);
+                        if (run.text().equals("") || run.text().equals("/n")) {
+                            continue;
+                        }
+                        if (run.text().equals("#QRCode#")) {//如果遍历到标记位置退出循环,并记录一下标记位置所在段落对象的下标
+                            paragraph.removeRun(l);//同时把正文两字移除
+                            XWPFRun xwpfRun = paragraph.insertNewRun(l);
+                            xwpfRun.addPicture( new FileInputStream(file),XWPFDocument.PICTURE_TYPE_PNG,"QRCode.png", Units.toEMU(40), Units.toEMU(40));
+                            paragraph.addRun(xwpfRun);
+                        }else if (run.text().contains("第一联") || run.text().contains("第二联") ) {
+                            if (i + 1 < paragraphs.size()) {
+                                paragraphs.get(i + 1).setPageBreak(true );
+                            }
+
+                        }
+                    }
+                }
+
+            document.write(fos);
+        }catch (IOException ex){
+            ex.printStackTrace();
+            throw new BusinessException("生成文件发生错误");
+        }  catch (InvalidFormatException e) {
+            e.printStackTrace();
+            throw new BusinessException("格式不合法");
+        }finally {
+            fos.close();
+        }
+    }
+
+    public static class Table{
+        private String[] fields;
+        List<String[]> data;
+        HashMap<String,Integer> index;
+        public Table(String[] fields,List<String[]> data){
+            this.fields = fields;
+            this.data = data;
+            this.index = new HashMap<String,Integer>();
+            for(int i=0 ; i<fields.length; i++){
+                this.index.put(fields[i],i);
+            }
+        }
+    }
+
+
+
+    public void replaceDocument(Map<String, Table> tableMap,Map<String,String> paraMap) {
+        List<IBodyElement> bodyElements = document.getBodyElements();
+        int templateBodySize = bodyElements.size();
+        int curT = 0;
+        int curP = 0;
+        for (int a = 0; a < templateBodySize; a++) {
+
+            IBodyElement body = bodyElements.get(a);
+            //  System.out.println( body.getElementType());
+            if (BodyElementType.TABLE.equals(body.getElementType())) {
+                //
+                XWPFTable table = body.getBody().getTableArray(curT);
+                List<XWPFTable> tables = body.getBody().getTables();
+                table = tables.get(curT);
+                if (table != null) {
+                    List<XWPFTableCell> tableCells = table.getRows().get(0).getTableCells();
+                    // 获取到模板表格第一行,用来判断表格类型
+                    String tableText = table.getText();
+                    if (tableText.indexOf("##{foreach") > -1) {
+                        if (tableCells.size() != 2
+                                || tableCells.get(0).getText().indexOf("##{foreach") < 0
+                                || tableCells.get(0).getText().trim().length() == 0) {
+                            throw new RuntimeException("need two cell in row.");
+                        }
+
+                        String tableType = tableCells.get(0).getText();
+                        String dataSource = tableCells.get(1).getText();
+
+                        if (!tableMap.containsKey(dataSource)) {
+                            throw new RuntimeException("need table:" + dataSource);
+                        }
+                        Table tableData = tableMap.get(dataSource);
+
+                        if ("##{foreachTable}##".equals(tableType)) {
+                            // System.out.println("循环生成表格");
+                            addTableInDocFooterByTable(table, tableData);
+
+                        } else if ("##{foreachTableRow}##".equals(tableType)) {
+                            // System.out.println("循环生成表格内部的行");
+                            addTableInDocFooterByRow(table, tableData, paraMap);
+                        }
+
+                    } else if (tableText.indexOf("{") > -1) {
+                        addTableInDocFooterByParas(table, paraMap);
+
+                    } else {
+                        // 没有查找到任何标签,该表格是一个静态表格,仅需要复制一个即可。
+                        addTableInDocFooterByOrigin(table);
+                    }
+                    curT++;
+
+                }
+            } else if (BodyElementType.PARAGRAPH.equals(body.getElementType())) {// 处理段落
+                XWPFParagraph ph = body.getBody().getParagraphArray(curP);
+                if (ph != null) {
+                    // htmlText = htmlText+readParagraphX(ph);
+                    addParagraphInDocFooter(ph, null, paraMap);
+                    curP++;
+                }
+            } else if (BodyElementType.CONTENTCONTROL.equals(body.getElementType())) {
+                IBodyElement bodyElement = bodyElements.get(curP);
+                IBody body1 = bodyElement.getBody();
+            }
+        }
+
+        for (int a = 0; a < templateBodySize; a++) {
+            document.removeBodyElement(0);
+        }
+
+    }
+
+    //
+    public void replaceDocument2(Map<String, Table> cellMap,Map<String,String> params) throws IOException, XmlException {
+        List<IBodyElement> bodyElements = document.getBodyElements();
+        int templateBodySize = bodyElements.size();
+        int curT = 0;
+        for (int a = 0; a < templateBodySize; a++) {
+
+            IBodyElement body = bodyElements.get(a);
+            //  System.out.println( body.getElementType());
+            if (BodyElementType.TABLE.equals(body.getElementType())) {
+                //
+                XWPFTable table = body.getBody().getTableArray(curT);
+                List<XWPFTable> tables = body.getBody().getTables();
+                POIXMLDocumentPart part = body.getBody().getPart();
+                table = tables.get(curT);
+                Table mainTable = cellMap.get("mainTable");
+                List<String[]> data = mainTable.data;
+                int remove = 0;
+
+                List<XWPFTableRow> rows = table.getRows();
+                for (int i = 0; i < rows.size(); i++) {
+                    XWPFTableRow row = rows.get(i);
+                    List<XWPFTableCell> tableCells = row.getTableCells();
+                    for (int j = 0; j < tableCells.size(); j++) {
+                        XWPFTableCell cell = tableCells.get(j);
+                        String text = cell.getText();
+                        if (params.get(text) != null) {
+                            cell.removeParagraph(0);
+                            cell.setText(params.get(text));
+                        }
+                        //生成表内容
+                        if ("##foreachRows##".equals(cell.getText())) {
+                            //从下面一行开始循环生成单元格
+                            XWPFTableRow infoRow = rows.get(i + 1);
+                            for (int k = 0; k < mainTable.data.size(); k++) {
+                                CTRow ctrow = CTRow.Factory.parse(infoRow.getCtRow().newInputStream());
+                                XWPFTableRow newRow = new XWPFTableRow(ctrow, table);
+                                String[] strings = data.get(k);
+                                for (int m = 0; m < strings.length; m++)
+                                {
+                                    XWPFTableCell cellSS = newRow.getTableCells().get(m);// 在新增的行上面创建cell
+                                    //cell.setText(fields.get(k));//不能使用该方法直接加内容,这样会在原内容后面追加,并且不能保证跟原字体样式一致
+                                    for (XWPFParagraph p : cellSS.getParagraphs())
+                                    {
+                                        for (XWPFRun r : p.getRuns())
+                                        {
+                                            r.setText(strings[m], 0);//要深入到原cell中的run替换内容才能保证样式一致
+                                        }
+                                    }
+                                }
+                                table.addRow(newRow, i + k);
+                            }
+                            //删除####foreachRows##这一行
+                            table.removeRow(i + mainTable.data.size());
+                            //删除type	specification	num 这一行
+                            table.removeRow(i + mainTable.data.size());
+                        }
+                    }
+                }
+
+
+            }
+        }
+
+    }
+
+    private void addTableInDocFooterByTable(XWPFTable templateTable, Table data) {
+        for (String[] row: data.data) {
+            List<XWPFTableRow> templateTableRows = templateTable.getRows();// 获取模板表格所有行
+            XWPFTable newCreateTable = document.createTable();// 创建新表格,默认一行一列
+            for (int i = 1; i < templateTableRows.size(); i++) {
+                XWPFTableRow newCreateRow = newCreateTable.createRow();
+                CopyTableRow(newCreateRow, templateTableRows.get(i));// 复制模板行文本和样式到新行
+            }
+            newCreateTable.removeRow(0);// 移除多出来的第一行
+            document.createParagraph();// 添加回车换行
+            replaceTable(newCreateTable, getMap(data.index,row));//替换标签
+        }
+    }
+
+    private HashMap getMap(HashMap<String,Integer> key,String[] row){
+        HashMap<String,String> r = new HashMap<String,String>();
+        Iterator<Entry<String, Integer>>  it =key.entrySet().iterator();
+        while(it.hasNext()){
+            Entry<String, Integer> en =it.next();
+            r.put(en.getKey(),row[en.getValue()]);
+        }
+        return r;
+    }
+    private void addTableInDocFooterByRow(XWPFTable templateTable, Table data , Map<String, String> parametersMap) {
+
+        XWPFTable newCreateTable = document.createTable();// 创建新表格,默认一行一列
+        List<XWPFTableRow> TempTableRows = templateTable.getRows();// 获取模板表格所有行
+        int tagRowsIndex = 0;// 标签行indexs
+        for (int i = 0, size = TempTableRows.size(); i < size; i++) {
+            String rowText = TempTableRows.get(i).getCell(0).getText();// 获取到表格行的第一个单元格
+            if (rowText.indexOf("##{foreachRows}##") > -1) {
+                tagRowsIndex = i;
+                break;
+            }
+        }
+
+        /* 复制模板行和标签行之前的行 */
+        for (int i = 1; i < tagRowsIndex; i++) {
+            XWPFTableRow newCreateRow = newCreateTable.createRow();
+            CopyTableRow(newCreateRow, TempTableRows.get(i));// 复制行
+            replaceTableRow(newCreateRow, parametersMap);// 处理不循环标签的替换
+        }
+
+        /* 循环生成模板行 */
+        XWPFTableRow tempRow = TempTableRows.get(tagRowsIndex + 1);// 获取到模板行
+        for (String[] row: data.data) {
+            XWPFTableRow newCreateRow = newCreateTable.createRow();
+            CopyTableRow(newCreateRow, tempRow);// 复制模板行
+            replaceTable(newCreateTable, getMap(data.index,row));//替换标签
+        }
+
+        /* 复制模板行和标签行之后的行 */
+        for (int i = tagRowsIndex + 2; i < TempTableRows.size(); i++) {
+            XWPFTableRow newCreateRow = newCreateTable.createRow();
+            CopyTableRow(newCreateRow, TempTableRows.get(i));// 复制行
+            replaceTableRow(newCreateRow, parametersMap);// 处理不循环标签的替换
+        }
+        newCreateTable.removeRow(0);// 移除多出来的第一行
+        document.createParagraph();// 添加回车换行
+
+    }
+
+    private void addTableInDocFooterByOrigin(XWPFTable templateTable
+    ) {
+        List<XWPFTableRow> templateTableRows = templateTable.getRows();// 获取模板表格所有行
+        XWPFTable newCreateTable = document.createTable();// 创建新表格,默认一行一列
+        for (int i = 0; i < templateTableRows.size(); i++) {
+            XWPFTableRow newCreateRow = newCreateTable.createRow();
+            CopyTableRow(newCreateRow, templateTableRows.get(i));// 复制模板行文本和样式到新行
+        }
+        newCreateTable.removeRow(0);// 移除多出来的第一行
+        document.createParagraph();// 添加回车换行
+    }
+
+
+    private void addTableInDocFooterByParas(XWPFTable templateTable,
+                                            Map<String, String> parametersMap) {
+        //表格不循环仅简单替换标签
+        List<XWPFTableRow> templateTableRows = templateTable.getRows();// 获取模板表格所有行
+        XWPFTable newCreateTable = document.createTable();// 创建新表格,默认一行一列
+        for (int i = 0; i < templateTableRows.size(); i++) {
+            XWPFTableRow newCreateRow = newCreateTable.createRow();
+            CopyTableRow(newCreateRow, templateTableRows.get(i));// 复制模板行文本和样式到新行
+        }
+        newCreateTable.removeRow(0);// 移除多出来的第一行
+        // document.createParagraph();// 添加回车换行
+        replaceTable(newCreateTable, parametersMap);
+    }
+
+
+
+    private void addParagraphInDocFooter(XWPFParagraph templateParagraph,
+                                         List<Map<String, String>> list, Map<String, String> parametersMap) {
+        XWPFParagraph createParagraph = document.createParagraph();
+        // 设置段落样式
+        createParagraph.getCTP().setPPr(templateParagraph.getCTP().getPPr());
+        // 移除原始内容
+        for (int pos = 0; pos < createParagraph.getRuns().size(); pos++) {
+            createParagraph.removeRun(pos);
+        }
+        // 添加Run标签
+        for (XWPFRun s : templateParagraph.getRuns()) {
+            XWPFRun targetrun = createParagraph.createRun();
+            CopyRun(targetrun, s);
+        }
+
+        replaceParagraph(createParagraph, parametersMap);
+    }
+
+    private void replaceParagraph(XWPFParagraph xWPFParagraph, Map<String, String> parametersMap) {
+        List<XWPFRun> runs = xWPFParagraph.getRuns();
+        String xWPFParagraphText = xWPFParagraph.getText();
+        String regEx = "\\{.+?\\}";
+        Pattern pattern = Pattern.compile(regEx);
+        Matcher matcher = pattern.matcher(xWPFParagraphText);//正则匹配字符串{****}
+
+        if (matcher.find()) {
+            // 查找到有标签才执行替换
+            int beginRunIndex = xWPFParagraph.searchText("{", new PositionInParagraph()).getBeginRun();// 标签开始run位置
+            int endRunIndex = xWPFParagraph.searchText("}", new PositionInParagraph()).getEndRun();// 结束标签
+            StringBuffer key = new StringBuffer();
+
+            if (beginRunIndex == endRunIndex) {
+                // {**}在一个run标签内
+                XWPFRun beginRun = runs.get(beginRunIndex);
+                String beginRunText = beginRun.text();
+
+                int beginIndex = beginRunText.indexOf("{");
+                int endIndex = beginRunText.indexOf("}");
+                int length = beginRunText.length();
+
+                if (beginIndex == 0 && endIndex == length - 1) {
+                    // 该run标签只有{**}
+                    XWPFRun insertNewRun = xWPFParagraph.insertNewRun(beginRunIndex);
+                    insertNewRun.getCTR().setRPr(beginRun.getCTR().getRPr());
+                    // 设置文本
+                    key.append(beginRunText.substring(1, endIndex));
+                    insertNewRun.setText(getValueBykey(key.toString(),parametersMap));
+                    xWPFParagraph.removeRun(beginRunIndex + 1);
+                } else {
+                    // 该run标签为**{**}** 或者 **{**} 或者{**}**,替换key后,还需要加上原始key前后的文本
+                    XWPFRun insertNewRun = xWPFParagraph.insertNewRun(beginRunIndex);
+                    insertNewRun.getCTR().setRPr(beginRun.getCTR().getRPr());
+                    // 设置文本
+                    key.append(beginRunText.substring(beginRunText.indexOf("{")+1, beginRunText.indexOf("}")));
+                    String textString=beginRunText.substring(0, beginIndex) + getValueBykey(key.toString(),parametersMap)
+                            + beginRunText.substring(endIndex + 1);
+                    insertNewRun.setText(textString);
+                    xWPFParagraph.removeRun(beginRunIndex + 1);
+                }
+
+            }else {
+                // {**}被分成多个run
+
+                //先处理起始run标签,取得第一个{key}值
+                XWPFRun beginRun = runs.get(beginRunIndex);
+                String beginRunText = beginRun.text();
+                int beginIndex = beginRunText.indexOf("{");
+                if (beginRunText.length()>1  ) {
+                    key.append(beginRunText.substring(beginIndex+1));
+                }
+                ArrayList<Integer> removeRunList = new ArrayList<>();//需要移除的run
+                //处理中间的run
+                for (int i = beginRunIndex + 1; i < endRunIndex; i++) {
+                    XWPFRun run = runs.get(i);
+                    String runText = run.text();
+                    key.append(runText);
+                    removeRunList.add(i);
+                }
+
+                // 获取endRun中的key值
+                XWPFRun endRun = runs.get(endRunIndex);
+                String endRunText = endRun.text();
+                int endIndex = endRunText.indexOf("}");
+                //run中**}或者**}**
+                if (endRunText.length()>1 && endIndex!=0) {
+                    key.append(endRunText.substring(0,endIndex));
+                }
+
+
+
+                //*******************************************************************
+                //取得key值后替换标签
+
+                //先处理开始标签
+                if (beginRunText.length()==2 ) {
+                    // run标签内文本{
+                    XWPFRun insertNewRun = xWPFParagraph.insertNewRun(beginRunIndex);
+                    insertNewRun.getCTR().setRPr(beginRun.getCTR().getRPr());
+                    // 设置文本
+                    insertNewRun.setText(getValueBykey(key.toString(),parametersMap));
+                    xWPFParagraph.removeRun(beginRunIndex + 1);//移除原始的run
+                }else {
+                    // 该run标签为**{**或者 {** ,替换key后,还需要加上原始key前的文本
+                    XWPFRun insertNewRun = xWPFParagraph.insertNewRun(beginRunIndex);
+                    insertNewRun.getCTR().setRPr(beginRun.getCTR().getRPr());
+                    // 设置文本
+                    String textString=beginRunText.substring(0,beginRunText.indexOf("{"))+getValueBykey(key.toString(),parametersMap);
+                    insertNewRun.setText(textString);
+                    xWPFParagraph.removeRun(beginRunIndex + 1);//移除原始的run
+                }
+
+                //处理结束标签
+                if (endRunText.length()==1 ) {
+                    // run标签内文本只有}
+                    XWPFRun insertNewRun = xWPFParagraph.insertNewRun(endRunIndex);
+                    insertNewRun.getCTR().setRPr(endRun.getCTR().getRPr());
+                    // 设置文本
+                    insertNewRun.setText("");
+                    xWPFParagraph.removeRun(endRunIndex + 1);//移除原始的run
+
+                }else {
+                    // 该run标签为**}**或者 }** 或者**},替换key后,还需要加上原始key后的文本
+                    XWPFRun insertNewRun = xWPFParagraph.insertNewRun(endRunIndex);
+                    insertNewRun.getCTR().setRPr(endRun.getCTR().getRPr());
+                    // 设置文本
+                    String textString=endRunText.substring(endRunText.indexOf("}")+1);
+                    insertNewRun.setText(textString);
+                    xWPFParagraph.removeRun(endRunIndex + 1);//移除原始的run
+                }
+
+                //处理中间的run标签
+                for (int i = 0; i < removeRunList.size(); i++) {
+                    XWPFRun xWPFRun = runs.get(removeRunList.get(i));//原始run
+                    XWPFRun insertNewRun = xWPFParagraph.insertNewRun(removeRunList.get(i));
+                    insertNewRun.getCTR().setRPr(xWPFRun.getCTR().getRPr());
+                    insertNewRun.setText("");
+                    xWPFParagraph.removeRun(removeRunList.get(i) + 1);//移除原始的run
+                }
+
+            }// 处理${**}被分成多个run
+
+            replaceParagraph( xWPFParagraph, parametersMap);
+
+        }//if 有标签
+
+    }
+
+
+
+
+
+
+
+
+    /**
+     * 复制表格行XWPFTableRow格式
+     *
+     * @param target
+     *            待修改格式的XWPFTableRow
+     * @param source
+     *            模板XWPFTableRow
+     */
+    private void CopyTableRow(XWPFTableRow target, XWPFTableRow source) {
+
+        int tempRowCellsize = source.getTableCells().size();// 模板行的列数
+        for (int i = 0; i < tempRowCellsize - 1; i++) {
+            target.addNewTableCell();// 为新添加的行添加与模板表格对应行行相同个数的单元格
+        }
+        // 复制样式
+        target.getCtRow().setTrPr(source.getCtRow().getTrPr());
+        // 复制单元格
+        for (int i = 0; i < target.getTableCells().size(); i++) {
+            copyTableCell(target.getCell(i), source.getCell(i));
+        }
+    }
+
+
+
+
+
+    /**
+     * 复制单元格XWPFTableCell格式
+     *
+     * @author Juveniless
+     * @date 2017年11月27日 下午3:41:02
+     * @param newTableCell
+     *            新创建的的单元格
+     * @param templateTableCell
+     *            模板单元格
+     *
+     */
+    private void copyTableCell(XWPFTableCell newTableCell, XWPFTableCell templateTableCell) {
+        // 列属性
+        newTableCell.getCTTc().setTcPr(templateTableCell.getCTTc().getTcPr());
+
+        if(templateTableCell.getText().indexOf("{noborder}")>-1){
+            CTTcBorders tblBorders = newTableCell.getCTTc().getTcPr().addNewTcBorders();
+            tblBorders.addNewLeft().setVal(STBorder.NIL);
+            tblBorders.addNewRight().setVal(STBorder.NIL);
+            tblBorders.addNewTop().setVal(STBorder.NIL);
+            newTableCell.getCTTc().getTcPr().setTcBorders(tblBorders);
+        }
+
+        // 删除目标 targetCell 所有文本段落
+        for (int pos = 0; pos < newTableCell.getParagraphs().size(); pos++) {
+            newTableCell.removeParagraph(pos);
+        }
+        // 添加新文本段落
+        for (XWPFParagraph sp : templateTableCell.getParagraphs()) {
+            XWPFParagraph targetP = newTableCell.addParagraph();
+            copyParagraph(targetP, sp);
+        }
+    }
+
+    /**
+     * 复制文本段落XWPFParagraph格式
+     *
+     * @author Juveniless
+     * @date 2017年11月27日 下午3:43:08
+     * @param newParagraph
+     *            新创建的的段落
+     * @param templateParagraph
+     *            模板段落
+     *
+     */
+    private void copyParagraph(XWPFParagraph newParagraph, XWPFParagraph templateParagraph) {
+        // 设置段落样式
+        newParagraph.getCTP().setPPr(templateParagraph.getCTP().getPPr());
+        // 添加Run标签
+        for (int pos = 0; pos < newParagraph.getRuns().size(); pos++) {
+            newParagraph.removeRun(pos);
+
+        }
+        for (XWPFRun s : templateParagraph.getRuns()) {
+            XWPFRun targetrun = newParagraph.createRun();
+            CopyRun(targetrun, s);
+        }
+
+    }
+
+    /**
+     * 复制文本节点run
+     * @author Juveniless
+     * @date 2017年11月27日 下午3:47:17
+     * @param newRun
+     *            新创建的的文本节点
+     * @param templateRun
+     *            模板文本节点
+     *
+     */
+    private void CopyRun(XWPFRun newRun, XWPFRun templateRun) {
+        newRun.getCTR().setRPr(templateRun.getCTR().getRPr());
+        // 设置文本
+        newRun.setText(templateRun.text());
+    }
+
+
+
+    private void replaceTableRow(XWPFTableRow tableRow, Map<String, String> parametersMap) {
+
+        List<XWPFTableCell> tableCells = tableRow.getTableCells();
+        for (XWPFTableCell xWPFTableCell : tableCells) {
+            List<XWPFParagraph> paragraphs = xWPFTableCell.getParagraphs();
+            for (XWPFParagraph xwpfParagraph : paragraphs) {
+
+                replaceParagraph(xwpfParagraph, parametersMap);
+            }
+        }
+
+    }
+
+
+    private void replaceTable(XWPFTable xwpfTable, Map<String, String> parametersMap){
+        List<XWPFTableRow> rows = xwpfTable.getRows();
+        for (XWPFTableRow xWPFTableRow : rows ) {
+            List<XWPFTableCell> tableCells = xWPFTableRow.getTableCells();
+            for (XWPFTableCell xWPFTableCell : tableCells ) {
+                List<XWPFParagraph> paragraphs2 = xWPFTableCell.getParagraphs();
+                for (XWPFParagraph xWPFParagraph : paragraphs2) {
+                    replaceParagraph(xWPFParagraph, parametersMap);
+                }
+            }
+        }
+
+    }
+
+    private String getValueBykey(String key, Map<String, String> map) {
+        String returnValue="";
+        if (key != null) {
+            key = key.trim();
+            try {
+                returnValue=map.get(key)!=null ? map.get(key).toString() : "";
+            } catch (Exception e) {
+
+                returnValue="";
+            }
+        }
+        // System.out.println(key+":" + returnValue);
+        return returnValue;
+    }
+
+
+
+
+
+
+
+
+}
+
diff --git a/src/main/java/com/gk/firework/Domain/Vo/AppFileVo.java b/src/main/java/com/gk/firework/Domain/Vo/AppFileVo.java
new file mode 100644
index 0000000..4f029b1
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/AppFileVo.java
@@ -0,0 +1,17 @@
+package com.gk.firework.Domain.Vo;
+
+import com.gk.firework.Domain.AppFileInfo;
+import org.springframework.web.multipart.MultipartFile;
+
+public class AppFileVo extends AppFileInfo {
+
+    private MultipartFile file;
+
+    public MultipartFile getFile() {
+        return file;
+    }
+
+    public void setFile(MultipartFile file) {
+        this.file = file;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/ApprovalVo.java b/src/main/java/com/gk/firework/Domain/Vo/ApprovalVo.java
new file mode 100644
index 0000000..c137aad
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/ApprovalVo.java
@@ -0,0 +1,28 @@
+package com.gk.firework.Domain.Vo;
+
+import com.gk.firework.Domain.Enum.ApplyStatus;
+
+import java.io.Serializable;
+
+public class ApprovalVo implements Serializable {
+
+    private ApplyStatus applyStatus;
+
+    private String applyId;
+
+    public ApplyStatus getApplyStatus() {
+        return applyStatus;
+    }
+
+    public void setApplyStatus(ApplyStatus applyStatus) {
+        this.applyStatus = applyStatus;
+    }
+
+    public String getApplyId() {
+        return applyId;
+    }
+
+    public void setApplyId(String applyId) {
+        this.applyId = applyId;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/AssessApplyAppealVo.java b/src/main/java/com/gk/firework/Domain/Vo/AssessApplyAppealVo.java
new file mode 100644
index 0000000..b615ede
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/AssessApplyAppealVo.java
@@ -0,0 +1,169 @@
+package com.gk.firework.Domain.Vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.gk.firework.Domain.Enum.AssessAppealStatus;
+import com.gk.firework.Domain.Enum.AssessPunishment;
+
+import java.io.Serializable;
+import java.util.Date;
+
+public class AssessApplyAppealVo implements Serializable {
+
+    private Long id;
+    private String code;
+    private String enterprisename;
+    private AssessPunishment punishmentmeasure;
+    //自己申诉的材料
+    private String path2;
+    //协会提交的材料
+    private String path1;
+    private String punishmentreason;
+    private boolean ispunish;
+    private Date approvetime;
+    @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
+    private Date deadline;
+    private String approvenote;
+    private boolean whetherCanAppeal;
+    private String appealcontent;
+    private AssessAppealStatus appealstatus;
+    private String appealapprover;
+    private Date appealapprovetime;
+    //7天内截止的单子是否需要提示
+    private boolean iswarn;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getEnterprisename() {
+        return enterprisename;
+    }
+
+    public void setEnterprisename(String enterprisename) {
+        this.enterprisename = enterprisename;
+    }
+
+    public AssessPunishment getPunishmentmeasure() {
+        return punishmentmeasure;
+    }
+
+    public void setPunishmentmeasure(AssessPunishment punishmentmeasure) {
+        this.punishmentmeasure = punishmentmeasure;
+    }
+
+    public String getPath2() {
+        return path2;
+    }
+
+    public void setPath2(String path2) {
+        this.path2 = path2;
+    }
+
+    public boolean isIspunish() {
+        return ispunish;
+    }
+
+    public void setIspunish(boolean ispunish) {
+        this.ispunish = ispunish;
+    }
+
+    public Date getApprovetime() {
+        return approvetime;
+    }
+
+    public void setApprovetime(Date approvetime) {
+        this.approvetime = approvetime;
+    }
+
+    public Date getDeadline() {
+        return deadline;
+    }
+
+    public void setDeadline(Date deadline) {
+        this.deadline = deadline;
+    }
+
+    public String getApprovenote() {
+        return approvenote;
+    }
+
+    public void setApprovenote(String approvenote) {
+        this.approvenote = approvenote;
+    }
+
+    public String getPunishmentreason() {
+        return punishmentreason;
+    }
+
+    public void setPunishmentreason(String punishmentreason) {
+        this.punishmentreason = punishmentreason;
+    }
+
+    public boolean isWhetherCanAppeal() {
+        return whetherCanAppeal;
+    }
+
+    public void setWhetherCanAppeal(boolean whetherCanAppeal) {
+        this.whetherCanAppeal = whetherCanAppeal;
+    }
+
+    public String getAppealcontent() {
+        return appealcontent;
+    }
+
+    public void setAppealcontent(String appealcontent) {
+        this.appealcontent = appealcontent;
+    }
+
+    public AssessAppealStatus getAppealstatus() {
+        return appealstatus;
+    }
+
+    public void setAppealstatus(AssessAppealStatus appealstatus) {
+        this.appealstatus = appealstatus;
+    }
+
+    public String getAppealapprover() {
+        return appealapprover;
+    }
+
+    public void setAppealapprover(String appealapprover) {
+        this.appealapprover = appealapprover;
+    }
+
+    public Date getAppealapprovetime() {
+        return appealapprovetime;
+    }
+
+    public void setAppealapprovetime(Date appealapprovetime) {
+        this.appealapprovetime = appealapprovetime;
+    }
+
+    public String getPath1() {
+        return path1;
+    }
+
+    public void setPath1(String path1) {
+        this.path1 = path1;
+    }
+
+    public boolean isIswarn() {
+        return iswarn;
+    }
+
+    public void setIswarn(boolean iswarn) {
+        this.iswarn = iswarn;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/CheckReportVo.java b/src/main/java/com/gk/firework/Domain/Vo/CheckReportVo.java
new file mode 100644
index 0000000..b1e794c
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/CheckReportVo.java
@@ -0,0 +1,52 @@
+package com.gk.firework.Domain.Vo;
+
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+public class CheckReportVo implements Serializable {
+
+    private String report;
+
+    private String applyperson;
+
+    private String reportcode;
+
+    private Long reportid;
+
+    public String getReport() {
+        return report;
+    }
+
+    public void setReport(String report) {
+        this.report = report;
+    }
+
+    public String getApplyperson() {
+        return applyperson;
+    }
+
+    public void setApplyperson(String applyperson) {
+        this.applyperson = applyperson;
+    }
+
+    public String getReportcode() {
+        return reportcode;
+    }
+
+    public void setReportcode(String reportcode) {
+        this.reportcode = reportcode;
+    }
+
+    public Long getReportid() {
+        return reportid;
+    }
+
+    public void setReportid(Long reportid) {
+        this.reportid = reportid;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/CityDataVo.java b/src/main/java/com/gk/firework/Domain/Vo/CityDataVo.java
new file mode 100644
index 0000000..455cee4
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/CityDataVo.java
@@ -0,0 +1,106 @@
+package com.gk.firework.Domain.Vo;
+
+import java.math.BigDecimal;
+
+/**
+ * @author : jingjy
+ * @date : 2021/5/14 16:34
+ */
+public class CityDataVo {
+    private String cityName;
+    private String dateRange;
+    private BigDecimal saleNumber;
+    private BigDecimal entryNumber;
+    private String dateRange2;
+    private BigDecimal saleNumber2;
+    private BigDecimal entryNumber2;
+
+    //销售总额 单位万元
+    private BigDecimal sales;
+    private BigDecimal sales2;
+
+    public String getCityName() {
+        return cityName;
+    }
+
+    public void setCityName(String cityName) {
+        this.cityName = cityName;
+    }
+
+    public BigDecimal getSaleNumber() {
+        return saleNumber;
+    }
+
+    public void setSaleNumber(BigDecimal saleNumber) {
+        this.saleNumber = saleNumber;
+    }
+
+    public BigDecimal getEntryNumber() {
+        return entryNumber;
+    }
+
+    public void setEntryNumber(BigDecimal entryNumber) {
+        this.entryNumber = entryNumber;
+    }
+
+    public BigDecimal getSaleNumber2() {
+        return saleNumber2;
+    }
+
+    public void setSaleNumber2(BigDecimal saleNumber2) {
+        this.saleNumber2 = saleNumber2;
+    }
+
+    public BigDecimal getEntryNumber2() {
+        return entryNumber2;
+    }
+
+    public void setEntryNumber2(BigDecimal entryNumber2) {
+        this.entryNumber2 = entryNumber2;
+    }
+
+    public String getDateRange() {
+        return dateRange;
+    }
+
+    public void setDateRange(String dateRange) {
+        this.dateRange = dateRange;
+    }
+
+    public String getDateRange2() {
+        return dateRange2;
+    }
+
+    public void setDateRange2(String dateRange2) {
+        this.dateRange2 = dateRange2;
+    }
+
+    public CityDataVo() {
+    }
+
+    public CityDataVo(String cityName, String dateRange, BigDecimal saleNumber, BigDecimal entryNumber, String dateRange2, BigDecimal saleNumber2, BigDecimal entryNumber2) {
+        this.cityName = cityName;
+        this.dateRange = dateRange;
+        this.saleNumber = saleNumber;
+        this.entryNumber = entryNumber;
+        this.dateRange2 = dateRange2;
+        this.saleNumber2 = saleNumber2;
+        this.entryNumber2 = entryNumber2;
+    }
+
+    public BigDecimal getSales() {
+        return sales;
+    }
+
+    public void setSales(BigDecimal sales) {
+        this.sales = sales;
+    }
+
+    public BigDecimal getSales2() {
+        return sales2;
+    }
+
+    public void setSales2(BigDecimal sales2) {
+        this.sales2 = sales2;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/ContractOrderVo.java b/src/main/java/com/gk/firework/Domain/Vo/ContractOrderVo.java
new file mode 100644
index 0000000..faf4aad
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/ContractOrderVo.java
@@ -0,0 +1,44 @@
+package com.gk.firework.Domain.Vo;
+
+import com.gk.firework.Domain.ContractOrderInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+@ApiModel("合同订单扩展类")
+public class ContractOrderVo extends ContractOrderInfo {
+
+    @ApiModelProperty("合同文件")
+    private MultipartFile file;
+
+    @ApiModelProperty("合同产品列表")
+    private  List<ProductVo> productInfoList;
+
+    private String productList;
+
+    public String getProductList() {
+        return productList == null ? "" : productList;
+    }
+
+    public void setProductList(String productList) {
+        this.productList = productList;
+    }
+
+    public List<ProductVo> getProductInfoList() {
+        return productInfoList;
+    }
+
+    public void setProductInfoList(List<ProductVo> productInfoList) {
+        this.productInfoList = productInfoList;
+    }
+
+    public MultipartFile getFile() {
+        return file;
+    }
+
+    public void setFile(MultipartFile file) {
+        this.file = file;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/ContractStatus.java b/src/main/java/com/gk/firework/Domain/Vo/ContractStatus.java
new file mode 100644
index 0000000..167b4ac
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/ContractStatus.java
@@ -0,0 +1,16 @@
+package com.gk.firework.Domain.Vo;
+
+public class ContractStatus {
+
+    public static final String WAIT_SUBMIT = "待提交";
+
+    public static final String WAIT_CONFIRM = "待确认";
+
+    public static final String Confirm_Product = "确认生产";
+
+    public static final String Refuse_Product = "拒绝生产";
+
+    public static final String Generated = "已生成";
+
+
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/DailySaleReport.java b/src/main/java/com/gk/firework/Domain/Vo/DailySaleReport.java
new file mode 100644
index 0000000..1a65a32
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/DailySaleReport.java
@@ -0,0 +1,80 @@
+package com.gk.firework.Domain.Vo;
+
+import java.math.BigDecimal;
+
+/**
+ * @author : jingjy
+ * @date : 2021/4/23 14:19
+ */
+public class DailySaleReport {
+    /** 流向码 **/
+    private String itemCode;
+    /** 商品名称 **/
+    private String itemName;
+    /** 销售数量 **/
+    private Integer saleNum;
+    /** 销售金额 **/
+    private BigDecimal saleAmount;
+    /** 退货数量 **/
+    private Integer returnNum;
+    /** 退货金额 **/
+    private BigDecimal returnAmount;
+    /** 营业额 **/
+    private BigDecimal turnover;
+
+    public String getItemCode() {
+        return itemCode;
+    }
+
+    public void setItemCode(String itemCode) {
+        this.itemCode = itemCode;
+    }
+
+    public String getItemName() {
+        return itemName;
+    }
+
+    public void setItemName(String itemName) {
+        this.itemName = itemName;
+    }
+
+    public Integer getSaleNum() {
+        return saleNum;
+    }
+
+    public void setSaleNum(Integer saleNum) {
+        this.saleNum = saleNum;
+    }
+
+    public BigDecimal getSaleAmount() {
+        return saleAmount;
+    }
+
+    public void setSaleAmount(BigDecimal saleAmount) {
+        this.saleAmount = saleAmount;
+    }
+
+    public Integer getReturnNum() {
+        return returnNum;
+    }
+
+    public void setReturnNum(Integer returnNum) {
+        this.returnNum = returnNum;
+    }
+
+    public BigDecimal getReturnAmount() {
+        return returnAmount;
+    }
+
+    public void setReturnAmount(BigDecimal returnAmount) {
+        this.returnAmount = returnAmount;
+    }
+
+    public BigDecimal getTurnover() {
+        return turnover;
+    }
+
+    public void setTurnover(BigDecimal turnover) {
+        this.turnover = turnover;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/DealingRangeVo.java b/src/main/java/com/gk/firework/Domain/Vo/DealingRangeVo.java
new file mode 100644
index 0000000..ae7dc33
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/DealingRangeVo.java
@@ -0,0 +1,49 @@
+package com.gk.firework.Domain.Vo;
+
+import java.util.List;
+
+/**
+ * @author : jingjy
+ * @date : 2021/5/14 8:37
+ */
+public class DealingRangeVo {
+    private Integer sn;
+
+    private Boolean checked;
+
+    private List<String> checkMore;
+
+    private String name;
+
+    public Boolean getChecked() {
+        return checked;
+    }
+
+    public void setChecked(Boolean checked) {
+        this.checked = checked;
+    }
+
+    public List<String> getCheckMore() {
+        return checkMore;
+    }
+
+    public void setCheckMore(List<String> checkMore) {
+        this.checkMore = checkMore;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Integer getSn() {
+        return sn;
+    }
+
+    public void setSn(Integer sn) {
+        this.sn = sn;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/DeliveryOrderInfoVo.java b/src/main/java/com/gk/firework/Domain/Vo/DeliveryOrderInfoVo.java
new file mode 100644
index 0000000..917964c
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/DeliveryOrderInfoVo.java
@@ -0,0 +1,18 @@
+package com.gk.firework.Domain.Vo;
+
+import com.gk.firework.Domain.DeliveryOrderInfo;
+
+import java.math.BigDecimal;
+
+public class DeliveryOrderInfoVo extends DeliveryOrderInfo {
+
+    private BigDecimal realboxnum;
+
+    public BigDecimal getRealboxnum() {
+        return realboxnum;
+    }
+
+    public void setRealboxnum(BigDecimal realboxnum) {
+        this.realboxnum = realboxnum;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/DirectionDetail.java b/src/main/java/com/gk/firework/Domain/Vo/DirectionDetail.java
new file mode 100644
index 0000000..9333e48
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/DirectionDetail.java
@@ -0,0 +1,70 @@
+package com.gk.firework.Domain.Vo;
+
+/**
+ * @author : jingjy
+ * @date : 2021/3/19 9:15
+ * 流向码解析结果接收
+ */
+public class DirectionDetail {
+
+    /** 产品条码 */
+    private String itemCode ;
+    /** 日期码*/
+    private String dateCode ;
+    /** 序列号 */
+    private String serialNo;
+    /** 箱码 */
+    private String boxNo ;
+    /** 解析之前的编码 */
+    private String originalCode;
+    /** 长度 */
+    private Integer length;
+
+    public String getItemCode() {
+        return itemCode;
+    }
+
+    public void setItemCode(String itemCode) {
+        this.itemCode = itemCode;
+    }
+
+    public String getDateCode() {
+        return dateCode;
+    }
+
+    public void setDateCode(String dateCode) {
+        this.dateCode = dateCode;
+    }
+
+    public String getSerialNo() {
+        return serialNo;
+    }
+
+    public void setSerialNo(String serialNo) {
+        this.serialNo = serialNo;
+    }
+
+    public String getBoxNo() {
+        return boxNo;
+    }
+
+    public void setBoxNo(String boxNo) {
+        this.boxNo = boxNo;
+    }
+
+    public String getOriginalCode() {
+        return originalCode;
+    }
+
+    public void setOriginalCode(String originalCode) {
+        this.originalCode = originalCode;
+    }
+
+    public Integer getLength() {
+        return length;
+    }
+
+    public void setLength(Integer length) {
+        this.length = length;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/EnterpriseDataVo.java b/src/main/java/com/gk/firework/Domain/Vo/EnterpriseDataVo.java
new file mode 100644
index 0000000..624c5a6
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/EnterpriseDataVo.java
@@ -0,0 +1,55 @@
+package com.gk.firework.Domain.Vo;
+
+import java.math.BigDecimal;
+
+/**
+ * @author : jingjy
+ * @date : 2021/5/13 19:20
+ */
+public class EnterpriseDataVo {
+    private String enterpriseName;
+    private BigDecimal saleNumber;
+    private BigDecimal entryNumber;
+    private BigDecimal deliveryNumber;
+
+    public String getEnterpriseName() {
+        return enterpriseName;
+    }
+
+    public void setEnterpriseName(String enterpriseName) {
+        this.enterpriseName = enterpriseName;
+    }
+
+    public BigDecimal getSaleNumber() {
+        return saleNumber;
+    }
+
+    public void setSaleNumber(BigDecimal saleNumber) {
+        this.saleNumber = saleNumber;
+    }
+
+    public BigDecimal getEntryNumber() {
+        return entryNumber;
+    }
+
+    public void setEntryNumber(BigDecimal entryNumber) {
+        this.entryNumber = entryNumber;
+    }
+
+    public EnterpriseDataVo() {
+    }
+
+    public EnterpriseDataVo(String enterpriseName, BigDecimal saleNumber, BigDecimal entryNumber) {
+        this.enterpriseName = enterpriseName;
+        this.saleNumber = saleNumber;
+        this.entryNumber = entryNumber;
+    }
+
+    public BigDecimal getDeliveryNumber() {
+        return deliveryNumber;
+    }
+
+    public void setDeliveryNumber(BigDecimal deliveryNumber) {
+        this.deliveryNumber = deliveryNumber;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/EnterpriseDocumentVo.java b/src/main/java/com/gk/firework/Domain/Vo/EnterpriseDocumentVo.java
new file mode 100644
index 0000000..3f6c8a4
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/EnterpriseDocumentVo.java
@@ -0,0 +1,97 @@
+package com.gk.firework.Domain.Vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.gk.firework.Domain.Enum.DocumentType;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+public class EnterpriseDocumentVo implements Serializable {
+
+    /** 主键id  id **/
+    private Long id;
+
+    /** 制度名称  name **/
+    private String name;
+    /** 备注  memo **/
+    private String memo;
+
+    /** 类型  type **/
+    private DocumentType type;
+
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    private Date settime;
+
+    private Long enterpriseid;
+
+    private List<Long> ids;
+
+    private MultipartFile[] file;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getMemo() {
+        return memo;
+    }
+
+    public void setMemo(String memo) {
+        this.memo = memo;
+    }
+
+    public DocumentType getType() {
+        return type;
+    }
+
+    public void setType(DocumentType type) {
+        this.type = type;
+    }
+
+    public List<Long> getIds() {
+        return ids;
+    }
+
+    public void setIds(List<Long> ids) {
+        this.ids = ids;
+    }
+
+    public MultipartFile[] getFile() {
+        return file;
+    }
+
+    public void setFile(MultipartFile[] file) {
+        this.file = file;
+    }
+
+    public Long getEnterpriseid() {
+        return enterpriseid;
+    }
+
+    public void setEnterpriseid(Long enterpriseid) {
+        this.enterpriseid = enterpriseid;
+    }
+
+    public Date getSettime() {
+        return settime;
+    }
+
+    public void setSettime(Date settime) {
+        this.settime = settime;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/EnterpriseExportVo.java b/src/main/java/com/gk/firework/Domain/Vo/EnterpriseExportVo.java
new file mode 100644
index 0000000..7dafb30
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/EnterpriseExportVo.java
@@ -0,0 +1,275 @@
+package com.gk.firework.Domain.Vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.gk.firework.Domain.Utils.StringUtils;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Date;
+import java.util.stream.Collectors;
+
+public class EnterpriseExportVo {
+
+    private String enterprisename;
+
+    private String enterprisenumber;
+
+    private String safetysupervision;
+
+    private String securitysupervisory;
+
+    private String level;
+
+    private String ismajorhazard;
+
+    private String validstarttime;
+
+    private String validendtime;
+
+    private String province;
+
+    private String city;
+
+    private String district;
+
+    private String street;
+
+    private String committee;
+
+    private String valid;
+
+    private String location;
+
+    private String validtime;
+
+    private String insurancecompany;
+
+    private String insureendtime;
+
+    private String insurestarttime;
+
+    private String ispaysafetyinsurance;
+
+    private String insurancecontractnumber;
+
+    private String insureamount;
+
+    private String personnumber;
+
+    private String employeenumber;
+
+
+
+
+
+    public String getEnterprisename() {
+        return enterprisename;
+    }
+
+    public void setEnterprisename(String enterprisename) {
+        this.enterprisename = enterprisename;
+    }
+
+    public String getEnterprisenumber() {
+        return enterprisenumber;
+    }
+
+    public void setEnterprisenumber(String enterprisenumber) {
+        this.enterprisenumber = enterprisenumber;
+    }
+
+    public String getSafetysupervision() {
+        return safetysupervision;
+    }
+
+    public void setSafetysupervision(String safetysupervision) {
+        this.safetysupervision = safetysupervision;
+    }
+
+    public String getSecuritysupervisory() {
+        return securitysupervisory;
+    }
+
+    public void setSecuritysupervisory(String securitysupervisory) {
+        this.securitysupervisory = securitysupervisory;
+    }
+
+    public String getLevel() {
+        return level;
+    }
+
+    public void setLevel(String level) {
+        this.level = level;
+    }
+
+    public String getIsmajorhazard() {
+        return ismajorhazard;
+    }
+
+    public void setIsmajorhazard(String ismajorhazard) {
+        this.ismajorhazard = ismajorhazard;
+    }
+
+    public String getValidstarttime() {
+        return validstarttime;
+    }
+
+    public void setValidstarttime(String validstarttime) {
+        this.validstarttime = validstarttime;
+    }
+
+    public String getValidendtime() {
+        return validendtime;
+    }
+
+    public void setValidendtime(String validendtime) {
+        this.validendtime = validendtime;
+    }
+
+    public String getProvince() {
+        return province;
+    }
+
+    public void setProvince(String province) {
+        this.province = province;
+    }
+
+    public String getCity() {
+        return city;
+    }
+
+    public void setCity(String city) {
+        this.city = city;
+    }
+
+    public String getDistrict() {
+        return district;
+    }
+
+    public void setDistrict(String district) {
+        this.district = district;
+    }
+
+    public String getStreet() {
+        return street;
+    }
+
+    public void setStreet(String street) {
+        this.street = street;
+    }
+
+    public String getCommittee() {
+        return committee;
+    }
+
+    public void setCommittee(String committee) {
+        this.committee = committee;
+    }
+
+    public String getValid() {
+        return valid;
+    }
+
+    public void setValid(String valid) {
+        this.valid = valid;
+    }
+
+    public String getLocation() {
+
+        return (StringUtils.isBlank(province)?"":province)+
+                (StringUtils.isBlank(city)?"":"-"+city)+
+                (StringUtils.isBlank(district)?"":"-"+district)+
+                (StringUtils.isBlank(street)?"":"-"+street)+
+                (StringUtils.isBlank(committee)?"":"-"+committee);
+    }
+
+    public void setLocation(String location) {
+        this.location = location;
+    }
+
+    public String getValidtime() {
+
+        if (validstarttime == null && validendtime == null) {
+            return  "";
+        }
+        if (validstarttime == null ) {
+            return validendtime + "";
+        }
+        if (validendtime == null) {
+            return validstarttime + "";
+        }
+
+        return validstarttime + " - " + validendtime;
+    }
+
+    public void setValidtime(String validtime) {
+        this.validtime = validtime;
+    }
+
+    public String getInsurancecompany() {
+        return insurancecompany;
+    }
+
+    public void setInsurancecompany(String insurancecompany) {
+        this.insurancecompany = insurancecompany;
+    }
+
+    public String getInsureendtime() {
+        return insureendtime;
+    }
+
+    public void setInsureendtime(String insureendtime) {
+        this.insureendtime = insureendtime;
+    }
+
+    public String getInsurestarttime() {
+        return insurestarttime;
+    }
+
+    public void setInsurestarttime(String insurestarttime) {
+        this.insurestarttime = insurestarttime;
+    }
+
+    public String getIspaysafetyinsurance() {
+        return ispaysafetyinsurance;
+    }
+
+    public void setIspaysafetyinsurance(String ispaysafetyinsurance) {
+        this.ispaysafetyinsurance = ispaysafetyinsurance;
+    }
+
+    public String getInsurancecontractnumber() {
+        return insurancecontractnumber;
+    }
+
+    public void setInsurancecontractnumber(String insurancecontractnumber) {
+        this.insurancecontractnumber = insurancecontractnumber;
+    }
+
+    public String getInsureamount() {
+        return insureamount;
+    }
+
+    public void setInsureamount(String insureamount) {
+        this.insureamount = insureamount;
+    }
+
+
+    public String getPersonnumber() {
+        return personnumber;
+    }
+
+    public void setPersonnumber(String personnumber) {
+        this.personnumber = personnumber;
+    }
+
+    public String getEmployeenumber() {
+        return employeenumber;
+    }
+
+    public void setEmployeenumber(String employeenumber) {
+        this.employeenumber = employeenumber;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/EnterpriseFeedVo.java b/src/main/java/com/gk/firework/Domain/Vo/EnterpriseFeedVo.java
new file mode 100644
index 0000000..014dcb6
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/EnterpriseFeedVo.java
@@ -0,0 +1,18 @@
+package com.gk.firework.Domain.Vo;
+
+import com.gk.firework.Domain.EnterpriseFeed;
+import org.springframework.web.multipart.MultipartFile;
+
+public class EnterpriseFeedVo extends EnterpriseFeed {
+
+    private MultipartFile[] file;
+
+
+    public MultipartFile[] getFile() {
+        return file;
+    }
+
+    public void setFile(MultipartFile[] file) {
+        this.file = file;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/EnterpriseLicenseVo.java b/src/main/java/com/gk/firework/Domain/Vo/EnterpriseLicenseVo.java
new file mode 100644
index 0000000..dfa734b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/EnterpriseLicenseVo.java
@@ -0,0 +1,125 @@
+package com.gk.firework.Domain.Vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.Serializable;
+import java.util.*;
+
+public class EnterpriseLicenseVo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id  id **/
+    private Long id;
+
+    /** 许可证编号  licensenumber **/
+    private String licensenumber;
+
+    /** 许可证名称  licensename **/
+    private String licensename;
+
+    /** 发证机关  authority **/
+    private String authority;
+
+    /** 许可范围  ranges **/
+    private String ranges;
+
+    /** 有效开始时间  validstarttime **/
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    private Date validstarttime;
+
+    /**   validendtime **/
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    private Date validendtime;
+
+    private List<Long> imgids;
+
+    private MultipartFile[] file;
+
+    /** 企业信息id  enterpriseid **/
+    private Long enterpriseid;
+
+
+    public String getLicensenumber() {
+        return licensenumber;
+    }
+
+    public void setLicensenumber(String licensenumber) {
+        this.licensenumber = licensenumber;
+    }
+
+    public String getLicensename() {
+        return licensename;
+    }
+
+    public void setLicensename(String licensename) {
+        this.licensename = licensename;
+    }
+
+    public String getAuthority() {
+        return authority;
+    }
+
+    public void setAuthority(String authority) {
+        this.authority = authority;
+    }
+
+    public String getRanges() {
+        return ranges;
+    }
+
+    public void setRanges(String ranges) {
+        this.ranges = ranges;
+    }
+
+    public Date getValidstarttime() {
+        return validstarttime;
+    }
+
+    public void setValidstarttime(Date validstarttime) {
+        this.validstarttime = validstarttime;
+    }
+
+    public Date getValidendtime() {
+        return validendtime;
+    }
+
+    public void setValidendtime(Date validendtime) {
+        this.validendtime = validendtime;
+    }
+
+    public Long getEnterpriseid() {
+        return enterpriseid;
+    }
+
+    public void setEnterpriseid(Long enterpriseid) {
+        this.enterpriseid = enterpriseid;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public List<Long> getImgids() {
+        return imgids;
+    }
+
+    public void setImgids(List<Long> imgids) {
+        this.imgids = imgids;
+    }
+
+    public MultipartFile[] getFile() {
+        return file;
+    }
+
+    public void setFile(MultipartFile[] file) {
+        this.file = file;
+    }
+}
+
diff --git a/src/main/java/com/gk/firework/Domain/Vo/EnterprisePersonVo.java b/src/main/java/com/gk/firework/Domain/Vo/EnterprisePersonVo.java
new file mode 100644
index 0000000..9f77446
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/EnterprisePersonVo.java
@@ -0,0 +1,155 @@
+package com.gk.firework.Domain.Vo;
+
+import com.gk.firework.Domain.Enum.PersonnelCategory;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+public class EnterprisePersonVo implements Serializable {
+
+    private Long id;
+
+    /** 姓名  name **/
+    private String name;
+
+    /** 职务  post **/
+    private String post;
+
+    /** 证书编号  number **/
+    private String number;
+
+    /** 有效开始时间  validstarttime **/
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    private Date validstarttime;
+
+    /** 有效结束时间  validendtime **/
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    private Date validendtime;
+
+    /** 备注  memo **/
+    private String memo;
+
+    /** 企业id  enterpriseid **/
+    private Long enterpriseid;
+
+    /** 有效标识  validflag **/
+    private Boolean validflag;
+
+    /** 人员类型  type **/
+    private PersonnelCategory type;
+
+    /** 其他属性  other **/
+    private Boolean isreview;
+
+    private List<Long> imgids;
+
+    private MultipartFile[] file;
+
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getPost() {
+        return post;
+    }
+
+    public void setPost(String post) {
+        this.post = post;
+    }
+
+    public String getNumber() {
+        return number;
+    }
+
+    public void setNumber(String number) {
+        this.number = number;
+    }
+
+    public Date getValidstarttime() {
+        return validstarttime;
+    }
+
+    public void setValidstarttime(Date validstarttime) {
+        this.validstarttime = validstarttime;
+    }
+
+    public Date getValidendtime() {
+        return validendtime;
+    }
+
+    public void setValidendtime(Date validendtime) {
+        this.validendtime = validendtime;
+    }
+
+    public String getMemo() {
+        return memo;
+    }
+
+    public void setMemo(String memo) {
+        this.memo = memo;
+    }
+
+    public Long getEnterpriseid() {
+        return enterpriseid;
+    }
+
+    public void setEnterpriseid(Long enterpriseid) {
+        this.enterpriseid = enterpriseid;
+    }
+
+    public Boolean getValidflag() {
+        return validflag;
+    }
+
+    public void setValidflag(Boolean validflag) {
+        this.validflag = validflag;
+    }
+
+    public PersonnelCategory getType() {
+        return type;
+    }
+
+    public void setType(PersonnelCategory type) {
+        this.type = type;
+    }
+
+    public Boolean getIsreview() {
+        return isreview;
+    }
+
+    public void setIsreview(Boolean isreview) {
+        this.isreview = isreview;
+    }
+
+    public List<Long> getImgids() {
+        return imgids;
+    }
+
+    public void setImgids(List<Long> imgids) {
+        this.imgids = imgids;
+    }
+
+    public MultipartFile[] getFile() {
+        return file;
+    }
+
+    public void setFile(MultipartFile[] file) {
+        this.file = file;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/EnterpriseStandardizationVo.java b/src/main/java/com/gk/firework/Domain/Vo/EnterpriseStandardizationVo.java
new file mode 100644
index 0000000..8b05ce6
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/EnterpriseStandardizationVo.java
@@ -0,0 +1,137 @@
+package com.gk.firework.Domain.Vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+public class EnterpriseStandardizationVo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id  id **/
+    private Long id;
+
+    /** 标准化级别  level **/
+    private String level;
+
+    /** 证书编号  licensenumber **/
+    private String licensenumber;
+
+    /** 评审单位  reviewunit **/
+    private String reviewunit;
+
+    /** 发牌单位  licensingunit **/
+    private String licensingunit;
+
+    /** 考核得分  score **/
+    private BigDecimal score;
+
+    /** 有效开始时间  validstarttime **/
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    private Date validstarttime;
+
+    /** 有效结束时间  validendtime **/
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    private Date validendtime;
+
+    /** 企业id  enterpriseid **/
+    private Long enterpriseid;
+
+    //删除的资源ids
+    private List<Long> imgids;
+
+    private MultipartFile[] file;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getLevel() {
+        return level;
+    }
+
+    public void setLevel(String level) {
+        this.level = level;
+    }
+
+    public String getLicensenumber() {
+        return licensenumber;
+    }
+
+    public void setLicensenumber(String licensenumber) {
+        this.licensenumber = licensenumber;
+    }
+
+    public String getReviewunit() {
+        return reviewunit;
+    }
+
+    public void setReviewunit(String reviewunit) {
+        this.reviewunit = reviewunit;
+    }
+
+    public String getLicensingunit() {
+        return licensingunit;
+    }
+
+    public void setLicensingunit(String licensingunit) {
+        this.licensingunit = licensingunit;
+    }
+
+    public BigDecimal getScore() {
+        return score;
+    }
+
+    public void setScore(BigDecimal score) {
+        this.score = score;
+    }
+
+    public Date getValidstarttime() {
+        return validstarttime;
+    }
+
+    public void setValidstarttime(Date validstarttime) {
+        this.validstarttime = validstarttime;
+    }
+
+    public Date getValidendtime() {
+        return validendtime;
+    }
+
+    public void setValidendtime(Date validendtime) {
+        this.validendtime = validendtime;
+    }
+
+    public Long getEnterpriseid() {
+        return enterpriseid;
+    }
+
+    public void setEnterpriseid(Long enterpriseid) {
+        this.enterpriseid = enterpriseid;
+    }
+
+    public List<Long> getImgids() {
+        return imgids;
+    }
+
+    public void setImgids(List<Long> imgids) {
+        this.imgids = imgids;
+    }
+
+    public MultipartFile[] getFile() {
+        return file;
+    }
+
+    public void setFile(MultipartFile[] file) {
+        this.file = file;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/EnterpriseVo.java b/src/main/java/com/gk/firework/Domain/Vo/EnterpriseVo.java
new file mode 100644
index 0000000..c21a686
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/EnterpriseVo.java
@@ -0,0 +1,123 @@
+package com.gk.firework.Domain.Vo;
+
+import com.gk.firework.Domain.Enterprise;
+import com.gk.firework.Domain.PatrolOrderInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.List;
+
+@ApiModel("企业信息扩展类")
+public class EnterpriseVo {
+    @ApiModelProperty("id")
+    private Long id;
+
+    @ApiModelProperty("安全监管分类")
+    private String safetysupervision;
+
+    /** 单位编号  enterprisenumber **/
+    @ApiModelProperty("单位编号")
+    private String enterprisenumber;
+
+    @ApiModelProperty("企业名称")
+    private String enterprisename;
+
+    @ApiModelProperty("单位办公地址")
+    private String officeaddress;
+
+    @ApiModelProperty("办公电话")
+    private String officephone;
+
+    @ApiModelProperty("治安主管单位")
+    private String securitysupervisory;
+
+    @ApiModelProperty("主要负责人")
+    private String mainperson;
+
+    @ApiModelProperty("安全员")
+    private String safety;
+
+    @ApiModelProperty("安全巡检列表")
+    private List<PatrolOrderVo> patrolOrderVos;
+
+    public String getSafety() {
+        return safety;
+    }
+
+    public void setSafety(String safety) {
+        this.safety = safety;
+    }
+
+    public String getMainperson() {
+        return mainperson;
+    }
+
+    public void setMainperson(String mainperson) {
+        this.mainperson = mainperson;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getSafetysupervision() {
+        return safetysupervision;
+    }
+
+    public void setSafetysupervision(String safetysupervision) {
+        this.safetysupervision = safetysupervision;
+    }
+
+    public String getEnterprisenumber() {
+        return enterprisenumber;
+    }
+
+    public void setEnterprisenumber(String enterprisenumber) {
+        this.enterprisenumber = enterprisenumber;
+    }
+
+    public String getEnterprisename() {
+        return enterprisename;
+    }
+
+    public void setEnterprisename(String enterprisename) {
+        this.enterprisename = enterprisename;
+    }
+
+    public String getOfficeaddress() {
+        return officeaddress;
+    }
+
+    public void setOfficeaddress(String officeaddress) {
+        this.officeaddress = officeaddress;
+    }
+
+    public String getOfficephone() {
+        return officephone;
+    }
+
+    public void setOfficephone(String officephone) {
+        this.officephone = officephone;
+    }
+
+    public String getSecuritysupervisory() {
+        return securitysupervisory;
+    }
+
+    public void setSecuritysupervisory(String securitysupervisory) {
+        this.securitysupervisory = securitysupervisory;
+    }
+
+
+    public List<PatrolOrderVo> getPatrolOrderVos() {
+        return patrolOrderVos;
+    }
+
+    public void setPatrolOrderVos(List<PatrolOrderVo> patrolOrderVos) {
+        this.patrolOrderVos = patrolOrderVos;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/EnterpriseWarehouseVo.java b/src/main/java/com/gk/firework/Domain/Vo/EnterpriseWarehouseVo.java
new file mode 100644
index 0000000..4aed619
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/EnterpriseWarehouseVo.java
@@ -0,0 +1,139 @@
+package com.gk.firework.Domain.Vo;
+
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+public class EnterpriseWarehouseVo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /** 主键id  id **/
+    private Long id;
+
+    /** 栋号  bulidingnumber **/
+    private String bulidingnumber;
+
+    /** 危险等级  dangerlevel **/
+    private String dangerlevel;
+
+    /** 面积(m2)  area **/
+    private BigDecimal area;
+
+    /** 限制作业人数  limits **/
+    private Integer limits;
+
+    /** 安全责任人  safetyperson **/
+    private String safetyperson;
+
+    private Integer holdinventory;
+
+    private BigDecimal medicinelimits;
+
+    private String safetypersonphone;
+
+    /** 企业id  enterpriseid **/
+    private Long enterpriseid;
+
+    private List<Long> imgids;
+
+    private MultipartFile[] file;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getBulidingnumber() {
+        return bulidingnumber;
+    }
+
+    public void setBulidingnumber(String bulidingnumber) {
+        this.bulidingnumber = bulidingnumber;
+    }
+
+    public String getDangerlevel() {
+        return dangerlevel;
+    }
+
+    public void setDangerlevel(String dangerlevel) {
+        this.dangerlevel = dangerlevel;
+    }
+
+    public BigDecimal getArea() {
+        return area;
+    }
+
+    public void setArea(BigDecimal area) {
+        this.area = area;
+    }
+
+    public Integer getLimits() {
+        return limits;
+    }
+
+    public void setLimits(Integer limits) {
+        this.limits = limits;
+    }
+
+    public String getSafetyperson() {
+        return safetyperson;
+    }
+
+    public void setSafetyperson(String safetyperson) {
+        this.safetyperson = safetyperson;
+    }
+
+    public Long getEnterpriseid() {
+        return enterpriseid;
+    }
+
+    public void setEnterpriseid(Long enterpriseid) {
+        this.enterpriseid = enterpriseid;
+    }
+
+    public List<Long> getImgids() {
+        return imgids;
+    }
+
+    public void setImgids(List<Long> imgids) {
+        this.imgids = imgids;
+    }
+
+    public MultipartFile[] getFile() {
+        return file;
+    }
+
+    public void setFile(MultipartFile[] file) {
+        this.file = file;
+    }
+
+    public Integer getHoldinventory() {
+        return holdinventory;
+    }
+
+    public void setHoldinventory(Integer holdinventory) {
+        this.holdinventory = holdinventory;
+    }
+
+    public BigDecimal getMedicinelimits() {
+        return medicinelimits;
+    }
+
+    public void setMedicinelimits(BigDecimal medicinelimits) {
+        this.medicinelimits = medicinelimits;
+    }
+
+    public String getSafetypersonphone() {
+        return safetypersonphone;
+    }
+
+    public void setSafetypersonphone(String safetypersonphone) {
+        this.safetypersonphone = safetypersonphone;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/EntryOrderInfoVo.java b/src/main/java/com/gk/firework/Domain/Vo/EntryOrderInfoVo.java
new file mode 100644
index 0000000..50ac513
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/EntryOrderInfoVo.java
@@ -0,0 +1,20 @@
+package com.gk.firework.Domain.Vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.gk.firework.Domain.EntryOrderInfo;
+
+import java.math.BigDecimal;
+
+public class EntryOrderInfoVo extends EntryOrderInfo {
+
+    /**  入库箱数(包含不同产品)**/
+    private BigDecimal boxnum;
+
+    public BigDecimal getBoxnum() {
+        return boxnum;
+    }
+
+    public void setBoxnum(BigDecimal boxnum) {
+        this.boxnum = boxnum;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/EntryUtils.java b/src/main/java/com/gk/firework/Domain/Vo/EntryUtils.java
new file mode 100644
index 0000000..ffacad9
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/EntryUtils.java
@@ -0,0 +1,22 @@
+package com.gk.firework.Domain.Vo;
+
+import com.gk.firework.Domain.EntryOrderInfo;
+import com.gk.firework.Domain.UserInfo;
+
+import java.util.Date;
+
+/**
+ * @author : jingjy
+ * @date : 2021/3/29 15:02
+ */
+public class EntryUtils {
+
+    /** 一般入库 */
+    public static final String RK_ENTRY = "1";
+
+    /** 退货入库 */
+    public static final String TH_ENTRY = "2";
+
+
+
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/FireworkDeal.java b/src/main/java/com/gk/firework/Domain/Vo/FireworkDeal.java
new file mode 100644
index 0000000..ccf3e3c
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/FireworkDeal.java
@@ -0,0 +1,288 @@
+package com.gk.firework.Domain.Vo;
+
+import com.gk.firework.Domain.SaleOrderInfo;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.BeanUtils;
+import com.gk.firework.Domain.Utils.StringUtils;
+
+import java.math.BigDecimal;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+import static com.gk.firework.Domain.Vo.EntryUtils.RK_ENTRY;
+import static com.gk.firework.Domain.Vo.EntryUtils.TH_ENTRY;
+
+/**
+ * @author : jingjy
+ * @date : 2021/3/19 8:48
+ * 公共处理方法
+ */
+public class FireworkDeal {
+    public static final int DIRECTION_ITEM = 10;
+    public static final int DIRECTION_INSIDE = 19;
+    public static final int DIRECTION_OUTSIDE = 22;
+    private static final String RETAIL_ORDER = "1";
+    private static final String GROUP_ORDER = "2";
+    private static final String NORMAL_DELIVERY = "1";
+    public static final String OTHER_DELIVERY = "2";
+    public static final String MODULE_ENTRY = "入库";
+    public static final String MODULE_DELIVERY = "出库";
+    private static final String MODULE_SALE = "销售";
+
+
+    public static DirectionDetail dealDirectionCode(String direction){
+
+        DirectionDetail directionDetail = new DirectionDetail();
+
+        if (StringUtils.isBlank(direction)){
+            return directionDetail;
+        }
+        int length = direction.length();
+        if (length != DIRECTION_INSIDE && length != DIRECTION_OUTSIDE ){
+            return directionDetail;
+        }
+
+        directionDetail.setOriginalCode(direction);
+        directionDetail.setLength(length);
+        String itemCode = direction.substring(0,10);
+        String dateCode = direction.substring(10,14);
+        String serialNo = direction.substring(14,19);
+        if (length == DIRECTION_OUTSIDE){
+            String boxNo = direction.substring(19,22);
+            directionDetail.setBoxNo(boxNo);
+        }
+
+        directionDetail.setItemCode(itemCode);
+        directionDetail.setDateCode(dateCode);
+        directionDetail.setSerialNo(serialNo);
+
+        return directionDetail;
+    }
+
+    public static boolean is22Characters(String direction){
+        return !StringUtils.isBlank(direction) && direction.length() == 22;
+    }
+
+    public static boolean is19Characters(String direction){
+        return !StringUtils.isBlank(direction) && direction.length() == 19;
+    }
+
+    /**
+     * 判断字符串是否流向码
+     * @param direction 流向码
+     * @return true:不是流向码
+     */
+    public static boolean isNotDirectionCode(String direction){
+        return !is19Characters(direction) && !is22Characters(direction);
+    }
+
+    /**
+     * 通过22位流向码获取一批19位流向码
+     * @param dire 流向码
+     * @param detailFirst 首个流向码详情
+     * @param detailLast  尾个流向码详情
+     * @param productVos  获取的一批19位码详情
+     * @param productVo   产品详情
+     */
+    public static void getProductVos(String dire, DirectionDetail detailFirst, DirectionDetail detailLast, List<ProductVo> productVos, ProductVo productVo) {
+        for (int i = Integer.parseInt(detailFirst.getSerialNo());i < Integer.parseInt(detailLast.getSerialNo())+Integer.parseInt(detailLast.getBoxNo());i++){
+            ProductVo productVoCopy = BeanUtils.copy(productVo, ProductVo.class);
+            productVoCopy.setDirectionCode(dire.substring(0, 14) + String.format("%05d", i));
+            productVos.add(productVoCopy);
+        }
+    }
+
+    public static Map<String,List<ProductCodeVo>> getProductCodeVoList(ProductCodeVo productCodeVo) {
+        List<ProductCodeVo> productCodeVoList = new ArrayList<>();
+        List<ProductCodeVo> printCodeVoList = new ArrayList<>();
+        DirectionDetail detailDetail = dealDirectionCode(productCodeVo.getOriginalcode());
+        for (int i = Integer.parseInt(detailDetail.getSerialNo());i < Integer.parseInt(detailDetail.getSerialNo())+Integer.parseInt(detailDetail.getBoxNo());i++){
+            ProductCodeVo productVoCopy = BeanUtils.copy(productCodeVo, ProductCodeVo.class);
+            productVoCopy.setItemcode(productCodeVo.getOriginalcode().substring(0, 14) + String.format("%05d", i));
+            productCodeVoList.add(productVoCopy);
+        }
+
+        ProductCodeVo productVoCopy = new ProductCodeVo();
+        printCodeVoList.addAll(productCodeVoList);
+        if (productCodeVoList.size() > 0 && productCodeVoList.size() % 2 == 0) {
+            //2个空行
+            printCodeVoList.add(productVoCopy);
+            printCodeVoList.add(productVoCopy);
+        } else if (productCodeVoList.size() > 0 && productCodeVoList.size() % 2 == 1) {
+            //3个空行
+            printCodeVoList.add(productVoCopy);
+            printCodeVoList.add(productVoCopy);
+            printCodeVoList.add(productVoCopy);
+        }
+
+        productCodeVoList.add(productVoCopy);
+
+
+        HashMap<String,List<ProductCodeVo>> result = new HashMap<>();
+        result.put("productCodeVoList", productCodeVoList);
+        result.put("printCodeVoList", printCodeVoList);
+        return result;
+    }
+
+    public static List<ProductCodeVo> getBatchProductCodeList(ProductCodeVo productCodeVo,Integer needBlank) {
+        List<ProductCodeVo> productCodeVoList = new ArrayList<>();
+        List<ProductCodeVo> printCodeVoList = new ArrayList<>();
+        DirectionDetail detailDetail = dealDirectionCode(productCodeVo.getOriginalcode());
+        for (int i = Integer.parseInt(detailDetail.getSerialNo());i < Integer.parseInt(detailDetail.getSerialNo())+Integer.parseInt(detailDetail.getBoxNo());i++){
+            ProductCodeVo productVoCopy = BeanUtils.copy(productCodeVo, ProductCodeVo.class);
+            productVoCopy.setItemcode(productCodeVo.getOriginalcode().substring(0, 14) + String.format("%05d", i));
+            productCodeVoList.add(productVoCopy);
+        }
+
+        ProductCodeVo productVoCopy = new ProductCodeVo();
+        printCodeVoList.addAll(productCodeVoList);
+
+        if (productCodeVoList.size() > 0 && productCodeVoList.size() % 2 == 0 && needBlank == 1) {
+            //2个空行
+            printCodeVoList.add(productVoCopy);
+            printCodeVoList.add(productVoCopy);
+        } else if (productCodeVoList.size() > 0 && productCodeVoList.size() % 2 == 1) {
+            //1个空行
+            printCodeVoList.add(productVoCopy);
+        }
+
+        productCodeVoList.add(productVoCopy);
+
+        return printCodeVoList;
+    }
+
+    public static void setProductVosAttribute(ProductVo productVo){
+        if (productVo != null){
+            DirectionDetail directionDetail = dealDirectionCode(productVo.getDirectionCode());
+            productVo.setItemCode(directionDetail.getItemCode());
+            productVo.setBoxNo(directionDetail.getBoxNo());
+            productVo.setSerialNo(directionDetail.getSerialNo());
+            productVo.setDateCode(directionDetail.getDateCode());
+        }
+    }
+
+    /**
+     * 生成OrderCode
+     */
+    /*public static String generateOrderCode(String module, String type, Date date){
+        DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
+        String orderCode = dateFormat.format(date);
+        orderCode += (int)(Math.random()*1000);
+        switch (module) {
+            case MODULE_ENTRY:
+                if (type.equals(RK_ENTRY)) {
+                    orderCode = "RK-" + orderCode;
+                } else if (type.equals(TH_ENTRY)) {
+                    orderCode = "TH-" + orderCode;
+                }
+                break;
+            case MODULE_DELIVERY:
+                if (type.equals(NORMAL_DELIVERY)) {
+                    orderCode = "ND-" + orderCode;
+                } else {
+                    orderCode = "OD-" + orderCode;
+                }
+                break;
+            case MODULE_SALE:
+                if (type.equals(RETAIL_ORDER)) {
+                    orderCode = "RO-" + orderCode;
+                } else if (type.equals(GROUP_ORDER)) {
+                    orderCode = "GO-" + orderCode;
+                }
+                break;
+            default:
+        }
+
+        return orderCode;
+    }*/
+
+    /**
+     * 身份证中间数字加密
+     * @param idCardNum 身份证号
+     * @return 加密后的身份证号
+     */
+    public static String hideIdCardNum(String idCardNum){
+        if (StringUtils.isBlank(idCardNum)){
+            return idCardNum;
+        }
+        String begin = idCardNum.substring(0,6);
+        String end = idCardNum.substring(idCardNum.length()-6);
+        String mid = "******";
+        return begin+mid+end;
+    }
+
+    /**
+     * 根据单个含药量,返回一位编码
+     * 0	x<1
+     * 1	1≤x<2
+     * 2	2≤x<3
+     * 3	3≤x<4
+     * 4	4≤x<5
+     * 5	5≤x<6
+     * 6	6≤x<7
+     * 7	7≤x<8
+     * 8	8≤x<9
+     * 9	9≤x<10
+     * A	10≤x<20
+     * B	20≤x<30
+     * C	30≤x<40
+     * D	40≤x≤50
+     * E	50<x<100
+     * F	100≤x<200
+     * G	200≤x<500
+     * H	500≤x<1000
+     * I	定义中不含I
+     * J	1000≤x≤1200
+     * K	1200<x≤3000
+     * L	3000<x≤8000
+     */
+    public static String getBitCode(float x){
+
+        String bitCode = "";
+        if (x < 1){
+            bitCode = "0";
+        }else if (1<=x && x<2){
+            bitCode = "1";
+        }else if (x>=2 && x<3){
+            bitCode = "2";
+        }else if (x>=3 && x<4){
+            bitCode = "3";
+        }else if (x>=4 && x<5){
+            bitCode = "4";
+        }else if (x>=5 && x<6){
+            bitCode = "5";
+        }else if (x>=6 && x<7){
+            bitCode = "6";
+        }else if (x>=7 && x<8){
+            bitCode = "7";
+        }else if (x>=8 && x<9){
+            bitCode = "8";
+        }else if (x>=9 && x<10){
+            bitCode = "9";
+        }else if (x>=10 && x<20){
+            bitCode = "A";
+        }else if (x>=20 && x<30){
+            bitCode = "B";
+        }else if (x>=30 && x<40){
+            bitCode = "C";
+        }else if (x>=40 && x<=50){
+            bitCode = "D";
+        }else if (x>50 && x<100){
+            bitCode = "E";
+        }else if (x>=100 && x<200){
+            bitCode = "F";
+        }else if (x>=200 && x<500){
+            bitCode = "G";
+        }else if (x>=500 && x<1000){
+            bitCode = "H";
+        }else if (x>=1000 && x<=1200){
+            bitCode = "J";
+        }else if (x>1200 && x<=3000){
+            bitCode = "K";
+        }else if (x>3000 && x<=8000){
+            bitCode = "L";
+        }
+        return bitCode;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/GenerateCode.java b/src/main/java/com/gk/firework/Domain/Vo/GenerateCode.java
new file mode 100644
index 0000000..576ee73
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/GenerateCode.java
@@ -0,0 +1,45 @@
+package com.gk.firework.Domain.Vo;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Calendar;
+
+public class GenerateCode {
+
+    public static String generateProduct(){
+        String code = "";
+        Calendar calendar = Calendar.getInstance();
+        String year = String.valueOf(calendar.get(Calendar.YEAR));
+        int month = calendar.get(Calendar.MONTH)+1;
+        int day = calendar.get(Calendar.DATE);
+        String two = year.substring(year.length()-2);
+        String four = changeMd(month,day);
+        code = two + four;
+        return code;
+    }
+
+    private static String changeMd(int month, int day) {
+        String three = "";
+        String four = "";
+
+        if (month < 10){
+            three = String.valueOf(month);
+        }else {
+            three = String.valueOf(ConvetInt2Char(month - 10));
+        }
+
+        if (day < 10){
+            four = String.valueOf(day);
+        }else {
+            four = String.valueOf(ConvetInt2Char(day - 10));
+        }
+
+        return three + four;
+    }
+
+    private static char ConvetInt2Char(int i){
+        return (char)(i + 'A');
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/HelpDocVo.java b/src/main/java/com/gk/firework/Domain/Vo/HelpDocVo.java
new file mode 100644
index 0000000..5b45ddc
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/HelpDocVo.java
@@ -0,0 +1,20 @@
+package com.gk.firework.Domain.Vo;
+
+import com.gk.firework.Domain.HelpDocInfo;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * @author : jingjy
+ * @date : 2021/6/16 13:53
+ */
+public class HelpDocVo extends HelpDocInfo {
+    private MultipartFile file;
+
+    public MultipartFile getFile() {
+        return file;
+    }
+
+    public void setFile(MultipartFile file) {
+        this.file = file;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/HiddenDangerTableRow.java b/src/main/java/com/gk/firework/Domain/Vo/HiddenDangerTableRow.java
new file mode 100644
index 0000000..402a3f4
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/HiddenDangerTableRow.java
@@ -0,0 +1,292 @@
+package com.gk.firework.Domain.Vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.Serializable;
+import java.util.Date;
+
+public class HiddenDangerTableRow implements Serializable {
+
+
+    private String parentmenuid;
+
+    private String checkcontent;
+
+    private String checktypeid;
+
+    private String checkcriteria;
+
+    private String basis;
+
+    private String checktype;
+
+    private String checkresult1;
+
+    private Long result1;
+
+    private boolean qualified;
+
+    private String checkresult0;
+
+    private Long result0;
+
+    private boolean unqualified;
+
+    private Unqualified answer = new Unqualified();
+
+
+    /**
+     * @Description: 不合格|合格对象
+     */
+    public static class Unqualified {
+
+        private Long id;
+
+        /**
+         * 自检结果id  resultid
+         **/
+        private Long resultid;
+
+        /**
+         * 发现日期  findtime
+         **/
+        private Date findtime;
+
+        /**
+         * 隐患级别(1一般,2重大)  level
+         **/
+        private Integer level;
+
+        /**
+         * 隐患描述(备用)  memo
+         **/
+        private String memo;
+
+        /**
+         * 整改情况(1正在整改,2整改到位)  rectifystatus
+         **/
+        private Integer rectifystatus;
+
+        /**
+         * 整改期限  rectifydeadline
+         **/
+        @JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd")
+        private Date rectifydeadline;
+
+        /**
+         * 整改完成时间  rectifycompletedate
+         **/
+        @JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd")
+        private Date rectifycompletedate;
+
+        /**
+         * 整改措施(1立即整改,2限期整改,3停产停业整顿 )  rectifymeasure
+         **/
+        private Integer rectifymeasure;
+
+        /**
+         * 整改负责人  rectifyprincipal
+         **/
+        private String rectifyprincipal;
+
+
+        private String url;
+
+        public Long getId() {
+            return id;
+        }
+
+        public void setId(Long id) {
+            this.id = id;
+        }
+
+        public String getUrl() {
+            return url;
+        }
+
+        public void setUrl(String url) {
+            this.url = url;
+        }
+
+        public Long getResultid() {
+            return resultid;
+        }
+
+        public void setResultid(Long resultid) {
+            this.resultid = resultid;
+        }
+
+        public Date getFindtime() {
+            return findtime;
+        }
+
+        public void setFindtime(Date findtime) {
+            this.findtime = findtime;
+        }
+
+        public Integer getLevel() {
+            return level;
+        }
+
+        public void setLevel(Integer level) {
+            this.level = level;
+        }
+
+        public String getMemo() {
+            return memo;
+        }
+
+        public void setMemo(String memo) {
+            this.memo = memo;
+        }
+
+        public Integer getRectifystatus() {
+            return rectifystatus;
+        }
+
+        public void setRectifystatus(Integer rectifystatus) {
+            this.rectifystatus = rectifystatus;
+        }
+
+        public Date getRectifydeadline() {
+            return rectifydeadline;
+        }
+
+        public void setRectifydeadline(Date rectifydeadline) {
+            this.rectifydeadline = rectifydeadline;
+        }
+
+        public Date getRectifycompletedate() {
+            return rectifycompletedate;
+        }
+
+        public void setRectifycompletedate(Date rectifycompletedate) {
+            this.rectifycompletedate = rectifycompletedate;
+        }
+
+        public Integer getRectifymeasure() {
+            return rectifymeasure;
+        }
+
+        public void setRectifymeasure(Integer rectifymeasure) {
+            this.rectifymeasure = rectifymeasure;
+        }
+
+        public String getRectifyprincipal() {
+            return rectifyprincipal;
+        }
+
+        public void setRectifyprincipal(String rectifyprincipal) {
+            this.rectifyprincipal = rectifyprincipal;
+        }
+
+
+    }
+
+    public String getCheckcontent() {
+        return checkcontent;
+    }
+
+    public void setCheckcontent(String checkcontent) {
+        this.checkcontent = checkcontent;
+    }
+
+    public String getCheckcriteria() {
+        return checkcriteria;
+    }
+
+    public void setCheckcriteria(String checkcriteria) {
+        this.checkcriteria = checkcriteria;
+    }
+
+    public String getBasis() {
+        return basis;
+    }
+
+    public void setBasis(String basis) {
+        this.basis = basis;
+    }
+
+    public String getChecktype() {
+        return checktype;
+    }
+
+    public void setChecktype(String checktype) {
+        this.checktype = checktype;
+    }
+
+    public String getCheckresult1() {
+        return checkresult1;
+    }
+
+    public void setCheckresult1(String checkresult1) {
+        this.checkresult1 = checkresult1;
+    }
+
+    public String getCheckresult0() {
+        return checkresult0;
+    }
+
+    public void setCheckresult0(String checkresult0) {
+        this.checkresult0 = checkresult0;
+    }
+
+    public boolean isQualified() {
+        return qualified;
+    }
+
+    public void setQualified(boolean qualified) {
+        this.qualified = qualified;
+    }
+
+    public boolean isUnqualified() {
+        return unqualified;
+    }
+
+    public void setUnqualified(boolean unqualified) {
+        this.unqualified = unqualified;
+    }
+
+    public Long getResult1() {
+        return result1;
+    }
+
+    public void setResult1(Long result1) {
+        this.result1 = result1;
+    }
+
+    public Long getResult0() {
+        return result0;
+    }
+
+    public void setResult0(Long result0) {
+        this.result0 = result0;
+    }
+
+    public Unqualified getAnswer() {
+        return answer;
+    }
+
+    public void setAnswer(Unqualified answer) {
+        this.answer = answer;
+    }
+
+    public String getParentmenuid() {
+        return parentmenuid;
+    }
+
+    public void setParentmenuid(String parentmenuid) {
+        this.parentmenuid = parentmenuid;
+    }
+
+
+    public String getChecktypeid() {
+        return checktypeid;
+    }
+
+    public void setChecktypeid(String checktypeid) {
+        this.checktypeid = checktypeid;
+    }
+}
+
diff --git a/src/main/java/com/gk/firework/Domain/Vo/LicenseVo.java b/src/main/java/com/gk/firework/Domain/Vo/LicenseVo.java
new file mode 100644
index 0000000..1f25208
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/LicenseVo.java
@@ -0,0 +1,49 @@
+package com.gk.firework.Domain.Vo;
+
+import com.gk.firework.Domain.LicenseInfo;
+
+/**
+ * @author : jingjy
+ * @date : 2021/5/13 8:27
+ */
+public class LicenseVo extends LicenseInfo {
+    private String licenseStorage;
+
+    private String dealingRangeStr;
+
+    private String enterprisenumber;
+
+    private String issuingcode;
+
+    public String getLicenseStorage() {
+        return licenseStorage;
+    }
+
+    public void setLicenseStorage(String licenseStorage) {
+        this.licenseStorage = licenseStorage;
+    }
+
+    public String getDealingRangeStr() {
+        return dealingRangeStr;
+    }
+
+    public void setDealingRangeStr(String dealingRangeStr) {
+        this.dealingRangeStr = dealingRangeStr;
+    }
+
+    public String getEnterprisenumber() {
+        return enterprisenumber;
+    }
+
+    public void setEnterprisenumber(String enterprisenumber) {
+        this.enterprisenumber = enterprisenumber;
+    }
+
+    public String getIssuingcode() {
+        return issuingcode;
+    }
+
+    public void setIssuingcode(String issuingcode) {
+        this.issuingcode = issuingcode;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/Menu.java b/src/main/java/com/gk/firework/Domain/Vo/Menu.java
new file mode 100644
index 0000000..0871eff
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/Menu.java
@@ -0,0 +1,18 @@
+package com.gk.firework.Domain.Vo;
+
+import com.gk.firework.Domain.PermissionInfo;
+
+import java.util.List;
+
+public class Menu extends PermissionInfo {
+
+    private List<Menu> children;
+
+    public List<Menu> getChildren() {
+        return children;
+    }
+
+    public void setChildren(List<Menu> children) {
+        this.children = children;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/NoEntryVo.java b/src/main/java/com/gk/firework/Domain/Vo/NoEntryVo.java
new file mode 100644
index 0000000..4f6291d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/NoEntryVo.java
@@ -0,0 +1,37 @@
+package com.gk.firework.Domain.Vo;
+
+/**
+ * @author : jingjy
+ * @date : 2021/6/16 16:43
+ */
+public class NoEntryVo {
+    private String directionCode;
+
+    private String name;
+
+    private Integer number;
+
+    public String getDirectionCode() {
+        return directionCode;
+    }
+
+    public void setDirectionCode(String directionCode) {
+        this.directionCode = directionCode;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Integer getNumber() {
+        return number;
+    }
+
+    public void setNumber(Integer number) {
+        this.number = number;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/PageInfoExtension.java b/src/main/java/com/gk/firework/Domain/Vo/PageInfoExtension.java
new file mode 100644
index 0000000..b635090
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/PageInfoExtension.java
@@ -0,0 +1,32 @@
+package com.gk.firework.Domain.Vo;
+
+import com.gk.firework.Domain.Utils.PageInfo;
+
+public class PageInfoExtension <T> extends PageInfo {
+
+    public PageInfoExtension(PageInfo pageInfo) {
+        this.setResult(pageInfo.getResult());
+        this.setTotalCount(pageInfo.getTotalCount());
+        this.setPageSize(pageInfo.getPageSize());
+        this.setPageIndex(pageInfo.getPageIndex());
+        this.setSort(pageInfo.getSort());
+        this.setOrder(pageInfo.getSort());
+        this.setFrom(pageInfo.getFrom());
+        this.setSize(pageInfo.getSize());
+        this.setCondition(pageInfo.getCondition());
+    }
+
+    public PageInfoExtension() {
+
+    }
+
+    private T extension;
+
+    public T getExtension() {
+        return extension;
+    }
+
+    public void setExtension(T extension) {
+        this.extension = extension;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/PatrolOrderVo.java b/src/main/java/com/gk/firework/Domain/Vo/PatrolOrderVo.java
new file mode 100644
index 0000000..6df3792
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/PatrolOrderVo.java
@@ -0,0 +1,75 @@
+package com.gk.firework.Domain.Vo;
+
+import com.gk.firework.Domain.PatrolOrderInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+@ApiModel("安全巡检列表扩展类")
+public class PatrolOrderVo extends PatrolOrderInfo {
+
+    @ApiModelProperty("检查人")
+    private String checkname;
+
+    @ApiModelProperty("企业名称")
+    private String enterprisename;
+
+    @ApiModelProperty("企业类型")
+    private String safetysupervision;
+
+    @ApiModelProperty("办公地址")
+    private String officeaddress;
+
+    @ApiModelProperty("办公电话")
+    private String officephone;
+
+    @ApiModelProperty("主要负责人")
+    private String mainperson;
+
+    public String getCheckname() {
+        return checkname;
+    }
+
+    public void setCheckname(String checkname) {
+        this.checkname = checkname;
+    }
+
+    public String getEnterprisename() {
+        return enterprisename;
+    }
+
+    public void setEnterprisename(String enterprisename) {
+        this.enterprisename = enterprisename;
+    }
+
+    public String getSafetysupervision() {
+        return safetysupervision;
+    }
+
+    public void setSafetysupervision(String safetysupervision) {
+        this.safetysupervision = safetysupervision;
+    }
+
+    public String getOfficeaddress() {
+        return officeaddress;
+    }
+
+    public void setOfficeaddress(String officeaddress) {
+        this.officeaddress = officeaddress;
+    }
+
+    public String getOfficephone() {
+        return officephone;
+    }
+
+    public void setOfficephone(String officephone) {
+        this.officephone = officephone;
+    }
+
+    public String getMainperson() {
+        return mainperson;
+    }
+
+    public void setMainperson(String mainperson) {
+        this.mainperson = mainperson;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/Product2JsonVo.java b/src/main/java/com/gk/firework/Domain/Vo/Product2JsonVo.java
new file mode 100644
index 0000000..737f671
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/Product2JsonVo.java
@@ -0,0 +1,171 @@
+package com.gk.firework.Domain.Vo;
+
+import com.gk.firework.Domain.ProductInfo;
+
+import java.math.BigDecimal;
+
+public class Product2JsonVo  {
+
+    private Long id;
+    //产品数量
+    private Integer num;
+    //
+    /** 产品名(限制长度255)  name **/
+    private String name;
+
+    /** 流向码(十位)  directionCode **/
+    private String directionCode;
+
+//    /** 进价  purchasePrice **/
+//    private BigDecimal purchasePrice;
+//
+//    /** 售价  salePrice **/
+//    private BigDecimal salePrice;
+
+    /** 生产厂家  manufacturer **/
+    private String manufacturer;
+
+    /** 规格(一般为2位字母数字组合)  specification **/
+    private String specification;
+
+    /** 含药量(一般为数字,部分含有单位)  explosiveContent **/
+    private BigDecimal explosiveContent;
+
+    /** (烟花爆竹)类型(爆竹类,单个爆竹类,喷花类,日景烟花,吐珠类,造型玩具类,玩具烟花类,线香类,组合类,组合烟花,组合烟花类,组合盆花类,鞭炮类,火箭类,旋转类,升空类,旋转升空类,冷光类,烟雾类,摩擦类,小礼花类,礼花弹类,架子烟类,引火线,黑火药,烟火药,氯酸钾,精品礼品箱类,彩箱烟花类,单个爆竹类,玩具类,同类组合烟花)  type **/
+    private String type;
+
+    private String secondaryType;
+
+    /** 产品等级(ABCD级)  level **/
+    private String level;
+
+    /** 箱含量(正整数)  boxNumber **/
+    private Integer boxNumber;
+
+    /** 包装方式  packing **/
+    private String packing;
+
+    //进价
+    private BigDecimal price;
+
+
+    public Integer getNum() {
+        return num;
+    }
+
+    public void setNum(Integer num) {
+        this.num = num;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getDirectionCode() {
+        return directionCode;
+    }
+
+    public void setDirectionCode(String directionCode) {
+        this.directionCode = directionCode;
+    }
+
+//    public BigDecimal getPurchasePrice() {
+//        return purchasePrice;
+//    }
+//
+//    public void setPurchasePrice(BigDecimal purchasePrice) {
+//        this.purchasePrice = purchasePrice;
+//    }
+//
+//    public BigDecimal getSalePrice() {
+//        return salePrice;
+//    }
+//
+//    public void setSalePrice(BigDecimal salePrice) {
+//        this.salePrice = salePrice;
+//    }
+
+    public String getManufacturer() {
+        return manufacturer;
+    }
+
+    public void setManufacturer(String manufacturer) {
+        this.manufacturer = manufacturer;
+    }
+
+    public String getSpecification() {
+        return specification;
+    }
+
+    public void setSpecification(String specification) {
+        this.specification = specification;
+    }
+
+    public BigDecimal getExplosiveContent() {
+        return explosiveContent;
+    }
+
+    public void setExplosiveContent(BigDecimal explosiveContent) {
+        this.explosiveContent = explosiveContent;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getSecondaryType() {
+        return secondaryType;
+    }
+
+    public void setSecondaryType(String secondaryType) {
+        this.secondaryType = secondaryType;
+    }
+
+    public String getLevel() {
+        return level;
+    }
+
+    public void setLevel(String level) {
+        this.level = level;
+    }
+
+    public Integer getBoxNumber() {
+        return boxNumber;
+    }
+
+    public void setBoxNumber(Integer boxNumber) {
+        this.boxNumber = boxNumber;
+    }
+
+    public String getPacking() {
+        return packing;
+    }
+
+    public void setPacking(String packing) {
+        this.packing = packing;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public BigDecimal getPrice() {
+        return price;
+    }
+
+    public void setPrice(BigDecimal price) {
+        this.price = price;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/ProductCodePrint.java b/src/main/java/com/gk/firework/Domain/Vo/ProductCodePrint.java
new file mode 100644
index 0000000..2f3c8da
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/ProductCodePrint.java
@@ -0,0 +1,56 @@
+package com.gk.firework.Domain.Vo;
+
+import java.util.List;
+
+public class ProductCodePrint {
+
+    private String orderCode;
+
+    private Integer batchCode;
+
+    private String startCode;
+
+    private String endCode;
+
+    private List<ProductCodeVo> productCodeVos;
+
+    public String getOrderCode() {
+        return orderCode;
+    }
+
+    public void setOrderCode(String orderCode) {
+        this.orderCode = orderCode;
+    }
+
+    public Integer getBatchCode() {
+        return batchCode;
+    }
+
+    public void setBatchCode(Integer batchCode) {
+        this.batchCode = batchCode;
+    }
+
+    public List<ProductCodeVo> getProductCodeVos() {
+        return productCodeVos;
+    }
+
+    public void setProductCodeVos(List<ProductCodeVo> productCodeVos) {
+        this.productCodeVos = productCodeVos;
+    }
+
+    public String getStartCode() {
+        return startCode;
+    }
+
+    public void setStartCode(String startCode) {
+        this.startCode = startCode;
+    }
+
+    public String getEndCode() {
+        return endCode;
+    }
+
+    public void setEndCode(String endCode) {
+        this.endCode = endCode;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/ProductCodeVo.java b/src/main/java/com/gk/firework/Domain/Vo/ProductCodeVo.java
new file mode 100644
index 0000000..673f81f
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/ProductCodeVo.java
@@ -0,0 +1,46 @@
+package com.gk.firework.Domain.Vo;
+
+import com.gk.firework.Domain.ProductCodeInfo;
+
+public class ProductCodeVo extends ProductCodeInfo {
+
+    private String itemcode;
+
+    private String boxrange;
+
+    private String img;
+
+    private String crc;
+
+    public String getItemcode() {
+        return itemcode;
+    }
+
+    public void setItemcode(String itemcode) {
+        this.itemcode = itemcode;
+    }
+
+    public String getBoxrange() {
+        return boxrange;
+    }
+
+    public void setBoxrange(String boxrange) {
+        this.boxrange = boxrange;
+    }
+
+    public String getImg() {
+        return img;
+    }
+
+    public void setImg(String img) {
+        this.img = img;
+    }
+
+    public String getCrc() {
+        return crc;
+    }
+
+    public void setCrc(String crc) {
+        this.crc = crc;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/ProductLocusVo.java b/src/main/java/com/gk/firework/Domain/Vo/ProductLocusVo.java
new file mode 100644
index 0000000..9808dad
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/ProductLocusVo.java
@@ -0,0 +1,54 @@
+package com.gk.firework.Domain.Vo;
+
+import com.gk.firework.Domain.ProductLocusInfo;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * @author : jingjy
+ * @date : 2021/4/16 9:16
+ */
+public class ProductLocusVo extends ProductLocusInfo {
+
+    private static SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+    /** 顾客信息(身份证号码) **/
+    private String idCardNumber;
+
+    /** 内容详情(拼接后的内容) **/
+    private String detail;
+
+    /** type对应的中文  **/
+    private String typeName;
+
+    public String getIdCardNumber() {
+        return idCardNumber;
+    }
+
+    public void setIdCardNumber(String idCardNumber) {
+        this.idCardNumber = idCardNumber;
+    }
+
+    public String getDetail() {
+        StringBuilder stringBuilder = new StringBuilder();
+        return stringBuilder.append(sdf.format(this.getModifieddate())).append(" ")
+                .append(this.getDirectioncode()).append(" ")
+                .append(this.getContent()).append(" ")
+                .append(this.getTypeName())
+                .append(this.getIdCardNumber() == null ? "" : ",购买人:" + this.getIdCardNumber())
+                .toString();
+    }
+
+    public void setDetail(String detail) {
+        this.detail = detail;
+    }
+
+    public String getTypeName() {
+        return typeName;
+    }
+
+    public void setTypeName(String typeName) {
+        this.typeName = typeName;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/ProductThresholdVo.java b/src/main/java/com/gk/firework/Domain/Vo/ProductThresholdVo.java
new file mode 100644
index 0000000..a53ca95
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/ProductThresholdVo.java
@@ -0,0 +1,28 @@
+package com.gk.firework.Domain.Vo;
+
+import com.gk.firework.Domain.ProductThresholdInfo;
+
+import java.util.List;
+
+/**
+ * @author : jingjy
+ * @date : 2021/4/15 14:48
+ */
+public class ProductThresholdVo extends ProductThresholdInfo {
+    private List<String> levels;
+
+    public ProductThresholdVo(List<String> levels) {
+        this.levels = levels;
+    }
+
+    public ProductThresholdVo() {
+    }
+
+    public List<String> getLevels() {
+        return levels;
+    }
+
+    public void setLevels(List<String> levels) {
+        this.levels = levels;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/ProductVo.java b/src/main/java/com/gk/firework/Domain/Vo/ProductVo.java
new file mode 100644
index 0000000..fca0678
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/ProductVo.java
@@ -0,0 +1,116 @@
+package com.gk.firework.Domain.Vo;
+
+import com.gk.firework.Domain.ProductInfo;
+import io.swagger.models.auth.In;
+
+import java.math.BigDecimal;
+import java.util.*;
+
+/**
+ * @author : jingjy
+ * @date : 2021/3/19 9:37
+ */
+public class ProductVo extends ProductInfo {
+    /** 产品条码 */
+    private String itemCode ;
+    /** 日期码*/
+    private String dateCode ;
+    /** 序列号 */
+    private String serialNo;
+    /** 箱码 */
+    private String boxNo ;
+    /** 可入库标记 */
+    private String entryFlag ;
+    /** 数量 */
+    private Integer num;
+
+    private BigDecimal price;
+
+    private Integer changenum;
+
+    public String getItemCode() {
+        return itemCode;
+    }
+
+    public void setItemCode(String itemCode) {
+        this.itemCode = itemCode;
+    }
+
+    public String getDateCode() {
+        return dateCode;
+    }
+
+    public void setDateCode(String dateCode) {
+        this.dateCode = dateCode;
+    }
+
+    public String getSerialNo() {
+        return serialNo;
+    }
+
+    public void setSerialNo(String serialNo) {
+        this.serialNo = serialNo;
+    }
+
+    public String getBoxNo() {
+        return boxNo;
+    }
+
+    public void setBoxNo(String boxNo) {
+        this.boxNo = boxNo;
+    }
+
+    public String getEntryFlag() {
+        return entryFlag;
+    }
+
+    public void setEntryFlag(String entryFlag) {
+        this.entryFlag = entryFlag;
+    }
+
+    public Integer getNum() {
+        return num;
+    }
+
+    public void setNum(Integer num) {
+        this.num = num;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        ProductVo productVo = (ProductVo) o;
+        return Objects.equals(getDirectionCode(), productVo.getDirectionCode()) ;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(getDirectionCode());
+    }
+
+    public static List<ProductVo> removeListDuplicateObject(List<ProductVo> list) {
+        Set<ProductVo> set = new HashSet<>(list);
+        return new ArrayList<>(set);
+    }
+
+    public BigDecimal getPrice() {
+        return price;
+    }
+
+    public void setPrice(BigDecimal price) {
+        this.price = price;
+    }
+
+    public Integer getChangenum() {
+        return changenum;
+    }
+
+    public void setChangenum(Integer changenum) {
+        this.changenum = changenum;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/RegisterVo.java b/src/main/java/com/gk/firework/Domain/Vo/RegisterVo.java
new file mode 100644
index 0000000..d90b725
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/RegisterVo.java
@@ -0,0 +1,155 @@
+package com.gk.firework.Domain.Vo;
+
+import com.gk.firework.Domain.RegisterInfo;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+/**
+ * @author : jingjy
+ * @date : 2021/6/25 8:56
+ */
+public class RegisterVo extends RegisterInfo {
+    public final static String BUSINESS = "R_BUSINESS";
+    public final static String ID_CARD = "R_IDCARD";
+    public final static String LEGAL_PERSON = "R_PERSON";
+    public final static String OPERATION = "R_OPERATION";
+    public final static String ESCORT_COMPANY = "R_ESCORT";
+    public final static String INSURANCE = "R_INSURANCE";
+    public final static String PRODUCTION = "R_PRODUCTION";
+
+    /** 1、企业营业执照、生产许可证 */
+    private MultipartFile[] businessLicense;
+    /** 2、法人身份证复印件加盖公章 */
+    private MultipartFile[] idCard;
+    /** 3、主要负责人、安全生产管理人员考核合格的证明材料 */
+    private MultipartFile[] legalPersonFile;
+    /** 4、特种作业人员取得操作资格证书的证明材料,从业人员安全生产教育和培训合格的证明材料 */
+    private MultipartFile[] operationQualification;
+    /** 5、押运公司营业执照、道路运输经营许可证、危险品准运证 */
+    private MultipartFile[] escortCompany;
+    /** 6、安全责任险、意外险投保材料 */
+    private MultipartFile[] insurance;
+    /** 7、安全生产标准化证书材料 */
+    private MultipartFile[] safetyProduction;
+
+    private List<String> businessLicenseUrl;
+    private List<String> idCardUrl;
+    private List<String> legalPersonUrl;
+    private List<String> operationQualificationUrl;
+    private List<String> escortCompanyUrl;
+    private List<String> insuranceUrl;
+    private List<String> safetyProductionUrl;
+
+    public MultipartFile[] getBusinessLicense() {
+        return businessLicense;
+    }
+
+    public void setBusinessLicense(MultipartFile[] businessLicense) {
+        this.businessLicense = businessLicense;
+    }
+
+    public MultipartFile[] getIdCard() {
+        return idCard;
+    }
+
+    public void setIdCard(MultipartFile[] idCard) {
+        this.idCard = idCard;
+    }
+
+    public MultipartFile[] getLegalPersonFile() {
+        return legalPersonFile;
+    }
+
+    public void setLegalPersonFile(MultipartFile[] legalPersonFile) {
+        this.legalPersonFile = legalPersonFile;
+    }
+
+    public MultipartFile[] getOperationQualification() {
+        return operationQualification;
+    }
+
+    public void setOperationQualification(MultipartFile[] operationQualification) {
+        this.operationQualification = operationQualification;
+    }
+
+    public MultipartFile[] getEscortCompany() {
+        return escortCompany;
+    }
+
+    public void setEscortCompany(MultipartFile[] escortCompany) {
+        this.escortCompany = escortCompany;
+    }
+
+    public MultipartFile[] getInsurance() {
+        return insurance;
+    }
+
+    public void setInsurance(MultipartFile[] insurance) {
+        this.insurance = insurance;
+    }
+
+    public MultipartFile[] getSafetyProduction() {
+        return safetyProduction;
+    }
+
+    public void setSafetyProduction(MultipartFile[] safetyProduction) {
+        this.safetyProduction = safetyProduction;
+    }
+
+    public List<String> getBusinessLicenseUrl() {
+        return businessLicenseUrl;
+    }
+
+    public void setBusinessLicenseUrl(List<String> businessLicenseUrl) {
+        this.businessLicenseUrl = businessLicenseUrl;
+    }
+
+    public List<String> getIdCardUrl() {
+        return idCardUrl;
+    }
+
+    public void setIdCardUrl(List<String> idCardUrl) {
+        this.idCardUrl = idCardUrl;
+    }
+
+    public List<String> getLegalPersonUrl() {
+        return legalPersonUrl;
+    }
+
+    public void setLegalPersonUrl(List<String> legalPersonUrl) {
+        this.legalPersonUrl = legalPersonUrl;
+    }
+
+    public List<String> getOperationQualificationUrl() {
+        return operationQualificationUrl;
+    }
+
+    public void setOperationQualificationUrl(List<String> operationQualificationUrl) {
+        this.operationQualificationUrl = operationQualificationUrl;
+    }
+
+    public List<String> getEscortCompanyUrl() {
+        return escortCompanyUrl;
+    }
+
+    public void setEscortCompanyUrl(List<String> escortCompanyUrl) {
+        this.escortCompanyUrl = escortCompanyUrl;
+    }
+
+    public List<String> getInsuranceUrl() {
+        return insuranceUrl;
+    }
+
+    public void setInsuranceUrl(List<String> insuranceUrl) {
+        this.insuranceUrl = insuranceUrl;
+    }
+
+    public List<String> getSafetyProductionUrl() {
+        return safetyProductionUrl;
+    }
+
+    public void setSafetyProductionUrl(List<String> safetyProductionUrl) {
+        this.safetyProductionUrl = safetyProductionUrl;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/SaleDetailVo.java b/src/main/java/com/gk/firework/Domain/Vo/SaleDetailVo.java
new file mode 100644
index 0000000..52e34c6
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/SaleDetailVo.java
@@ -0,0 +1,40 @@
+package com.gk.firework.Domain.Vo;
+
+import com.gk.firework.Domain.ProductInfo;
+import com.gk.firework.Domain.SaleOrderDetailInfo;
+import com.gk.firework.Domain.SaleOrderInfo;
+
+public class SaleDetailVo extends SaleOrderDetailInfo {
+
+    //现在的产品信息
+    private ProductInfo product;
+    //订单的信息
+    private SaleOrderInfo saleOrderInfo;
+
+    /** 店铺  shop **/
+    private String shop;
+
+    public ProductInfo getProduct() {
+        return product;
+    }
+
+    public void setProduct(ProductInfo product) {
+        this.product = product;
+    }
+
+    public SaleOrderInfo getSaleOrderInfo() {
+        return saleOrderInfo;
+    }
+
+    public void setSaleOrderInfo(SaleOrderInfo saleOrderInfo) {
+        this.saleOrderInfo = saleOrderInfo;
+    }
+
+    public String getShop() {
+        return shop;
+    }
+
+    public void setShop(String shop) {
+        this.shop = shop;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/SaleNumVo.java b/src/main/java/com/gk/firework/Domain/Vo/SaleNumVo.java
new file mode 100644
index 0000000..012d7b0
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/SaleNumVo.java
@@ -0,0 +1,50 @@
+package com.gk.firework.Domain.Vo;
+
+import com.gk.firework.Domain.ProductInfo;
+
+import java.math.BigDecimal;
+
+
+public class SaleNumVo extends ProductInfo {
+
+    private BigDecimal num;
+
+    private String itemcode;
+
+    private String enterprisenumber;
+
+    private String enterprisename;
+
+
+    public BigDecimal getNum() {
+        return num;
+    }
+
+    public void setNum(BigDecimal num) {
+        this.num = num;
+    }
+
+    public String getItemcode() {
+        return itemcode;
+    }
+
+    public void setItemcode(String itemcode) {
+        this.itemcode = itemcode;
+    }
+
+    public String getEnterprisenumber() {
+        return enterprisenumber;
+    }
+
+    public void setEnterprisenumber(String enterprisenumber) {
+        this.enterprisenumber = enterprisenumber;
+    }
+
+    public String getEnterprisename() {
+        return enterprisename;
+    }
+
+    public void setEnterprisename(String enterprisename) {
+        this.enterprisename = enterprisename;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/SaleOrderVo.java b/src/main/java/com/gk/firework/Domain/Vo/SaleOrderVo.java
new file mode 100644
index 0000000..b8ef575
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/SaleOrderVo.java
@@ -0,0 +1,13 @@
+package com.gk.firework.Domain.Vo;
+
+import com.gk.firework.Domain.SaleOrderInfo;
+
+/**
+ * @author : jingjy
+ * @date : 2021/3/31 8:57
+ */
+public class SaleOrderVo extends SaleOrderInfo {
+
+    /** 销售订单详情 **/
+    private String detailInfos;
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/SelfCheckReportSearchVo.java b/src/main/java/com/gk/firework/Domain/Vo/SelfCheckReportSearchVo.java
new file mode 100644
index 0000000..a758518
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/SelfCheckReportSearchVo.java
@@ -0,0 +1,159 @@
+package com.gk.firework.Domain.Vo;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+public class SelfCheckReportSearchVo {
+    //企业ID
+    private Long eid;
+
+    private String ename;
+
+    //隐患等级
+    private Byte yhlevel;
+
+    //隐患状态
+    private Byte status;
+
+    //查询时间区间-起始
+    private Date startTime;
+
+    //查询时间区间-结束
+    private Date endTime;
+
+    /** 所属区域:省  province **/
+    private String province;
+
+    /** 所属区域:市  city **/
+    private String city;
+
+    /** 所属区域:区  district **/
+    private String district;
+
+    /** 所属区域:街道  street **/
+    private String street;
+
+    /** 所属区域:委员会  committee **/
+    private String committee;
+
+    //页数
+    private Integer page;
+
+    //页条目数量
+    private Integer pageSize;
+
+    //总数量
+    private Long totalCount;
+
+    public Long getEid() {
+        return eid;
+    }
+
+    public void setEid(Long eid) {
+        this.eid = eid;
+    }
+
+    public String getEname() {
+        return ename;
+    }
+
+    public void setEname(String ename) {
+        this.ename = ename;
+    }
+
+    public Byte getYhlevel() {
+        return yhlevel;
+    }
+
+    public void setYhlevel(Byte yhlevel) {
+        this.yhlevel = yhlevel;
+    }
+
+    public Byte getStatus() {
+        return status;
+    }
+
+    public void setStatus(Byte status) {
+        this.status = status;
+    }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    public String getProvince() {
+        return province;
+    }
+
+    public void setProvince(String province) {
+        this.province = province;
+    }
+
+    public String getCity() {
+        return city;
+    }
+
+    public void setCity(String city) {
+        this.city = city;
+    }
+
+    public String getDistrict() {
+        return district;
+    }
+
+    public void setDistrict(String district) {
+        this.district = district;
+    }
+
+    public String getStreet() {
+        return street;
+    }
+
+    public void setStreet(String street) {
+        this.street = street;
+    }
+
+    public String getCommittee() {
+        return committee;
+    }
+
+    public void setCommittee(String committee) {
+        this.committee = committee;
+    }
+
+    public Integer getPage() {
+        return page;
+    }
+
+    public void setPage(Integer page) {
+        this.page = page;
+    }
+
+    public Integer getPageSize() {
+        return pageSize;
+    }
+
+    public void setPageSize(Integer pageSize) {
+        this.pageSize = pageSize;
+    }
+
+    public Long getTotalCount() {
+        return totalCount;
+    }
+
+    public void setTotalCount(Long totalCount) {
+        this.totalCount = totalCount;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/SelfCheckReportVo.java b/src/main/java/com/gk/firework/Domain/Vo/SelfCheckReportVo.java
new file mode 100644
index 0000000..d1327cf
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/SelfCheckReportVo.java
@@ -0,0 +1,125 @@
+package com.gk.firework.Domain.Vo;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+public class SelfCheckReportVo {
+
+    //id
+    private Long id;
+
+    //企业ID
+    private Long eid;
+
+    private String ename;
+
+    //隐患等级
+    private Byte yhlevel;
+
+    //隐患状态
+    private Byte status;
+
+    private BigDecimal price;
+
+    private Date checktime;
+
+    //整改期限
+    private Date endtime;
+
+    //隐患描述
+    private String yhdesc;
+
+    //责任人
+    private String chargeperson;
+
+    //解决方案
+    private String solution;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Byte getYhlevel() {
+        return yhlevel;
+    }
+
+    public void setYhlevel(Byte yhlevel) {
+        this.yhlevel = yhlevel;
+    }
+
+    public String getYhdesc() {
+        return yhdesc;
+    }
+
+    public BigDecimal getPrice() {
+        return price;
+    }
+
+    public void setPrice(BigDecimal price) {
+        this.price = price;
+    }
+
+    public void setYhdesc(String yhdesc) {
+        this.yhdesc = yhdesc;
+    }
+
+    public String getEname() {
+        return ename;
+    }
+
+    public void setEname(String ename) {
+        this.ename = ename;
+    }
+
+    public String getChargeperson() {
+        return chargeperson;
+    }
+
+    public void setChargeperson(String chargeperson) {
+        this.chargeperson = chargeperson;
+    }
+
+    public Byte getStatus() {
+        return status;
+    }
+
+    public void setStatus(Byte status) {
+        this.status = status;
+    }
+
+    public Date getEndtime() {
+        return endtime;
+    }
+
+    public void setEndtime(Date endtime) {
+        this.endtime = endtime;
+    }
+
+    public String getSolution() {
+        return solution;
+    }
+
+    public void setSolution(String solution) {
+        this.solution = solution;
+    }
+
+    public Long getEid() {
+        return eid;
+    }
+
+    public void setEid(Long eid) {
+        this.eid = eid;
+    }
+
+    public Date getChecktime() {
+        return checktime;
+    }
+
+    public void setChecktime(Date checktime) {
+        this.checktime = checktime;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/SortData.java b/src/main/java/com/gk/firework/Domain/Vo/SortData.java
new file mode 100644
index 0000000..a4c984c
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/SortData.java
@@ -0,0 +1,65 @@
+package com.gk.firework.Domain.Vo;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.lang.reflect.Field;
+import java.util.Comparator;
+
+
+public class SortData {
+    public List<?> sortByInt(List<?> list, final String param ,Byte order){
+        //自定义Comparator对象,自定义排序
+        Comparator c = new Comparator() {
+            @Override
+            public int compare(Object o1, Object o2) {
+                try {
+                    Field  field1 = o1.getClass().getDeclaredField(param);
+                    Field  field2 = o2.getClass().getDeclaredField(param);
+                    field1.setAccessible(true);
+                    field2.setAccessible(true);
+//                    if(null == field1.get(o1) || null == field2.get(o2)){
+//                        return 0;
+//                    }
+                    if((Integer)field1.get(o1)<(Integer)field2.get(o2)){
+                        return 1;
+                    }else  if((Integer)field1.get(o1)>(Integer)field2.get(o2)){
+                        return -1;
+                    }else {
+                        return 0;
+                    }
+                    //注意!!返回值必须是一对相反数,否则无效。jdk1.7以后就是这样。
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+                return 1;
+            }
+        };
+        if(order == 1){
+            Collections.sort(list, c);
+        }else {
+            Collections.sort(list, c.reversed());
+        }
+
+        return list;
+    }
+
+    public List<?> Pagination(Integer pageNum, Integer pageSize, List<?> dataList) {
+        Integer totalCount = dataList.size();
+        List<?> result = new ArrayList<>();
+        if (pageSize != null) {
+            // 默认页面大小为10
+            pageSize = pageSize > 0 ? pageSize : 10;
+        }
+        if (pageNum != null) {
+            pageNum = pageNum > 0 ? pageNum : 0;
+        }
+
+        Integer beginindex = (pageNum-1)*pageSize;
+        Integer endindex = pageNum * pageSize < totalCount ? pageNum * pageSize : totalCount;
+
+        result = dataList.subList(beginindex,endindex);
+        return result;
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/SortTime.java b/src/main/java/com/gk/firework/Domain/Vo/SortTime.java
new file mode 100644
index 0000000..abbd3be
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/SortTime.java
@@ -0,0 +1,59 @@
+package com.gk.firework.Domain.Vo;
+
+import java.text.SimpleDateFormat;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.lang.reflect.Field;
+import java.util.Comparator;
+
+
+public class SortTime {
+    public List<?> sortByInt(List<?> list, final String param ,Byte order){
+        //自定义Comparator对象,自定义排序
+        Comparator c = new Comparator() {
+            @Override
+            public int compare(Object o1, Object o2) {
+                try {
+                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                    Field  field1 = o1.getClass().getDeclaredField(param);
+                    Field  field2 = o2.getClass().getDeclaredField(param);
+                    field1.setAccessible(true);
+                    field2.setAccessible(true);
+                    Date date1 = null;
+                    Date date2 = null;
+                    try {
+                        date1 = (Date)field1.get(o1);
+                    }catch (Exception e){
+                        e.printStackTrace();
+                    }
+                    try {
+                        date2 = (Date) field2.get(o2);
+                    }catch (Exception e){
+                        e.printStackTrace();
+                    }
+
+                    if((int)date1.getTime() < (int) date2.getTime()){
+                        return 1;
+                    }else   if((int)date1.getTime() > (int) date2.getTime()){
+                        return -1;
+                    }else {
+                        return 0;
+                    }
+                    //注意!!返回值必须是一对相反数,否则无效。jdk1.7以后就是这样。
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+                return 1;
+            }
+        };
+        if(order == 1){
+            Collections.sort(list, c);
+        }else {
+            Collections.sort(list, c.reversed());
+        }
+
+        return list;
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/StandardTemplate1Vo.java b/src/main/java/com/gk/firework/Domain/Vo/StandardTemplate1Vo.java
new file mode 100644
index 0000000..3595f05
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/StandardTemplate1Vo.java
@@ -0,0 +1,86 @@
+package com.gk.firework.Domain.Vo;
+
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.Date;
+
+public class StandardTemplate1Vo {
+
+    private Long id;
+
+    /** 菜单  menu **/
+    private String menu;
+
+    /** 制定时间  settime **/
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    private Date settime;
+
+    /** 名称  name **/
+    private String name;
+
+    /** 类型  type **/
+    private Integer type;
+
+    /** 内容  content **/
+    private String content;
+
+    private MultipartFile file;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getMenu() {
+        return menu;
+    }
+
+    public void setMenu(String menu) {
+        this.menu = menu;
+    }
+
+
+    public Date getSettime() {
+        return settime;
+    }
+
+    public void setSettime(Date settime) {
+        this.settime = settime;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public MultipartFile getFile() {
+        return file;
+    }
+
+    public void setFile(MultipartFile file) {
+        this.file = file;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/StockVo.java b/src/main/java/com/gk/firework/Domain/Vo/StockVo.java
new file mode 100644
index 0000000..989da7b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/StockVo.java
@@ -0,0 +1,264 @@
+package com.gk.firework.Domain.Vo;
+
+import com.gk.firework.Domain.StockInfo;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author : jingjy
+ * @date : 2021/4/15 17:21
+ */
+public class StockVo extends StockInfo {
+    private String name;
+
+    private Integer explosiveContent;
+
+    private String specification;
+
+    private BigDecimal countNum;
+
+    private BigDecimal stockNum;
+
+    private String enterpriseName;
+
+    private String enterpriseNumber;
+
+    private BigDecimal entryNum;
+
+    private BigDecimal returnNum;
+
+    private BigDecimal saleNum;
+
+    private BigDecimal deliveryNum;
+
+    private BigDecimal returnDeliveryNum;
+
+    private String boxnumber;
+
+    private String manufacturer;
+
+    //企业所在省市区
+    private String province;
+
+    private String city;
+
+    private String district;
+
+    //产品六个类别
+    private BigDecimal firecracker;
+
+    private BigDecimal spray;
+
+    private BigDecimal rotation;
+
+    private BigDecimal bead;
+
+    private BigDecimal toy;
+
+    private BigDecimal combined;
+
+    //产品类别
+    private String productType;
+    private String secondaryType;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Integer getExplosiveContent() {
+        return explosiveContent;
+    }
+
+    public void setExplosiveContent(Integer explosiveContent) {
+        this.explosiveContent = explosiveContent;
+    }
+
+    public String getSpecification() {
+        return specification;
+    }
+
+    public void setSpecification(String specification) {
+        this.specification = specification;
+    }
+
+    public BigDecimal getCountNum() {
+        return countNum;
+    }
+
+    public void setCountNum(BigDecimal countNum) {
+        this.countNum = countNum;
+    }
+
+    public BigDecimal getStockNum() {
+        return stockNum;
+    }
+
+    public void setStockNum(BigDecimal stockNum) {
+        this.stockNum = stockNum;
+    }
+
+    public String getEnterpriseName() {
+        return enterpriseName;
+    }
+
+    public void setEnterpriseName(String enterpriseName) {
+        this.enterpriseName = enterpriseName;
+    }
+
+    public String getEnterpriseNumber() {
+        return enterpriseNumber;
+    }
+
+    public void setEnterpriseNumber(String enterpriseNumber) {
+        this.enterpriseNumber = enterpriseNumber;
+    }
+
+    public BigDecimal getEntryNum() {
+        return entryNum;
+    }
+
+    public void setEntryNum(BigDecimal entryNum) {
+        this.entryNum = entryNum;
+    }
+
+    public BigDecimal getReturnNum() {
+        return returnNum;
+    }
+
+    public void setReturnNum(BigDecimal returnNum) {
+        this.returnNum = returnNum;
+    }
+
+    public BigDecimal getSaleNum() {
+        return saleNum;
+    }
+
+    public void setSaleNum(BigDecimal saleNum) {
+        this.saleNum = saleNum;
+    }
+
+    public BigDecimal getDeliveryNum() {
+        return deliveryNum;
+    }
+
+    public void setDeliveryNum(BigDecimal deliveryNum) {
+        this.deliveryNum = deliveryNum;
+    }
+
+    public BigDecimal getReturnDeliveryNum() {
+        return returnDeliveryNum;
+    }
+
+    public void setReturnDeliveryNum(BigDecimal returnDeliveryNum) {
+        this.returnDeliveryNum = returnDeliveryNum;
+    }
+
+    public String getBoxnumber() {
+        return boxnumber;
+    }
+
+    public void setBoxnumber(String boxnumber) {
+        this.boxnumber = boxnumber;
+    }
+
+    public String getManufacturer() {
+        return manufacturer;
+    }
+
+    public void setManufacturer(String manufacturer) {
+        this.manufacturer = manufacturer;
+    }
+
+    public String getProvince() {
+        return province;
+    }
+
+    public void setProvince(String province) {
+        this.province = province;
+    }
+
+    public String getCity() {
+        return city;
+    }
+
+    public void setCity(String city) {
+        this.city = city;
+    }
+
+    public String getDistrict() {
+        return district;
+    }
+
+    public void setDistrict(String district) {
+        this.district = district;
+    }
+
+    public BigDecimal getFirecracker() {
+        return firecracker;
+    }
+
+    public void setFirecracker(BigDecimal firecracker) {
+        this.firecracker = firecracker;
+    }
+
+    public BigDecimal getSpray() {
+        return spray;
+    }
+
+    public void setSpray(BigDecimal spray) {
+        this.spray = spray;
+    }
+
+    public BigDecimal getRotation() {
+        return rotation;
+    }
+
+    public void setRotation(BigDecimal rotation) {
+        this.rotation = rotation;
+    }
+
+    public BigDecimal getBead() {
+        return bead;
+    }
+
+    public void setBead(BigDecimal bead) {
+        this.bead = bead;
+    }
+
+    public BigDecimal getToy() {
+        return toy;
+    }
+
+    public void setToy(BigDecimal toy) {
+        this.toy = toy;
+    }
+
+    public BigDecimal getCombined() {
+        return combined;
+    }
+
+    public void setCombined(BigDecimal combined) {
+        this.combined = combined;
+    }
+
+    public String getProductType() {
+        return productType;
+    }
+
+    public void setProductType(String productType) {
+        this.productType = productType;
+    }
+
+    public String getSecondaryType() {
+        return secondaryType;
+    }
+
+    public void setSecondaryType(String secondaryType) {
+        this.secondaryType = secondaryType;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/TransportArrivalSum.java b/src/main/java/com/gk/firework/Domain/Vo/TransportArrivalSum.java
new file mode 100644
index 0000000..a39ab92
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/TransportArrivalSum.java
@@ -0,0 +1,47 @@
+package com.gk.firework.Domain.Vo;
+
+import java.util.Date;
+
+public class TransportArrivalSum {
+
+    //运输证号
+    private String certificatecode;
+    //总数
+    private Integer arrivalSum;
+    //企业
+    private String createbyname;
+
+    private Date createtime;
+
+    public String getCertificatecode() {
+        return certificatecode;
+    }
+
+    public void setCertificatecode(String certificatecode) {
+        this.certificatecode = certificatecode;
+    }
+
+    public Integer getArrivalSum() {
+        return arrivalSum;
+    }
+
+    public void setArrivalSum(Integer arrivalSum) {
+        this.arrivalSum = arrivalSum;
+    }
+
+    public String getCreatebyname() {
+        return createbyname;
+    }
+
+    public void setCreatebyname(String createbyname) {
+        this.createbyname = createbyname;
+    }
+
+    public Date getCreatetime() {
+        return createtime;
+    }
+
+    public void setCreatetime(Date createtime) {
+        this.createtime = createtime;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/TransportArrivalVo.java b/src/main/java/com/gk/firework/Domain/Vo/TransportArrivalVo.java
new file mode 100644
index 0000000..dbca3ad
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/TransportArrivalVo.java
@@ -0,0 +1,28 @@
+package com.gk.firework.Domain.Vo;
+
+import com.gk.firework.Domain.TransportCertificateProduct;
+import java.util.List;
+
+public class TransportArrivalVo {
+
+    //运输证编号
+    private String code;
+    //产品信息
+    private List<TransportCertificateProduct> productList;
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public List<TransportCertificateProduct> getProductList() {
+        return productList;
+    }
+
+    public void setProductList(List<TransportCertificateProduct> productList) {
+        this.productList = productList;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/TransportCertVo.java b/src/main/java/com/gk/firework/Domain/Vo/TransportCertVo.java
new file mode 100644
index 0000000..8e006cd
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/TransportCertVo.java
@@ -0,0 +1,162 @@
+package com.gk.firework.Domain.Vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.gk.firework.Domain.Enum.CertificateStatus;
+import com.gk.firework.Domain.TransportCertFile;
+import com.gk.firework.Domain.TransportCertProduct;
+import com.gk.firework.Domain.TransportCertificatePerson;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+public class TransportCertVo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+
+    /** 运输证单号  code **/
+    private String code;
+
+    /** 企业单位编号  enterprisenumber **/
+    private String enterprisenumber;
+
+    /** 运输车辆牌号  carnumber **/
+    private String carnumber;
+
+    /** 收货人:单位名称  receivercompanyname **/
+    private String receivercompanyname;
+
+    /** 收货人:地址  receiveraddress **/
+    private String receiveraddress;
+
+    /** 收货人:负责人姓名  receiverprincipalname **/
+    private String receiverprincipalname;
+
+    /** 收货人:负责人电话  receiverprincipalphone **/
+    private String receiverprincipalphone;
+
+    /** 电子合同 逗号分割  contractcode **/
+    private String contractcode;
+    //审批时间
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    private Date processtime;
+
+    //驾驶人|押运人
+    private String transportPerson;
+
+    //产品信息
+    private String transportProduct;
+
+    private MultipartFile[] file;
+
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getEnterprisenumber() {
+        return enterprisenumber;
+    }
+
+    public void setEnterprisenumber(String enterprisenumber) {
+        this.enterprisenumber = enterprisenumber;
+    }
+
+
+    public String getCarnumber() {
+        return carnumber;
+    }
+
+    public void setCarnumber(String carnumber) {
+        this.carnumber = carnumber;
+    }
+
+    public String getReceivercompanyname() {
+        return receivercompanyname;
+    }
+
+    public void setReceivercompanyname(String receivercompanyname) {
+        this.receivercompanyname = receivercompanyname;
+    }
+
+    public String getReceiveraddress() {
+        return receiveraddress;
+    }
+
+    public void setReceiveraddress(String receiveraddress) {
+        this.receiveraddress = receiveraddress;
+    }
+
+    public String getReceiverprincipalname() {
+        return receiverprincipalname;
+    }
+
+    public void setReceiverprincipalname(String receiverprincipalname) {
+        this.receiverprincipalname = receiverprincipalname;
+    }
+
+    public String getReceiverprincipalphone() {
+        return receiverprincipalphone;
+    }
+
+    public void setReceiverprincipalphone(String receiverprincipalphone) {
+        this.receiverprincipalphone = receiverprincipalphone;
+    }
+
+    public String getContractcode() {
+        return contractcode;
+    }
+
+    public void setContractcode(String contractcode) {
+        this.contractcode = contractcode;
+    }
+
+    public String getTransportPerson() {
+        return transportPerson;
+    }
+
+    public void setTransportPerson(String transportPerson) {
+        this.transportPerson = transportPerson;
+    }
+
+    public String getTransportProduct() {
+        return transportProduct;
+    }
+
+    public void setTransportProduct(String transportProduct) {
+        this.transportProduct = transportProduct;
+    }
+
+    public MultipartFile[] getFile() {
+        return file;
+    }
+
+    public void setFile(MultipartFile[] file) {
+        this.file = file;
+    }
+
+    public Date getProcesstime() {
+        return processtime;
+    }
+
+    public void setProcesstime(Date processtime) {
+        this.processtime = processtime;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/UserVo.java b/src/main/java/com/gk/firework/Domain/Vo/UserVo.java
new file mode 100644
index 0000000..2e1e39e
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/UserVo.java
@@ -0,0 +1,89 @@
+package com.gk.firework.Domain.Vo;
+
+import com.gk.firework.Domain.AuthorizationInfo;
+import com.gk.firework.Domain.UserInfo;
+
+import java.util.Date;
+import java.util.List;
+
+public class UserVo extends UserInfo {
+    private String token;
+
+    private Long tokenexpired;
+
+    private Object roles;
+
+    private String roleType;
+
+    private Long logintime;
+
+    private String auth;
+
+    private String safetysupervision;
+
+    private List<AuthorizationInfo> authorizationCodes;
+
+    public String getToken() {
+        return token;
+    }
+
+    public void setToken(String token) {
+        this.token = token;
+    }
+
+    public Object getRoles() {
+        return roles;
+    }
+
+    public void setRoles(Object roles) {
+        this.roles = roles;
+    }
+
+    public Long getTokenexpired() {
+        return tokenexpired;
+    }
+
+    public void setTokenexpired(Long tokenexpired) {
+        this.tokenexpired = tokenexpired;
+    }
+
+    public String getRoleType() {
+        return roleType;
+    }
+
+    public void setRoleType(String roleType) {
+        this.roleType = roleType;
+    }
+
+    public Long getLogintime() {
+        return logintime;
+    }
+
+    public void setLogintime(Long logintime) {
+        this.logintime = logintime;
+    }
+
+    public String getAuth() {
+        return auth;
+    }
+
+    public void setAuth(String auth) {
+        this.auth = auth;
+    }
+
+    public List<AuthorizationInfo> getAuthorizationCodes() {
+        return authorizationCodes;
+    }
+
+    public void setAuthorizationCodes(List<AuthorizationInfo> authorizationCodes) {
+        this.authorizationCodes = authorizationCodes;
+    }
+
+    public String getSafetysupervision() {
+        return safetysupervision;
+    }
+
+    public void setSafetysupervision(String safetysupervision) {
+        this.safetysupervision = safetysupervision;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/WarnContentVo.java b/src/main/java/com/gk/firework/Domain/Vo/WarnContentVo.java
new file mode 100644
index 0000000..4ba6811
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/WarnContentVo.java
@@ -0,0 +1,86 @@
+package com.gk.firework.Domain.Vo;
+
+import com.gk.firework.Domain.WarnContentInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+@ApiModel("预警内容扩招类")
+public class WarnContentVo extends WarnContentInfo {
+
+    @ApiModelProperty("购买人身份证")
+    private String idcard;
+
+    @ApiModelProperty("购买人姓名")
+    private String purchasename;
+
+    @ApiModelProperty("购买人住址")
+    private String purchaseaddress;
+
+    @ApiModelProperty("企业类型")
+    private String enterprisetype;
+
+    @ApiModelProperty("企业名称")
+    private String enterprisename;
+
+    @ApiModelProperty("企业编号")
+    private String enterprisenumber;
+
+    @ApiModelProperty("办公地址")
+    private String officeaddress;
+
+    public String getIdcard() {
+        return idcard;
+    }
+
+    public void setIdcard(String idcard) {
+        this.idcard = idcard;
+    }
+
+    public String getPurchasename() {
+        return purchasename;
+    }
+
+    public void setPurchasename(String purchasename) {
+        this.purchasename = purchasename;
+    }
+
+    public String getPurchaseaddress() {
+        return purchaseaddress;
+    }
+
+    public void setPurchaseaddress(String purchaseaddress) {
+        this.purchaseaddress = purchaseaddress;
+    }
+
+    public String getEnterprisetype() {
+        return enterprisetype;
+    }
+
+    public void setEnterprisetype(String enterprisetype) {
+        this.enterprisetype = enterprisetype;
+    }
+
+    public String getEnterprisename() {
+        return enterprisename;
+    }
+
+    public void setEnterprisename(String enterprisename) {
+        this.enterprisename = enterprisename;
+    }
+
+    public String getEnterprisenumber() {
+        return enterprisenumber;
+    }
+
+    public void setEnterprisenumber(String enterprisenumber) {
+        this.enterprisenumber = enterprisenumber;
+    }
+
+    public String getOfficeaddress() {
+        return officeaddress;
+    }
+
+    public void setOfficeaddress(String officeaddress) {
+        this.officeaddress = officeaddress;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/Vo/ZplUtil.java b/src/main/java/com/gk/firework/Domain/Vo/ZplUtil.java
new file mode 100644
index 0000000..cc40290
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/Vo/ZplUtil.java
@@ -0,0 +1,81 @@
+package com.gk.firework.Domain.Vo;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.UnsupportedEncodingException;
+
+/**
+ * @author : jingjy
+ * @date : 2021/7/27 16:41
+ * @Description: 用于ZPL把文字转换为图片,但是生成数据太大,废弃
+ * @deprecated
+ */
+public class ZplUtil {
+    private byte[] dotFont;
+    private String sPrt = "";
+    private String sPrtBuffer ="";
+
+    public String getCharPicture(String str, int x, int y, int h, int w, int b){
+        printChineseChar(str,x,y,h,w,b);
+        return sPrtBuffer+sPrt;
+    }
+
+    public ZplUtil() throws Exception {
+        String path = "E:\\ts24.lib";
+        File file = new File(path);
+        FileInputStream fis = new FileInputStream(file);
+        dotFont = new byte[fis.available()];
+        fis.read(dotFont);
+        fis.close();
+    }
+
+    private void printChineseChar(String str, int x, int y, int h, int w, int b) {
+        byte[] ch = str2bytes(str);
+        for (int off = 0; off < ch.length;) {
+            if (((int) ch[off] & 0x00ff) >= 0xA0) {
+                int qcode = ch[off] & 0xff;
+                int wcode = ch[off + 1] & 0xff;
+                sPrtBuffer = sPrtBuffer
+                        + String.format("^FO%d,%d^XG0000%01X%01X,%d,%d^FS", x,
+                        y, qcode, wcode,b,b);
+                sPrt +=  String.format("~DG0000%02X%02X,00072,003,", qcode,
+                        wcode);
+                qcode = (qcode + 128 - 32) & 0x00ff;
+                wcode = (wcode + 128 - 32) & 0x00ff;
+                int offset = (qcode - 16) * 94 * 72 + (wcode - 1)
+                        * 72;
+                for (int j = 0; j < 72; j += 3) {
+                    qcode = (int) dotFont[j + offset] & 0x00ff;
+                    wcode = (int) dotFont[j + offset + 1] & 0x00ff;
+                    int qcode1 = (int) dotFont[j + offset + 2] & 0x00ff;
+                    sPrt +=  String.format("%02X%02X%02X", qcode, wcode,
+                            qcode1);
+                }
+                x = x + 25*b;
+                off = off + 2;
+            } else if (((int) ch[off] & 0x00FF) < 0xA0) {
+                ;
+                printChar(String.format("%c",ch[off]), x,  y, h, w);
+                x = x + 15;
+                off++;
+            }
+        }
+    }
+
+    private void printChar(String str, int x, int y, int h, int w) {
+        sPrtBuffer +="^FO"+x+","+y+"^A0,"+h+","+w+"^FD"+str+"^FS";
+    }
+
+    private byte[] str2bytes(String s) {
+        if (null == s || "".equals(s)) {
+            return null;
+        }
+        byte[] abytes = null;
+        try {
+            abytes = s.getBytes("gb2312");
+        } catch (UnsupportedEncodingException ex) {
+
+        }
+        return abytes;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/WarnContentInfo.java b/src/main/java/com/gk/firework/Domain/WarnContentInfo.java
new file mode 100644
index 0000000..8478ba6
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/WarnContentInfo.java
@@ -0,0 +1,179 @@
+package com.gk.firework.Domain;
+
+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 io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@ApiModel("报警内容类")
+@TableName("warncontent")
+public class WarnContentInfo implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 警告类型  warntype **/
+    private String warntype;
+
+    /** 警告级别  warnlevel **/
+    private String warnlevel;
+
+    /**报警内容**/
+    private String warncontent;
+
+    /** 购买人id  customid **/
+    private Long customid;
+
+    /** 企业id  enterpriseid **/
+    private Long enterpriseid;
+
+    /** 是否处理  ismend **/
+    private Byte ismend;
+
+    /** 是否需要发送短信  isneed **/
+    private Byte isneed;
+
+    /** 是否发送短信  issend **/
+    private Byte issend;
+
+    /**查询周期**/
+    private Integer period;
+
+    @ApiModelProperty("创建时间")
+    private Date createddate;
+
+    /** 更新人  modifiedby **/
+    @ApiModelProperty("更新人")
+    private String modifiedby;
+
+    /** 更新时间  modifieddate **/
+    @ApiModelProperty("更新时间")
+    private Date modifieddate;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   警告类型  warntype   **/
+    public String getWarntype() {
+        return warntype;
+    }
+
+    /**   警告类型  warntype   **/
+    public void setWarntype(String warntype) {
+        this.warntype = warntype == null ? null : warntype.trim();
+    }
+
+    /**   警告级别  warnlevel   **/
+    public String getWarnlevel() {
+        return warnlevel;
+    }
+
+    /**   警告级别  warnlevel   **/
+    public void setWarnlevel(String warnlevel) {
+        this.warnlevel = warnlevel == null ? null : warnlevel.trim();
+    }
+
+    /**   购买人id  customid   **/
+    public Long getCustomid() {
+        return customid;
+    }
+
+    /**   购买人id  customid   **/
+    public void setCustomid(Long customid) {
+        this.customid = customid;
+    }
+
+    /**   企业id  enterpriseid   **/
+    public Long getEnterpriseid() {
+        return enterpriseid;
+    }
+
+    /**   企业id  enterpriseid   **/
+    public void setEnterpriseid(Long enterpriseid) {
+        this.enterpriseid = enterpriseid;
+    }
+
+    /**   是否处理  ismend   **/
+    public Byte getIsmend() {
+        return ismend;
+    }
+
+    /**   是否处理  ismend   **/
+    public void setIsmend(Byte ismend) {
+        this.ismend = ismend;
+    }
+
+    /**   是否需要发送短信  isneed   **/
+    public Byte getIsneed() {
+        return isneed;
+    }
+
+    /**   是否需要发送短信  isneed   **/
+    public void setIsneed(Byte isneed) {
+        this.isneed = isneed;
+    }
+
+    /**   是否发送短信  issend   **/
+    public Byte getIssend() {
+        return issend;
+    }
+
+    /**   是否发送短信  issend   **/
+    public void setIssend(Byte issend) {
+        this.issend = issend;
+    }
+
+    public String getModifiedby() {
+        return modifiedby;
+    }
+
+    public void setModifiedby(String modifiedby) {
+        this.modifiedby = modifiedby;
+    }
+
+    public Date getModifieddate() {
+        return modifieddate;
+    }
+
+    public void setModifieddate(Date modifieddate) {
+        this.modifieddate = modifieddate;
+    }
+
+    public String getWarncontent() {
+        return warncontent;
+    }
+
+    public void setWarncontent(String warncontent) {
+        this.warncontent = warncontent;
+    }
+
+    public Integer getPeriod() {
+        return period;
+    }
+
+    public void setPeriod(Integer period) {
+        this.period = period;
+    }
+
+    public Date getCreateddate() {
+        return createddate;
+    }
+
+    public void setCreateddate(Date createddate) {
+        this.createddate = createddate;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Domain/WarningInfo.java b/src/main/java/com/gk/firework/Domain/WarningInfo.java
new file mode 100644
index 0000000..573fbf6
--- /dev/null
+++ b/src/main/java/com/gk/firework/Domain/WarningInfo.java
@@ -0,0 +1,133 @@
+package com.gk.firework.Domain;
+
+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 io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@ApiModel("报警阈值类")
+@TableName("warning")
+public class WarningInfo implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 警告类型  warntype **/
+    private String warntype;
+
+    /** 计算周期(天)  period **/
+    private Integer period;
+
+    /** 企业类型  enterprisetype **/
+    private String enterprisetype;
+
+    /** 报警是否开启短信通知  issms **/
+    private Byte issms;
+
+    /** 预警值  minimum **/
+    private Integer minimum;
+
+    /** 报警值  maximum **/
+    private Integer maximum;
+
+    /** 更新人  modifiedby **/
+    @ApiModelProperty("更新人")
+    private String modifiedby;
+
+    /** 更新时间  modifieddate **/
+    @ApiModelProperty("更新时间")
+    private Date modifieddate;
+
+    /**     id   **/
+    public Long getId() {
+        return id;
+    }
+
+    /**     id   **/
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    /**   类型  warntype   **/
+    public String getWarntype() {
+        return warntype;
+    }
+
+    /**   类型  warntype   **/
+    public void setWarntype(String warntype) {
+        this.warntype = warntype == null ? null : warntype.trim();
+    }
+
+    /**   计算周期(天)  period   **/
+    public Integer getPeriod() {
+        return period;
+    }
+
+    /**   计算周期(天)  period   **/
+    public void setPeriod(Integer period) {
+        this.period = period;
+    }
+
+    /**   企业类型  enterprisetype   **/
+    public String getEnterprisetype() {
+        return enterprisetype;
+    }
+
+    /**   企业类型  enterprisetype   **/
+    public void setEnterprisetype(String enterprisetype) {
+        this.enterprisetype = enterprisetype == null ? null : enterprisetype.trim();
+    }
+
+    /**   报警是否开启短信通知  issms   **/
+    public Byte getIssms() {
+        return issms;
+    }
+
+    /**   报警是否开启短信通知  issms   **/
+    public void setIssms(Byte issms) {
+        this.issms = issms;
+    }
+
+    /**   预警值  minimum   **/
+    public Integer getMinimum() {
+        return minimum;
+    }
+
+    /**   预警值  minimum   **/
+    public void setMinimum(Integer minimum) {
+        this.minimum = minimum;
+    }
+
+    /**   报警值  maximum   **/
+    public Integer getMaximum() {
+        return maximum;
+    }
+
+    /**   报警值  maximum   **/
+    public void setMaximum(Integer maximum) {
+        this.maximum = maximum;
+    }
+
+    public String getModifiedby() {
+        return modifiedby;
+    }
+
+    public void setModifiedby(String modifiedby) {
+        this.modifiedby = modifiedby;
+    }
+
+    public Date getModifieddate() {
+        return modifieddate;
+    }
+
+    public void setModifieddate(Date modifieddate) {
+        this.modifieddate = modifieddate;
+    }
+}
diff --git a/src/main/java/com/gk/firework/FireworkApplication.java b/src/main/java/com/gk/firework/FireworkApplication.java
new file mode 100644
index 0000000..38a7fe0
--- /dev/null
+++ b/src/main/java/com/gk/firework/FireworkApplication.java
@@ -0,0 +1,40 @@
+package com.gk.firework;
+
+import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
+import org.springframework.scheduling.TaskScheduler;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
+import org.springframework.stereotype.Repository;
+import org.springframework.web.bind.annotation.CrossOrigin;
+
+@CrossOrigin
+//@MapperScan(basePackages = "com.gk.electrical.Mapper",annotationClass = Repository.class)
+@EnableAsync
+@SpringBootApplication
+public class FireworkApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(FireworkApplication.class, args);
+    }
+
+    /**
+     * 分页插件
+     */
+    @Bean
+    public PaginationInterceptor paginationInterceptor() {
+        return new PaginationInterceptor();
+    }
+
+    /**多任务时间调度**/
+    @Bean
+    public TaskScheduler taskScheduler() {
+        ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
+        taskScheduler.setPoolSize(50);
+        return taskScheduler;
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Mapper/AccessAssessApplyMapper.java b/src/main/java/com/gk/firework/Mapper/AccessAssessApplyMapper.java
new file mode 100644
index 0000000..4b2ec61
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/AccessAssessApplyMapper.java
@@ -0,0 +1,27 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.AccessAssessApply;
+import com.gk.firework.Domain.AssessApply;
+import com.gk.firework.Domain.Enum.AssessAppealStatus;
+import com.gk.firework.Domain.Enum.AssessType;
+import com.gk.firework.Domain.Enum.PunishStatus;
+import com.gk.firework.Domain.Vo.AssessApplyAppealVo;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface AccessAssessApplyMapper extends BaseMapper<AccessAssessApply> {
+
+    List<AccessAssessApply> selectPages(Map params, Page<AccessAssessApply> page);
+
+    List<AssessApplyAppealVo> selectAppealPages(Map params, Page<AssessApplyAppealVo> page);
+
+    List<AccessAssessApply> selectAllOverTimeAccessAssessApply(AssessType access, AssessAppealStatus passed, PunishStatus unPunish);
+
+    List<AccessAssessApply> selectAllPunishingAccessAssessApply(AssessType access, PunishStatus punishing);
+
+}
diff --git a/src/main/java/com/gk/firework/Mapper/AppFileInfoMapper.java b/src/main/java/com/gk/firework/Mapper/AppFileInfoMapper.java
new file mode 100644
index 0000000..1dcf07d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/AppFileInfoMapper.java
@@ -0,0 +1,25 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.AppFileInfo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface AppFileInfoMapper extends BaseMapper<AppFileInfo> {
+    int deleteByPrimaryKey(Long id);
+
+    AppFileInfo selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(AppFileInfo record);
+
+    int updateByPrimaryKey(AppFileInfo record);
+
+    List<AppFileInfo> selectDataGrid(Page<AppFileInfo> page, Map<String, Object> condition);
+
+    AppFileInfo selectNew(@Param("filetype") String filetype);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/AssessApplyMapper.java b/src/main/java/com/gk/firework/Mapper/AssessApplyMapper.java
new file mode 100644
index 0000000..aa93744
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/AssessApplyMapper.java
@@ -0,0 +1,20 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.AssessApply;
+import com.gk.firework.Domain.Enum.AssessType;
+import com.gk.firework.Domain.Enum.PunishStatus;
+import com.gk.firework.Domain.Vo.AssessApplyAppealVo;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface AssessApplyMapper extends BaseMapper<AssessApply> {
+
+    List<AssessApply> selectPages(Map params, Page<AssessApply> page);
+
+    List<AssessApply> selectAllPunishingSaleAssessApply(AssessType sale, PunishStatus punishing);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/AuthorizationInfoMapper.java b/src/main/java/com/gk/firework/Mapper/AuthorizationInfoMapper.java
new file mode 100644
index 0000000..e9d2fc7
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/AuthorizationInfoMapper.java
@@ -0,0 +1,13 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.AuthorizationInfo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface AuthorizationInfoMapper extends BaseMapper<AuthorizationInfo> {
+
+    AuthorizationInfo selectByUser(@Param("enterprisenumber") String enterprisenumber,@Param("authcode") String authcode);
+
+}
diff --git a/src/main/java/com/gk/firework/Mapper/BlackListMapper.java b/src/main/java/com/gk/firework/Mapper/BlackListMapper.java
new file mode 100644
index 0000000..a921243
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/BlackListMapper.java
@@ -0,0 +1,15 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.BlackList;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface BlackListMapper extends BaseMapper<BlackList> {
+
+    List<BlackList> selectPages(Page<BlackList> page, Map params);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/ContractDetailInfoMapper.java b/src/main/java/com/gk/firework/Mapper/ContractDetailInfoMapper.java
new file mode 100644
index 0000000..c6bc414
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/ContractDetailInfoMapper.java
@@ -0,0 +1,29 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.ContractDetailInfo;
+import com.gk.firework.Domain.Vo.ProductVo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.Date;
+import java.util.List;
+
+@Repository
+public interface ContractDetailInfoMapper extends BaseMapper<ContractDetailInfo> {
+    int deleteByPrimaryKey(Long id);
+
+    ContractDetailInfo selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(ContractDetailInfo record);
+
+    int updateByPrimaryKey(ContractDetailInfo record);
+
+    void deleteByOrder(String ordercode);
+
+    List<ProductVo> selectByOrder(String ordercode);
+
+    void updateChangNum(String ordercode, String productCode, Integer returnNum);
+
+    List<ContractDetailInfo> selectAllDetailAtSpecificDate(@Param("productCode")String productCode, @Param("producedate") Date producedate);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/ContractFileMapper.java b/src/main/java/com/gk/firework/Mapper/ContractFileMapper.java
new file mode 100644
index 0000000..8f58979
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/ContractFileMapper.java
@@ -0,0 +1,10 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.ContractFile;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface ContractFileMapper extends BaseMapper<ContractFile> {
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/ContractLogInfoMapper.java b/src/main/java/com/gk/firework/Mapper/ContractLogInfoMapper.java
new file mode 100644
index 0000000..5e4d660
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/ContractLogInfoMapper.java
@@ -0,0 +1,16 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.ContractLogInfo;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface ContractLogInfoMapper extends BaseMapper<ContractLogInfo> {
+    int deleteByPrimaryKey(Long id);
+
+    ContractLogInfo selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(ContractLogInfo record);
+
+    int updateByPrimaryKey(ContractLogInfo record);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/ContractOrderInfoMapper.java b/src/main/java/com/gk/firework/Mapper/ContractOrderInfoMapper.java
new file mode 100644
index 0000000..ae324ef
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/ContractOrderInfoMapper.java
@@ -0,0 +1,33 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.ContractOrderInfo;
+import com.gk.firework.Domain.Vo.ContractOrderVo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface ContractOrderInfoMapper extends BaseMapper<ContractOrderInfo> {
+    int deleteByPrimaryKey(Long id);
+
+
+    int insertSelective(ContractOrderInfo record);
+
+    ContractOrderInfo selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(ContractOrderInfo record);
+
+    List<ContractOrderVo> selectDataGrid(Page<ContractOrderVo> page, Map<String, Object> condition);
+
+    List<ContractOrderInfo> selectByStatus(@Param("status") String status,@Param("now") String now);
+
+    ContractOrderInfo selectByOrderCode(@Param("ordercode") String ordercode);
+
+    int selectCountToday();
+
+    void updateReturnStatus(String ordercode, String returnstatus);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/ContractUnitDetailMapper.java b/src/main/java/com/gk/firework/Mapper/ContractUnitDetailMapper.java
new file mode 100644
index 0000000..cc7892a
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/ContractUnitDetailMapper.java
@@ -0,0 +1,15 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.ContractUnitDetail;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface ContractUnitDetailMapper extends BaseMapper<ContractUnitDetail> {
+
+    List<ContractUnitDetail> selectPages(Page<ContractUnitDetail> page, Map params);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/ControlPrintParamMapper.java b/src/main/java/com/gk/firework/Mapper/ControlPrintParamMapper.java
new file mode 100644
index 0000000..dc82e41
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/ControlPrintParamMapper.java
@@ -0,0 +1,15 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.ControlPrintParam;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface ControlPrintParamMapper extends BaseMapper<ControlPrintParam> {
+
+    List<ControlPrintParam> selectDataGrid(Page<ControlPrintParam> page, Map<String, Object> condition);
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/CustomerInfoMapper.java b/src/main/java/com/gk/firework/Mapper/CustomerInfoMapper.java
new file mode 100644
index 0000000..fe9dcbd
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/CustomerInfoMapper.java
@@ -0,0 +1,16 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.CustomerInfo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface CustomerInfoMapper extends BaseMapper<CustomerInfo> {
+
+    CustomerInfo selectCustomerByIdCardNum(@Param("idCardNumber") String idCardNumber);
+
+    CustomerInfo getCustomerBySaleOrder(@Param("orderCode") String orderCode);
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/DeliveryDetailInfoMapper.java b/src/main/java/com/gk/firework/Mapper/DeliveryDetailInfoMapper.java
new file mode 100644
index 0000000..0a5fba4
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/DeliveryDetailInfoMapper.java
@@ -0,0 +1,32 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.DeliveryDetailInfo;
+import com.gk.firework.Domain.DeliveryOrderInfo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface DeliveryDetailInfoMapper extends BaseMapper<DeliveryDetailInfo> {
+
+    List<Map> selectDetailPage(Page<Map> page, Map params);
+
+    List<Map> selectDetailExport(@Param("code") String code);
+
+    BigDecimal selectEnterpriseDeliveryNumber(String enterprisenumber, Object starttime, Object endtime);
+
+    List<Map> selectEnterpriseTypeDelivery(Page<Map> page,@Param("params") Map<String, Object> params, @Param("list") List<String> list);
+
+    Map selectAllType(@Param("params") Map<String, Object> params,  @Param("list") List<String> list);
+
+    List<Map> selectEnterpriseTypeDelivery(@Param("params") Map<String, Object> params,  @Param("list") List<String> list);
+
+    List<Map> selectCityTypeDelivery(Page<Map> page,@Param("params") Map<String, Object> params,@Param("list")  List<String> list);
+
+    List<Map> selectCityTypeDelivery(@Param("params")Map<String, Object> params,@Param("list") List<String> list);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/DeliveryOrderInfoMapper.java b/src/main/java/com/gk/firework/Mapper/DeliveryOrderInfoMapper.java
new file mode 100644
index 0000000..459643c
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/DeliveryOrderInfoMapper.java
@@ -0,0 +1,29 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.DeliveryOrderInfo;
+import com.gk.firework.Domain.Vo.DeliveryOrderInfoVo;
+import com.gk.firework.Domain.Vo.ProductVo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface DeliveryOrderInfoMapper extends BaseMapper<DeliveryOrderInfo> {
+
+    List<DeliveryOrderInfoVo> selectPages(Page<DeliveryOrderInfoVo> page, Map params);
+
+    BigDecimal getDeliveryNum(@Param("condition") Map<String, Object> condition);
+
+    BigDecimal getReturnDeliveryNum(@Param("condition") Map<String, Object> condition);
+
+    DeliveryOrderInfo selectDeliveryOrderByTimeAndUser(@Param("datetime") String datetime, @Param("username") String username);
+
+    List<DeliveryOrderInfo> selectPages(@Param("params") Map params);
+
+    List<ProductVo> getProductVosByCert(@Param("cert") String cert);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/DictionaryItemInfoMapper.java b/src/main/java/com/gk/firework/Mapper/DictionaryItemInfoMapper.java
new file mode 100644
index 0000000..8e2567d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/DictionaryItemInfoMapper.java
@@ -0,0 +1,33 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.DictionaryItemInfo;
+import com.gk.firework.Domain.DictionaryTypeInfo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface DictionaryItemInfoMapper extends BaseMapper<DictionaryItemInfo> {
+
+    int deleteByPrimaryKey(Long id);
+
+    int insert(DictionaryItemInfo record);
+
+    int insertSelective(DictionaryItemInfo record);
+
+    DictionaryItemInfo selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(DictionaryItemInfo record);
+
+    int updateByPrimaryKey(DictionaryItemInfo record);
+
+    List<DictionaryItemInfo> selectDataGrid(Page<DictionaryItemInfo> page, Map<String, Object> condition);
+
+    List<DictionaryTypeInfo> selectExistInfo(@Param("id") Long id,@Param("value") String value,@Param("text") String text);
+
+    List<DictionaryItemInfo> selectByType(@Param("dictionaryType") String dictionaryType);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/DictionaryTypeInfoMapper.java b/src/main/java/com/gk/firework/Mapper/DictionaryTypeInfoMapper.java
new file mode 100644
index 0000000..1459f94
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/DictionaryTypeInfoMapper.java
@@ -0,0 +1,29 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.DictionaryTypeInfo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface DictionaryTypeInfoMapper extends BaseMapper<DictionaryTypeInfo> {
+    int deleteByPrimaryKey(Long id);
+
+    int insert(DictionaryTypeInfo record);
+
+    int insertSelective(DictionaryTypeInfo record);
+
+    DictionaryTypeInfo selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(DictionaryTypeInfo record);
+
+    int updateByPrimaryKey(DictionaryTypeInfo record);
+
+    List<DictionaryTypeInfo> selectDataGrid(Page<DictionaryTypeInfo> page, Map<String, Object> condition);
+
+    List<DictionaryTypeInfo> selectExistInfo(@Param("id") Long id,@Param("code") String code,@Param("text") String text);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/DistrictInfoMapper.java b/src/main/java/com/gk/firework/Mapper/DistrictInfoMapper.java
new file mode 100644
index 0000000..729f883
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/DistrictInfoMapper.java
@@ -0,0 +1,23 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.DistrictInfo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface DistrictInfoMapper extends BaseMapper<DistrictInfo> {
+    int deleteByPrimaryKey(Long id);
+
+    DistrictInfo selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(DistrictInfo record);
+
+    int updateByPrimaryKey(DistrictInfo record);
+
+    List<DistrictInfo> selectDistrictInfo(@Param("type") String type,@Param("parentcode") String parentcode);
+
+    List<DistrictInfo> selectDistrictByName(@Param("type") String type,@Param("parentname") String parentname,@Param("parenttype") String parenttype);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/EnterpriseAnnualMapper.java b/src/main/java/com/gk/firework/Mapper/EnterpriseAnnualMapper.java
new file mode 100644
index 0000000..06d0e36
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/EnterpriseAnnualMapper.java
@@ -0,0 +1,10 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.EnterpriseAnnual;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface EnterpriseAnnualMapper extends BaseMapper<EnterpriseAnnual> {
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/EnterpriseApplyMapper.java b/src/main/java/com/gk/firework/Mapper/EnterpriseApplyMapper.java
new file mode 100644
index 0000000..2631120
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/EnterpriseApplyMapper.java
@@ -0,0 +1,10 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.EnterpriseApply;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface EnterpriseApplyMapper extends BaseMapper<EnterpriseApply> {
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/EnterpriseDocumentMapper.java b/src/main/java/com/gk/firework/Mapper/EnterpriseDocumentMapper.java
new file mode 100644
index 0000000..4baa4a8
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/EnterpriseDocumentMapper.java
@@ -0,0 +1,17 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.EnterpriseDocument;
+import com.gk.firework.Domain.Enum.DocumentType;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface EnterpriseDocumentMapper extends BaseMapper<EnterpriseDocument> {
+
+    List<EnterpriseDocument> selectPages(Page<EnterpriseDocument> page, Map params);
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/EnterpriseFeedMapper.java b/src/main/java/com/gk/firework/Mapper/EnterpriseFeedMapper.java
new file mode 100644
index 0000000..8d3b755
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/EnterpriseFeedMapper.java
@@ -0,0 +1,20 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.EnterpriseFeed;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface EnterpriseFeedMapper extends BaseMapper<EnterpriseFeed> {
+
+    List<EnterpriseFeed> selectPages(Page<EnterpriseFeed> page, Map params);
+
+    List<Map> selectExportFeed(@Param("params") Map params);
+
+    List<Map> selectExportFeedById(@Param("id") Long id);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/EnterpriseLicenseMapper.java b/src/main/java/com/gk/firework/Mapper/EnterpriseLicenseMapper.java
new file mode 100644
index 0000000..7ddaee1
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/EnterpriseLicenseMapper.java
@@ -0,0 +1,20 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.EnterpriseLicense;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface EnterpriseLicenseMapper extends BaseMapper<EnterpriseLicense> {
+
+
+    List<EnterpriseLicense> selectPages(Page<EnterpriseLicense> page, Map params);
+
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/EnterpriseMapper.java b/src/main/java/com/gk/firework/Mapper/EnterpriseMapper.java
new file mode 100644
index 0000000..0413761
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/EnterpriseMapper.java
@@ -0,0 +1,71 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.Enterprise;
+import com.gk.firework.Domain.Vo.EnterpriseExportVo;
+import com.gk.firework.Domain.Vo.EnterpriseVo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface EnterpriseMapper extends BaseMapper<Enterprise> {
+
+    void deleteOne(@Param("id") Long id);
+
+    List<Enterprise> selectPages(Page<Enterprise> page, Map params);
+
+    List<Enterprise> selectPages(Map params);
+
+    List<Enterprise> selectParentPage(Page<Enterprise> page, Map params);
+
+    List<Long> selectEnterpriseIdsByLocation(@Param("province") String province,@Param("city") String city,@Param("district") String district,@Param("street") String street,@Param("committee") String committee);
+
+    List<Enterprise> selectEnterpriseListByLocation(@Param("province") String province,@Param("city") String city,@Param("district") String district,@Param("street") String street,@Param("committee") String committee);
+
+    List<Enterprise> selectEnterpriseListByNameLike(@Param("name") String name);
+
+    EnterpriseVo selctSimpleByNumber(@Param("enterprisenumber") String enterprisenumber);
+
+    Map selectInAndOut(@Param("enterprisenumber") String enterpriseNumber,@Param("starttime") Date startTime);
+
+    List<Map> getAllLocation(@Param("city") String city);
+
+    List<Map> getRetailStatisticsByArea(Map params);
+
+    List<EnterpriseExportVo> selectExportEnterprise(@Param("params") Map params);
+
+    /**
+    * @Description: 获取零售店数量
+    * @date 2021/4/25 9:56
+    */
+    int getSaleNum(Map params);
+
+    List<Enterprise> selectSaleEnterprise(Map<String, Object> params, Page<Enterprise> page);
+
+    int countAllUndoneEnterprise(@Param("params")Map params);
+
+    List<Enterprise> selectListUnderSupervision(@Param("params")Map params);
+
+    List<Enterprise> selectUndoneList(Page<Enterprise> page, Map params);
+
+    List<Enterprise> selectUndoneList(@Param("params") Map params);
+
+    int countAllEnterpriseExpired(@Param("params")Map params);
+
+    List<Enterprise> selectExpiredList(Page<Enterprise> page, Map params);
+
+    List<Enterprise> selectExpiredList(@Param("params")Map params);
+
+    List<Enterprise> getEnterpriseByLimit(@Param("condition") Map<String, Object> condition);
+
+    Integer getEnterpriseByLimitCount(@Param("condition") Map<String, Object> condition);
+
+    void updateCompanyCodeAndSetDeviceIdNull(Enterprise e);
+
+    void updateLoginValidFlag(@Param("id") Long id,@Param("flag") boolean flag);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/EnterprisePersonMapper.java b/src/main/java/com/gk/firework/Mapper/EnterprisePersonMapper.java
new file mode 100644
index 0000000..637d07f
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/EnterprisePersonMapper.java
@@ -0,0 +1,17 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.EnterprisePerson;
+import com.gk.firework.Domain.Enum.PersonnelCategory;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface EnterprisePersonMapper extends BaseMapper<EnterprisePerson> {
+
+    List<EnterprisePerson> selectPages(Page<EnterprisePerson> page, Map params);
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/EnterpriseResourceMapper.java b/src/main/java/com/gk/firework/Mapper/EnterpriseResourceMapper.java
new file mode 100644
index 0000000..3c476c6
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/EnterpriseResourceMapper.java
@@ -0,0 +1,17 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.EnterpriseResource;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.Map;
+import java.util.List;
+
+@Repository
+public interface EnterpriseResourceMapper extends BaseMapper<EnterpriseResource> {
+
+    List<EnterpriseResource> selectInner(Map params);
+
+    List<String> getUrlByBelongIdAndType(@Param("id") Long id, @Param("type") String type);
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/EnterpriseStaffMapper.java b/src/main/java/com/gk/firework/Mapper/EnterpriseStaffMapper.java
new file mode 100644
index 0000000..607f897
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/EnterpriseStaffMapper.java
@@ -0,0 +1,10 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.EnterpriseStaff;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface EnterpriseStaffMapper extends BaseMapper<EnterpriseStaff> {
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/EnterpriseStandardizationMapper.java b/src/main/java/com/gk/firework/Mapper/EnterpriseStandardizationMapper.java
new file mode 100644
index 0000000..024ab27
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/EnterpriseStandardizationMapper.java
@@ -0,0 +1,19 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.EnterpriseStandardization;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+import org.springframework.stereotype.Repository;
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface EnterpriseStandardizationMapper extends BaseMapper<EnterpriseStandardization> {
+
+    List<EnterpriseStandardization> selectPages(Page<EnterpriseStandardization> page, Map params);
+
+    List<EnterpriseStandardization> selectStandardization(Map params);
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/EnterpriseWarehouseMapper.java b/src/main/java/com/gk/firework/Mapper/EnterpriseWarehouseMapper.java
new file mode 100644
index 0000000..6b0d8e8
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/EnterpriseWarehouseMapper.java
@@ -0,0 +1,17 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.Enterprise;
+import com.gk.firework.Domain.EnterpriseWarehouse;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface EnterpriseWarehouseMapper extends BaseMapper<EnterpriseWarehouse> {
+
+    List<EnterpriseWarehouse> selectPages(Page<EnterpriseWarehouse> page, Map params);
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/EntryDetailInfoMapper.java b/src/main/java/com/gk/firework/Mapper/EntryDetailInfoMapper.java
new file mode 100644
index 0000000..c2d54d3
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/EntryDetailInfoMapper.java
@@ -0,0 +1,35 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.EntryDetailInfo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface EntryDetailInfoMapper extends BaseMapper<EntryDetailInfo> {
+
+    EntryDetailInfo selectByPrimaryKey(Long id);
+
+    List<Map> selectDetailPage(Page<Map> page, Map params);
+
+    BigDecimal getEntryNumByCondition(@Param("condition") Map<String, Object> condition);
+
+    BigDecimal getReturnNumByCondition(@Param("condition") Map<String, Object> condition);
+
+    List<Map> selectDetailExport(@Param("code") String code);
+
+    List<Map> selectEnterpriseTypeEntry(Page<Map> page, @Param("params")Map<String, Object> filter,@Param("list") List<String> list);
+
+    Map selectAllType(@Param("params")Map<String, Object> params,@Param("list")  List<String> list);
+
+    List<Map> selectEnterpriseTypeEntry(@Param("params")Map<String, Object> params, @Param("list")List<String> list);
+
+    List<Map> selectCityTypeEntry(Page<Map> page, @Param("params")Map<String, Object> params, @Param("list")List<String> list);
+
+    List<Map> selectCityTypeEntry(@Param("params")Map<String, Object> params,  @Param("list")List<String> list);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/EntryOrderInfoMapper.java b/src/main/java/com/gk/firework/Mapper/EntryOrderInfoMapper.java
new file mode 100644
index 0000000..a405049
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/EntryOrderInfoMapper.java
@@ -0,0 +1,31 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.EntryOrderInfo;
+import com.gk.firework.Domain.Vo.EntryOrderInfoVo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface EntryOrderInfoMapper extends BaseMapper<EntryOrderInfo> {
+
+    EntryOrderInfo selectByPrimaryKey(Long id);
+
+    List<EntryOrderInfoVo> selectPages(Page<EntryOrderInfoVo> page, Map params);
+
+    EntryOrderInfo selectEntryOrderByTimeAndUser(@Param("datetime") String datetime, @Param("createdby") String createdby);
+
+    List<EntryOrderInfo> selectPages(@Param("params") Map params);
+
+    BigDecimal selectEnterpriseEntryNumber(@Param("companyNumber") String companyNumber,
+                                           @Param("starttime") Object starttime, @Param("endtime") Object endtime);
+
+    BigDecimal selectCityEntryNumber(@Param("city") String name, @Param("starttime") Object starttime, @Param("endtime") Object endtime);
+
+    List<EntryOrderInfo> selectByCert(@Param("code") String code);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/HelpDocInfoMapper.java b/src/main/java/com/gk/firework/Mapper/HelpDocInfoMapper.java
new file mode 100644
index 0000000..bffde9f
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/HelpDocInfoMapper.java
@@ -0,0 +1,15 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.HelpDocInfo;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface HelpDocInfoMapper extends BaseMapper<HelpDocInfo> {
+
+    List<HelpDocInfo> selectDataGrid(Page<HelpDocInfo> page, Map<String, Object> condition);
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/HiddenDangerCheckContentMapper.java b/src/main/java/com/gk/firework/Mapper/HiddenDangerCheckContentMapper.java
new file mode 100644
index 0000000..f45043b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/HiddenDangerCheckContentMapper.java
@@ -0,0 +1,18 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.HiddenDangerCheckContent;
+import com.gk.firework.Domain.Vo.HiddenDangerTableRow;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface HiddenDangerCheckContentMapper extends BaseMapper<HiddenDangerCheckContent> {
+
+    List<HiddenDangerCheckContent> selectContent(Map params);
+
+    List<HiddenDangerTableRow> selectRow(Map params);
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/HiddenDangerCheckCriteriaMapper.java b/src/main/java/com/gk/firework/Mapper/HiddenDangerCheckCriteriaMapper.java
new file mode 100644
index 0000000..59dc763
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/HiddenDangerCheckCriteriaMapper.java
@@ -0,0 +1,17 @@
+package com.gk.firework.Mapper;
+
+import com.gk.firework.Domain.HiddenDangerCheckCriteria;
+
+public interface HiddenDangerCheckCriteriaMapper {
+    int deleteByPrimaryKey(Long id);
+
+    int insert(HiddenDangerCheckCriteria record);
+
+    int insertSelective(HiddenDangerCheckCriteria record);
+
+    HiddenDangerCheckCriteria selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(HiddenDangerCheckCriteria record);
+
+    int updateByPrimaryKey(HiddenDangerCheckCriteria record);
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/HiddenDangerCheckResultMapper.java b/src/main/java/com/gk/firework/Mapper/HiddenDangerCheckResultMapper.java
new file mode 100644
index 0000000..24cc87d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/HiddenDangerCheckResultMapper.java
@@ -0,0 +1,17 @@
+package com.gk.firework.Mapper;
+
+import com.gk.firework.Domain.HiddenDangerCheckResult;
+
+public interface HiddenDangerCheckResultMapper {
+    int deleteByPrimaryKey(Long id);
+
+    int insert(HiddenDangerCheckResult record);
+
+    int insertSelective(HiddenDangerCheckResult record);
+
+    HiddenDangerCheckResult selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(HiddenDangerCheckResult record);
+
+    int updateByPrimaryKey(HiddenDangerCheckResult record);
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/HiddenDangerCheckTypeMapper.java b/src/main/java/com/gk/firework/Mapper/HiddenDangerCheckTypeMapper.java
new file mode 100644
index 0000000..9aac1b8
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/HiddenDangerCheckTypeMapper.java
@@ -0,0 +1,17 @@
+package com.gk.firework.Mapper;
+
+import com.gk.firework.Domain.HiddenDangerCheckType;
+
+public interface HiddenDangerCheckTypeMapper {
+    int deleteByPrimaryKey(Long id);
+
+    int insert(HiddenDangerCheckType record);
+
+    int insertSelective(HiddenDangerCheckType record);
+
+    HiddenDangerCheckType selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(HiddenDangerCheckType record);
+
+    int updateByPrimaryKey(HiddenDangerCheckType record);
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/HiddenDangerMenuMapper.java b/src/main/java/com/gk/firework/Mapper/HiddenDangerMenuMapper.java
new file mode 100644
index 0000000..ebfe88d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/HiddenDangerMenuMapper.java
@@ -0,0 +1,14 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.HiddenDangerMenu;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface HiddenDangerMenuMapper extends BaseMapper<HiddenDangerMenu> {
+
+    List<HiddenDangerMenu> selectMenu();
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/HiddenDangerReportDetailMapper.java b/src/main/java/com/gk/firework/Mapper/HiddenDangerReportDetailMapper.java
new file mode 100644
index 0000000..49b0a9d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/HiddenDangerReportDetailMapper.java
@@ -0,0 +1,16 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.HiddenDangerReportDetail;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface HiddenDangerReportDetailMapper extends BaseMapper<HiddenDangerReportDetail> {
+
+    void update2Qualified(List<HiddenDangerReportDetail> upds2Qualified);
+
+    int countOverDueByReportCode(@Param("code") String code);
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/HiddenDangerReportMapper.java b/src/main/java/com/gk/firework/Mapper/HiddenDangerReportMapper.java
new file mode 100644
index 0000000..690d313
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/HiddenDangerReportMapper.java
@@ -0,0 +1,35 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.Enum.HiddenDangerReportStatus;
+import com.gk.firework.Domain.HiddenDangerReport;
+import com.gk.firework.Domain.HiddenDangerReportDetail;
+import com.gk.firework.Domain.Vo.HiddenDangerTableRow;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.security.core.parameters.P;
+import org.springframework.stereotype.Repository;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface HiddenDangerReportMapper extends BaseMapper<HiddenDangerReport> {
+
+    List<HiddenDangerReport> selectReportList(Page<HiddenDangerReport> page, Map params);
+
+    List<HiddenDangerReport> selectReportList(Map params);
+
+    List<HiddenDangerTableRow> selectReport(@Param("code")String code);
+
+    List<HiddenDangerTableRow> viewReport(@Param("code")String code);
+
+    void updateStatusByCode(HiddenDangerReportStatus status, String code);
+
+    HiddenDangerReport getReportByCode(@Param("code")String code);
+
+    List<Map> getReportList(@Param("enterprisenumber") String enterpriseNumber,@Param("starttime") Date startTime);
+
+    List<Map> selectExportReport(@Param("params") Map params);
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/HistoryStockMapper.java b/src/main/java/com/gk/firework/Mapper/HistoryStockMapper.java
new file mode 100644
index 0000000..8291c8a
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/HistoryStockMapper.java
@@ -0,0 +1,28 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.HistoryStock;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface HistoryStockMapper extends BaseMapper<HistoryStock> {
+
+    void insertDayHistoryStock();
+
+    List<Map> selectPages(Page<Map> page, Map<String, Object> params);
+
+    List<Map> selectCityStock(Page<Map> page, Map<String, Object> params);
+
+    Map selectAllCityStock(@Param("params") Map<String, Object> params);
+
+    Map selectDayHistoryStockTotal(@Param("params") Map<String, Object> params);
+
+    List<Map> selectHistoryCityStock(Page<Map> page, Map<String, Object> params);
+
+    List<Map> selectPages(@Param("params") Map<String, Object> params);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/LicenseInfoMapper.java b/src/main/java/com/gk/firework/Mapper/LicenseInfoMapper.java
new file mode 100644
index 0000000..88ba4fe
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/LicenseInfoMapper.java
@@ -0,0 +1,22 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.LicenseInfo;
+import com.gk.firework.Domain.Vo.LicenseVo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface LicenseInfoMapper extends BaseMapper<LicenseInfo> {
+
+    List<LicenseVo> selectLicenseDataGrid(Map<String, Object> condition, Page<LicenseInfo> page);
+
+    List<LicenseVo> selectLicenseDataGrid(@Param("condition") Map<String, Object> condition);
+
+    List<Map> selectLicenseStatisticPage(Page<Map> page, Map params);
+
+}
diff --git a/src/main/java/com/gk/firework/Mapper/LicenseStorageMapper.java b/src/main/java/com/gk/firework/Mapper/LicenseStorageMapper.java
new file mode 100644
index 0000000..e6b9d4e
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/LicenseStorageMapper.java
@@ -0,0 +1,9 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.LicenseStorage;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface LicenseStorageMapper extends BaseMapper<LicenseStorage> {
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/PatrolDetailInfoMapper.java b/src/main/java/com/gk/firework/Mapper/PatrolDetailInfoMapper.java
new file mode 100644
index 0000000..06b3e7a
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/PatrolDetailInfoMapper.java
@@ -0,0 +1,25 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.PatrolDetailInfo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface PatrolDetailInfoMapper extends BaseMapper<PatrolDetailInfo> {
+    int deleteByPrimaryKey(Long id);
+
+    PatrolDetailInfo selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(PatrolDetailInfo record);
+
+    int updateByPrimaryKey(PatrolDetailInfo record);
+
+    List<PatrolDetailInfo> selectDataGrid(Page<PatrolDetailInfo> page, Map<String, Object> condition);
+
+    int selectIsNotMend(@Param("orderid") Long orderid);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/PatrolOrderInfoMapper.java b/src/main/java/com/gk/firework/Mapper/PatrolOrderInfoMapper.java
new file mode 100644
index 0000000..f08121b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/PatrolOrderInfoMapper.java
@@ -0,0 +1,26 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.PatrolOrderInfo;
+import com.gk.firework.Domain.Vo.PatrolOrderVo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface PatrolOrderInfoMapper extends BaseMapper<PatrolOrderInfo> {
+    int deleteByPrimaryKey(Long id);
+
+    PatrolOrderInfo selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(PatrolOrderInfo record);
+
+    int updateByPrimaryKey(PatrolOrderInfo record);
+
+    List<PatrolOrderVo> selectDataGrid(Page<PatrolOrderVo> page, Map<String, Object> condition);
+
+    List<PatrolOrderVo> selectListByEnterprise(@Param("enterprisename") String enterprisename,@Param("username") String username);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/PermissionInfoMapper.java b/src/main/java/com/gk/firework/Mapper/PermissionInfoMapper.java
new file mode 100644
index 0000000..b1ea395
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/PermissionInfoMapper.java
@@ -0,0 +1,22 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.PermissionInfo;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface PermissionInfoMapper extends BaseMapper<PermissionInfo> {
+    int deleteByPrimaryKey(Integer id);
+
+    PermissionInfo selectByPrimaryKey(Integer id);
+
+    int updateByPrimaryKeySelective(PermissionInfo record);
+
+    int updateByPrimaryKey(PermissionInfo record);
+
+    List<PermissionInfo> selectAll();
+
+    List<PermissionInfo> selectByUserId(String userId);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/ProductCategoryMapper.java b/src/main/java/com/gk/firework/Mapper/ProductCategoryMapper.java
new file mode 100644
index 0000000..2963aa5
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/ProductCategoryMapper.java
@@ -0,0 +1,12 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.ProductCategory;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface ProductCategoryMapper extends BaseMapper<ProductCategory> {
+
+    int countOne(@Param("type") String type,@Param("secondaryType") String secondaryType,@Param("level") String level);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/ProductCodeInfoMapper.java b/src/main/java/com/gk/firework/Mapper/ProductCodeInfoMapper.java
new file mode 100644
index 0000000..b8c7131
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/ProductCodeInfoMapper.java
@@ -0,0 +1,29 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.ProductCodeInfo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface ProductCodeInfoMapper extends BaseMapper<ProductCodeInfo> {
+    int deleteByPrimaryKey(Long id);
+
+    int insert(ProductCodeInfo record);
+
+    int insertSelective(ProductCodeInfo record);
+
+    ProductCodeInfo selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(ProductCodeInfo record);
+
+    int updateByPrimaryKey(ProductCodeInfo record);
+
+    ProductCodeInfo selectByFourteen(@Param("fourteen") String fourteen,@Param("date") String date);
+
+    void insertBatch(@Param("list") List<ProductCodeInfo> productCodeInfoList);
+
+    List<ProductCodeInfo> selectByOrderCode(@Param("ordercode") String ordercode);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/ProductInfoMapper.java b/src/main/java/com/gk/firework/Mapper/ProductInfoMapper.java
new file mode 100644
index 0000000..92ebe4a
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/ProductInfoMapper.java
@@ -0,0 +1,49 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.DO.ProductDO;
+import com.gk.firework.Domain.ProductInfo;
+import com.gk.firework.Domain.ProductLocusInfo;
+import com.gk.firework.Domain.Vo.ProductVo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * @author jingjy
+ */
+@Repository
+public interface ProductInfoMapper extends BaseMapper<ProductInfo> {
+    /**
+     * 查询所有的产品信息
+     *
+     * @param condition 查询参数
+     * @return List<ProductInfo>
+     */
+    List<ProductInfo> selectProductInfos(Map<String, Object> condition);
+
+    List<ProductInfo> selectProductDataGrid(Map<String, Object> condition, Page<ProductInfo> page);
+
+    List<ProductInfo> selectProductsByDirectionCode(@Param("directionCode") String directionCode,@Param("companyNumber")String companyNumber);
+
+    ProductInfo selectProductByDirectionCode(@Param("directionCode") String directionCode);
+
+    ProductVo selectProductVoByDirectionCode(@Param("directionCode") String itemCode);
+
+    Integer getSliceByDirectionCode(@Param("directionCode") String directionCode);
+
+    void deleteByEnterpriseName(@Param("enterpriseName") String enterpriseName,@Param("name") String name);
+
+    List<ProductInfo> selectProductInfo(Map<String, Object> condition);
+
+    List<String> getAllProductCodes();
+
+    List<String> selectTypes();
+
+    List<ProductDO> selectDoByDirections(@Param("list") List<String> direction10Codes);
+
+}
diff --git a/src/main/java/com/gk/firework/Mapper/ProductLocusInfoMapper.java b/src/main/java/com/gk/firework/Mapper/ProductLocusInfoMapper.java
new file mode 100644
index 0000000..455b2ba
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/ProductLocusInfoMapper.java
@@ -0,0 +1,21 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.ProductLocusInfo;
+import com.gk.firework.Domain.Vo.ProductLocusVo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface ProductLocusInfoMapper extends BaseMapper<ProductLocusInfo> {
+
+    int insertProductLocus(@Param("productLocusInfo") ProductLocusInfo productLocusInfo, @Param("slice") String slice);
+
+    List<ProductLocusVo> selectLists(@Param("directionCode") String directionCode, @Param("slice")  String slice);
+
+    List<ProductLocusVo> selectFlowByCodes(@Param("codes") List<String> codes, @Param("slice")String slice);
+
+    int insertBatch(@Param("list") List<ProductLocusInfo> productLocuses);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/ProductPriceInfoMapper.java b/src/main/java/com/gk/firework/Mapper/ProductPriceInfoMapper.java
new file mode 100644
index 0000000..fd335f3
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/ProductPriceInfoMapper.java
@@ -0,0 +1,24 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.ProductPriceInfo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface ProductPriceInfoMapper extends BaseMapper<ProductPriceInfo> {
+
+    int deleteByPrimaryKey(Long id);
+
+    ProductPriceInfo selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(ProductPriceInfo record);
+
+    int updateByPrimaryKey(ProductPriceInfo record);
+
+    ProductPriceInfo selectByCode(@Param("companynumber") String companynumber,@Param("directionCode") String directionCode);
+
+    List<ProductPriceInfo> selectByCodes(@Param("companynumber") String companynumber,@Param("list") List<String> direction10CodesList);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/ProductThresholdInfoMapper.java b/src/main/java/com/gk/firework/Mapper/ProductThresholdInfoMapper.java
new file mode 100644
index 0000000..41a3403
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/ProductThresholdInfoMapper.java
@@ -0,0 +1,10 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.ProductThresholdInfo;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface ProductThresholdInfoMapper extends BaseMapper<ProductThresholdInfo> {
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/RegisterInfoMapper.java b/src/main/java/com/gk/firework/Mapper/RegisterInfoMapper.java
new file mode 100644
index 0000000..1f90b21
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/RegisterInfoMapper.java
@@ -0,0 +1,16 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.RegisterInfo;
+import com.gk.firework.Domain.Vo.RegisterVo;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface RegisterInfoMapper extends BaseMapper<RegisterInfo> {
+
+    List<RegisterVo> selectDataGrid(Map<String, Object> condition, Page<RegisterVo> page);
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/RoleInfoMapper.java b/src/main/java/com/gk/firework/Mapper/RoleInfoMapper.java
new file mode 100644
index 0000000..3b37d24
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/RoleInfoMapper.java
@@ -0,0 +1,26 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.RoleInfo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+
+@Repository
+public interface RoleInfoMapper extends BaseMapper<RoleInfo> {
+    int deleteByPrimaryKey(Long id);
+
+    RoleInfo selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(RoleInfo record);
+
+    int updateByPrimaryKey(RoleInfo record);
+
+    List<RoleInfo> selectRoleByUser(Long id);
+
+    List<RoleInfo> selectList(String name);
+
+    List<RoleInfo> selectExistRole(@Param("id") Long id, @Param("name") String name);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/RolePermissionsInfoMapper.java b/src/main/java/com/gk/firework/Mapper/RolePermissionsInfoMapper.java
new file mode 100644
index 0000000..4dcc548
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/RolePermissionsInfoMapper.java
@@ -0,0 +1,23 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.RolePermissionsInfo;
+import com.gk.firework.Domain.Vo.Menu;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface RolePermissionsInfoMapper extends BaseMapper<RolePermissionsInfo> {
+    int deleteByPrimaryKey(Long id);
+
+    RolePermissionsInfo selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(RolePermissionsInfo record);
+
+    int updateByPrimaryKey(RolePermissionsInfo record);
+
+    List<Menu> selectMenuList(String roleId);
+
+    void delRolePermissionByRoleId(Long roleid);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/SaleOrderDetailInfoMapper.java b/src/main/java/com/gk/firework/Mapper/SaleOrderDetailInfoMapper.java
new file mode 100644
index 0000000..294d174
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/SaleOrderDetailInfoMapper.java
@@ -0,0 +1,87 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.SaleOrderDetailInfo;
+import com.gk.firework.Domain.Vo.SaleDetailVo;
+import com.gk.firework.Domain.Vo.SaleNumVo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface SaleOrderDetailInfoMapper extends BaseMapper<SaleOrderDetailInfo> {
+
+    List<SaleOrderDetailInfo> selectDetailByIdCardNum(@Param("idCardNum") String idCardNum);
+
+    List<SaleOrderDetailInfo> selectDetailByIdCardNumAndDire(@Param("idCardNum")String idCardNum, @Param("directionCode")String directionCode);
+
+    SaleOrderDetailInfo selectOrderByDirectionAndCustomer(@Param("directionCode") String directionCode, @Param("customer") Long id);
+
+    List<SaleOrderDetailInfo> selectDetailDataGridByIdCardNum(Map<String, Object> condition, Page<SaleOrderDetailInfo> page);
+
+    List<SaleDetailVo> selectByCustomId(Page<SaleDetailVo> page, Map<String, Object> condition);
+
+    BigDecimal getSaleNumByCondition(@Param("condition") Map<String, Object> condition);
+
+    List<Map> getSaleDataInDays(@Param("starttime") Date startTime,@Param("endtime") Date endTime,@Param("days") int[] index);
+
+    List<Map> getSaleDataAreaInDays(@Param("starttime")Date startTime, @Param("endtime") Date endTime,@Param("params") Map params);
+
+    List<Map> getSaleDataProductTypeInDays(@Param("starttime")Date startTime, @Param("endtime") Date endTime);
+
+    List<Map> getSaleDataInYear(Map params);
+
+    List<Map> getInboundInYear(Map params);
+
+    //今日销售数量
+    int getSaleNumThisDay();
+    //今年销售数量
+    int getSaleNumThisYear();
+    //今年购买申述
+    int getPurchasersNum();
+
+    List<Map> selectCityInAndOut(Page<Map> page, Map params);
+
+    List<Map> getGenderSale(Page<Map> page,@Param("params") Map params);
+
+    List<Map> getRaceSale(Page<Map> page,@Param("params")  Map params);
+
+    int getSaleInfoByGeneration(@Param("params") Map params);
+
+    SaleDetailVo selectOneByDirectionCode(@Param("directionCode") String directionCode);
+
+    SaleOrderDetailInfo selectOrderByDirectionReturnflag(@Param("directionCode") String directionCode,
+                                                         @Param("returnflag") Byte returnflag,
+                                                         @Param("datetime") String datetime);
+
+    List<SaleNumVo> selectSaleNumInfo(Page<SaleNumVo> page,@Param("params") Map<String, Object> filter);
+
+    List<SaleOrderDetailInfo> selectSaleNumInfoDetail(Page<SaleOrderDetailInfo> page, @Param("params") Map<String, Object> filter);
+
+    List<Map> selectCityInAndOutDetail(Page<Map> page, Map<String, Object> params);
+
+    List<Map> selectCityInAndOut(@Param("params")Map<String, Object> params);
+
+    List<Map> selectCityTypeSale(Page<Map> page, @Param("params")Map<String, Object> params,@Param("list") List<String> list);
+
+    List<Map> selectCityTypeSale(@Param("params")Map<String, Object> params,@Param("list") List<String> list);
+
+    List<Map> selectEnterpriseTypeSale(Page<Map> page,  @Param("params")Map<String, Object> params, @Param("list") List<String> list);
+
+    Map selectAllType(@Param("list")List<String> list, @Param("params") Map<String, Object> params);
+
+    List<Map> selectEnterpriseTypeSale(@Param("params")Map<String, Object> params,@Param("list") List<String> list);
+
+    List<Map> selectDistrictTypeSale(Page<Map> page, @Param("params")Map<String, Object> params,@Param("list") List<String> list);
+
+    List<Map> selectDistrictTypeSale(@Param("params")Map<String, Object> params,@Param("list") List<String> list);
+
+    Map selectAllDistrictType(@Param("list")List<String> list, @Param("params") Map<String, Object> params);
+
+    int saveBatchOrderDetailInfo(@Param("list")List<SaleOrderDetailInfo> detailInfoList);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/SaleOrderInfoMapper.java b/src/main/java/com/gk/firework/Mapper/SaleOrderInfoMapper.java
new file mode 100644
index 0000000..7ab75dc
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/SaleOrderInfoMapper.java
@@ -0,0 +1,73 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.SaleOrderDetailInfo;
+import com.gk.firework.Domain.SaleOrderInfo;
+import com.gk.firework.Domain.Vo.DailySaleReport;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.math.BigDecimal;
+import java.util.Map;
+import java.util.List;
+
+@Repository
+public interface SaleOrderInfoMapper extends BaseMapper<SaleOrderInfo> {
+
+    SaleOrderInfo selectOrderByDirectionAndCustomer(@Param("directionCode") String directionCode, @Param("customer") Long id);
+
+    List<Map> selectSaleRecord1(Page<Map> page, Map params);
+
+    List<Map> selectSaleRecord2(Page<Map> page, Map params);
+
+    List<Map> selectSaleRecord3(Page<Map> page, Map params);
+
+    List<Map> selectSaleRecord4(Page<Map> page, Map params);
+
+    List<SaleOrderDetailInfo> getPurchaseDetailInUnit(Page<SaleOrderDetailInfo> page, Map params);
+
+    List<SaleOrderInfo> selectEarlyWarn(@Param("starttime") String starttime,@Param("endtime") String endttime,
+                                        @Param("min") Integer min,@Param("max") Integer max);
+
+    List<SaleOrderInfo> selectAlarm(@Param("starttime")String starttime, @Param("endtime")String endttime,@Param("max") Integer max);
+
+    Long selectByCustomer(@Param("customid") Long customid);
+
+    List<Map> selectSaleRecord3(@Param("params")Map arams);
+
+    List<Map> selectSaleRecord4(@Param("params")Map params);
+
+    List<DailySaleReport> selectDailySaleReport(Map<String, Object> condition, Page<DailySaleReport> page);
+
+    List<Map> selectAllDailySaleReport(@Param("condition") Map<String, Object> condition);
+
+    List<SaleOrderInfo> selectDataGrid(Map<String, Object> condition, Page<SaleOrderInfo> page);
+
+    List<SaleOrderDetailInfo> getEnterpriseSaleDetail(@Param("enterpriseNumber") String enterpriseNumber,@Param("itemcode") String itemcode,
+                                @Param("starttime") String starttime,@Param("endtime") String endtime);
+
+    List<Map> selectEnterpriseEnterSellStore(Page<Map> page, Map params);
+
+    BigDecimal selectEnterpriseSaleNumber(@Param("companyNumber") String companyNumber,
+                                       @Param("starttime") Object starttime, @Param("endtime") Object endtime);
+
+    BigDecimal selectCitySaleNumber(@Param("city") String name, @Param("starttime") Object starttime, @Param("endtime") Object endtime);
+
+    List<SaleOrderInfo> selectSameOrder(@Param("companyNumber") String companyNumber,
+                                  @Param("customerId") Long customerId, @Param("num") Integer num,
+                                  @Param("list") List<String> list);
+
+    Map selectProductSales(@Param("params") Map<String, Object> params);
+
+    BigDecimal selectCitySales(@Param("city")String name, @Param("starttime")  Object starttime, @Param("endtime") Object endtime);
+
+    List<SaleOrderDetailInfo> selectDetails(@Param("ordercode") String ordercode);
+
+    Integer selectSaleAllPerson(@Param("params")Map<String, Object> params);
+
+    Integer selectAllSaleNum(@Param("params")Map<String, Object> params);
+
+    Integer selectAllReturnNum(@Param("params")Map<String, Object> params);
+
+}
diff --git a/src/main/java/com/gk/firework/Mapper/SaleProductInfoMapper.java b/src/main/java/com/gk/firework/Mapper/SaleProductInfoMapper.java
new file mode 100644
index 0000000..3f1b80f
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/SaleProductInfoMapper.java
@@ -0,0 +1,16 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.SaleProductInfo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface SaleProductInfoMapper extends BaseMapper<SaleProductInfo> {
+
+    List<SaleProductInfo> selectRandom(@Param("n") int n);
+
+
+}
diff --git a/src/main/java/com/gk/firework/Mapper/SecuritySupervisoryMapper.java b/src/main/java/com/gk/firework/Mapper/SecuritySupervisoryMapper.java
new file mode 100644
index 0000000..7f8270b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/SecuritySupervisoryMapper.java
@@ -0,0 +1,10 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.SecuritySupervisory;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface SecuritySupervisoryMapper extends BaseMapper<SecuritySupervisory> {
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/SelfCheckInfoMapper.java b/src/main/java/com/gk/firework/Mapper/SelfCheckInfoMapper.java
new file mode 100644
index 0000000..8914728
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/SelfCheckInfoMapper.java
@@ -0,0 +1,27 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.SelfCheckInfo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface SelfCheckInfoMapper extends BaseMapper<SelfCheckInfo> {
+    int deleteByPrimaryKey(Long id);
+
+    SelfCheckInfo selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(SelfCheckInfo record);
+
+    int updateByPrimaryKey(SelfCheckInfo record);
+
+    List<SelfCheckInfo> selctByType(@Param("type") String type);
+
+    List<SelfCheckInfo> selectDataGrid(Page<SelfCheckInfo> page, Map<String, Object> condition);
+
+    List<SelfCheckInfo> selectByIds(@Param("idList") List<Long> idList);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/SelfCheckReportMapper.java b/src/main/java/com/gk/firework/Mapper/SelfCheckReportMapper.java
new file mode 100644
index 0000000..20f19b0
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/SelfCheckReportMapper.java
@@ -0,0 +1,27 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.SelfCheckReport;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.Date;
+import java.util.List;
+
+@Repository
+public interface SelfCheckReportMapper extends BaseMapper<SelfCheckReport> {
+
+    SelfCheckReport selectByReportId(Long id);
+
+    List<SelfCheckReport> selectReportListByCondition(@Param("eid") Long eid, @Param("status") Byte status, @Param("yhlevel") Byte yhlevel);
+
+    int updateReport(SelfCheckReport selfCheckReport);
+
+    List<SelfCheckReport> selectReportListByAllCondition(@Param("eidList") List<Long> eidList, @Param("status") Byte status, @Param("yhlevel") Byte yhlevel, @Param("startTime")Date startTime,@Param("endTime") Date endTime,Page<SelfCheckReport> page);
+
+    List<SelfCheckReport> selectReportListWithEnterpriseIdList(@Param("eidList") List<Long> eidList, @Param("status") Byte status, @Param("yhlevel") Byte yhlevel, @Param("startTime")Date startTime,@Param("endTime") Date endTime,Page<SelfCheckReport> page);
+
+    List<SelfCheckReport> selectReportListWithoutEnterpriseIdList(@Param("status") Byte status, @Param("yhlevel") Byte yhlevel, @Param("startTime")Date startTime,@Param("endTime") Date endTime,Page<SelfCheckReport> page);
+
+}
diff --git a/src/main/java/com/gk/firework/Mapper/SmsLogInfoMapper.java b/src/main/java/com/gk/firework/Mapper/SmsLogInfoMapper.java
new file mode 100644
index 0000000..caf511b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/SmsLogInfoMapper.java
@@ -0,0 +1,20 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.SmsLogInfo;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface SmsLogInfoMapper extends BaseMapper<SmsLogInfo> {
+    int deleteByPrimaryKey(Long id);
+
+    SmsLogInfo selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(SmsLogInfo record);
+
+    int updateByPrimaryKey(SmsLogInfo record);
+
+    SmsLogInfo selectByTel(String mobile, String starttime, String endtime, Byte type);
+
+    void deleteByTime(String seventime);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/SoldNoStockInfoMapper.java b/src/main/java/com/gk/firework/Mapper/SoldNoStockInfoMapper.java
new file mode 100644
index 0000000..1945cb7
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/SoldNoStockInfoMapper.java
@@ -0,0 +1,31 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.SaleOrderDetailInfo;
+import com.gk.firework.Domain.SoldNoStockInfo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface SoldNoStockInfoMapper extends BaseMapper<SoldNoStockInfo> {
+
+    List<SaleOrderDetailInfo> selectSoldNoStockDataGrid(Map<String, Object> condition, Page<SaleOrderDetailInfo> page);
+
+    int insertBatch(@Param("list") List<SoldNoStockInfo> soldNoStockInfos);
+
+    /*int deleteByPrimaryKey(Long id);
+
+    int insert(SoldNoStockInfo record);
+
+    int insertSelective(SoldNoStockInfo record);
+
+    SoldNoStockInfo selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(SoldNoStockInfo record);
+
+    int updateByPrimaryKey(SoldNoStockInfo record);*/
+}
diff --git a/src/main/java/com/gk/firework/Mapper/StandDeviceToolsLegerMapper.java b/src/main/java/com/gk/firework/Mapper/StandDeviceToolsLegerMapper.java
new file mode 100644
index 0000000..9a29a05
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/StandDeviceToolsLegerMapper.java
@@ -0,0 +1,16 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.StandardDeviceToolsLeger;
+import org.springframework.stereotype.Repository;
+
+import java.util.Map;
+import java.util.List;
+
+@Repository
+public interface StandDeviceToolsLegerMapper extends BaseMapper<StandardDeviceToolsLeger> {
+
+    List<StandardDeviceToolsLeger> selectPages(Page<StandardDeviceToolsLeger> page, Map params);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/StandHiddenDangerLegerMapper.java b/src/main/java/com/gk/firework/Mapper/StandHiddenDangerLegerMapper.java
new file mode 100644
index 0000000..4d0104e
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/StandHiddenDangerLegerMapper.java
@@ -0,0 +1,15 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.StandardHiddenDangerLeger;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface StandHiddenDangerLegerMapper extends BaseMapper<StandardHiddenDangerLeger> {
+
+    List<StandardHiddenDangerLeger> selectPages(Page<StandardHiddenDangerLeger> page, Map<String, Object> params);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/StandProductLegerMapper.java b/src/main/java/com/gk/firework/Mapper/StandProductLegerMapper.java
new file mode 100644
index 0000000..4a2c506
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/StandProductLegerMapper.java
@@ -0,0 +1,16 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.StandardProductLeger;
+import org.springframework.stereotype.Repository;
+
+import java.awt.*;
+import java.util.Map;
+import java.util.List;
+
+@Repository
+public interface StandProductLegerMapper extends BaseMapper<StandardProductLeger> {
+
+    List<StandardProductLeger> selectPages(Page<StandardProductLeger> page, Map params);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/StandardConferenceRecordMapper.java b/src/main/java/com/gk/firework/Mapper/StandardConferenceRecordMapper.java
new file mode 100644
index 0000000..9a1f359
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/StandardConferenceRecordMapper.java
@@ -0,0 +1,15 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.StandardConferenceRecord;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface StandardConferenceRecordMapper extends BaseMapper<StandardConferenceRecord> {
+
+    List<StandardConferenceRecord> selectPages(Page<StandardConferenceRecord> page, Map params);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/StandardEducationLegerMapper.java b/src/main/java/com/gk/firework/Mapper/StandardEducationLegerMapper.java
new file mode 100644
index 0000000..b0aac7d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/StandardEducationLegerMapper.java
@@ -0,0 +1,15 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.StandardEducationLeger;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface StandardEducationLegerMapper extends BaseMapper<StandardEducationLeger> {
+
+    List<StandardEducationLeger> selectPages(Page<StandardEducationLeger> page, Map params);
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/StandardEquipmentLegerMapper.java b/src/main/java/com/gk/firework/Mapper/StandardEquipmentLegerMapper.java
new file mode 100644
index 0000000..f4e4c45
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/StandardEquipmentLegerMapper.java
@@ -0,0 +1,17 @@
+package com.gk.firework.Mapper;
+
+import com.gk.firework.Domain.StandardEquipmentLeger;
+
+public interface StandardEquipmentLegerMapper {
+    int deleteByPrimaryKey(Long id);
+
+    int insert(StandardEquipmentLeger record);
+
+    int insertSelective(StandardEquipmentLeger record);
+
+    StandardEquipmentLeger selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(StandardEquipmentLeger record);
+
+    int updateByPrimaryKey(StandardEquipmentLeger record);
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/StandardGuardRollMapper.java b/src/main/java/com/gk/firework/Mapper/StandardGuardRollMapper.java
new file mode 100644
index 0000000..dddc602
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/StandardGuardRollMapper.java
@@ -0,0 +1,15 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.StandardGuardRoll;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface StandardGuardRollMapper extends BaseMapper<StandardGuardRoll> {
+
+    List<StandardGuardRoll> selectPages(Page<StandardGuardRoll> page, Map params);
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/StandardLawListMapper.java b/src/main/java/com/gk/firework/Mapper/StandardLawListMapper.java
new file mode 100644
index 0000000..5fa2f47
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/StandardLawListMapper.java
@@ -0,0 +1,15 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.StandardLawList;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface StandardLawListMapper extends BaseMapper<StandardLawList> {
+
+    List<StandardLawList> selectPages(Page<StandardLawList> page, Map params);
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/StandardRewardRecordMapper.java b/src/main/java/com/gk/firework/Mapper/StandardRewardRecordMapper.java
new file mode 100644
index 0000000..4f58891
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/StandardRewardRecordMapper.java
@@ -0,0 +1,16 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.StandardRewardRecord;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+
+@Repository
+public interface StandardRewardRecordMapper extends BaseMapper<StandardRewardRecord> {
+
+    List<StandardRewardRecord> selectPages(Page<StandardRewardRecord> page, Map params);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/StandardSupplyMarketObjectMapper.java b/src/main/java/com/gk/firework/Mapper/StandardSupplyMarketObjectMapper.java
new file mode 100644
index 0000000..0b0246e
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/StandardSupplyMarketObjectMapper.java
@@ -0,0 +1,15 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.StandardSupplyMarketObject;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface StandardSupplyMarketObjectMapper extends BaseMapper<StandardSupplyMarketObject> {
+
+    List<StandardSupplyMarketObject> selectPages(Page<StandardSupplyMarketObject> page, Map  params);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/StandardTemplate1Mapper.java b/src/main/java/com/gk/firework/Mapper/StandardTemplate1Mapper.java
new file mode 100644
index 0000000..b1cba6f
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/StandardTemplate1Mapper.java
@@ -0,0 +1,17 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.StandardTemplate1;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface StandardTemplate1Mapper extends BaseMapper<StandardTemplate1> {
+
+    List<StandardTemplate1> selectPages(Page<StandardTemplate1> page,Map params);
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/StaticStockMapper.java b/src/main/java/com/gk/firework/Mapper/StaticStockMapper.java
new file mode 100644
index 0000000..835b923
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/StaticStockMapper.java
@@ -0,0 +1,14 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.StaticStock;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface StaticStockMapper extends BaseMapper<StaticStock> {
+    List<StaticStock> selectEnterpriseStocks(@Param("condition") Map<String, Object> condition);
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/StockInfoMapper.java b/src/main/java/com/gk/firework/Mapper/StockInfoMapper.java
new file mode 100644
index 0000000..4436a27
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/StockInfoMapper.java
@@ -0,0 +1,66 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.BO.DirectionProductBO;
+import com.gk.firework.Domain.StockInfo;
+import com.gk.firework.Domain.Vo.NoEntryVo;
+import com.gk.firework.Domain.Vo.StockVo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface StockInfoMapper extends BaseMapper<StockInfo> {
+
+    StockInfo selectStockByDirection(@Param("directionCode") String directionCode, @Param("slice") String slice);
+
+    StockInfo selectStockByDireAndUser(@Param("directionCode") String directionCode, @Param("companyId") Long userId, @Param("slice") String slice);
+
+    int insertStockInfo(@Param("stockInfo") StockInfo stockInfo, @Param("slice") String slice);
+
+    int updateStockInfo(@Param("stockInfo") StockInfo stockInfo, @Param("slice") String slice);
+
+    List<StockVo> selectStockDataGrid(Map<String, Object> condition, Page<StockVo> page);
+
+    List<StockInfo> selectEarlyWarn(@Param("min") Integer min,@Param("max") Integer max,
+                                    @Param("enterprisetype")String enterprisetype,@Param("slices") List<Integer> slices);
+
+    List<StockInfo> selectAlarm(@Param("max") Integer max,@Param("enterprisetype") String enterprisetype,
+                                @Param("slices") List<Integer> slices);
+    List<StockVo> selectStockDataGrid(Map<String, Object> condition, Page<StockVo> page, List<Integer> list);
+
+    List<StockVo> selectEnterpriseStockDataGrid(Map<String, Object> condition, Page<StockVo> page, List<Integer> list);
+
+
+    List<NoEntryVo> selectNoEntryCount(@Param("time") Date time, @Param("list") List<Integer> list, @Param("period")Integer warnPeriod);
+
+    List<StockVo> selectNoEntryDetail(Page<StockVo> page, Map<String, Object> condition);
+
+    List<StockInfo> selectStockByProductId(@Param("id") Long id, @Param("slice") String slice);
+
+    List<StockVo> selectEnterpriseSaleDataGrid(Map<String, Object> condition, Page<StockVo> page, List<Integer> list);
+
+    List<StockVo> selectStockVoByItemCode(Map<String, Object> condition, Page<StockVo> page);
+
+    List<StockVo> selectSaleDetailDataGrid(Map<String, Object> condition, Page<StockVo> page);
+
+    List<StockInfo> selectCurrentFireStatus(@Param("codes") List<String> codes,@Param("params") Map params,@Param("slice")String slice);
+
+    List<StockVo> selectEnterpriseStocks(Map<String, Object> condition, List<Integer> list);
+
+    StockVo selectEnterpriseStock(@Param("id") Long id, @Param("list")List<Integer> list);
+
+    Map selectEnterpriseSaleDataCount(Map<String, Object> condition, List<Integer> list);
+
+    List<StockInfo> selectEnterpriseAllStock(@Param("owner") Long id, @Param("list") List<Integer> list);
+
+    int clearStock(@Param("owner") Long id, @Param("remark") String remark, @Param("date") Date date, @Param("slice") String slice);
+
+    int clearStockByItem(@Param("owner") Long id, @Param("list") List<String>list ,@Param("remark") String remark, @Param("date") Date date, @Param("slice") String slice);
+
+    List<StockInfo> selectStockByDirectionsAndSlices(@Param("list") List<DirectionProductBO> directionProductBOS);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/TransportCarrierMapper.java b/src/main/java/com/gk/firework/Mapper/TransportCarrierMapper.java
new file mode 100644
index 0000000..243b927
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/TransportCarrierMapper.java
@@ -0,0 +1,10 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.TransportCarrier;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface TransportCarrierMapper extends BaseMapper<TransportCarrier> {
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/TransportCertFileMapper.java b/src/main/java/com/gk/firework/Mapper/TransportCertFileMapper.java
new file mode 100644
index 0000000..5e88fe2
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/TransportCertFileMapper.java
@@ -0,0 +1,10 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.TransportCertFile;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface TransportCertFileMapper extends BaseMapper<TransportCertFile> {
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/TransportCertMapper.java b/src/main/java/com/gk/firework/Mapper/TransportCertMapper.java
new file mode 100644
index 0000000..7f81fe5
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/TransportCertMapper.java
@@ -0,0 +1,20 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.TransportCert;
+import com.gk.firework.Domain.Vo.TransportCertVo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface TransportCertMapper extends BaseMapper<TransportCert> {
+
+    List<TransportCert> selectPages(Page<TransportCert> page, Map params);
+
+    List<TransportCert> selectWarnList(@Param("start") Date start, @Param("end") Date end);
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/TransportCertProductMapper.java b/src/main/java/com/gk/firework/Mapper/TransportCertProductMapper.java
new file mode 100644
index 0000000..3300d50
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/TransportCertProductMapper.java
@@ -0,0 +1,10 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.TransportCertProduct;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface TransportCertProductMapper extends BaseMapper<TransportCertProduct> {
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/TransportCertificateApproachMapper.java b/src/main/java/com/gk/firework/Mapper/TransportCertificateApproachMapper.java
new file mode 100644
index 0000000..bf3c25b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/TransportCertificateApproachMapper.java
@@ -0,0 +1,12 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.TransportCertificateApproach;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface TransportCertificateApproachMapper extends BaseMapper<TransportCertificateApproach> {
+
+    void deleteByCertificateCode(@Param("code") String code);
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/TransportCertificateArrivalRecordMapper.java b/src/main/java/com/gk/firework/Mapper/TransportCertificateArrivalRecordMapper.java
new file mode 100644
index 0000000..78a0268
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/TransportCertificateArrivalRecordMapper.java
@@ -0,0 +1,17 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.TransportCertificateArrivalRecord;
+import com.gk.firework.Domain.Vo.TransportArrivalSum;
+import org.springframework.stereotype.Repository;
+
+import java.util.Map;
+import java.util.List;
+
+@Repository
+public interface TransportCertificateArrivalRecordMapper extends BaseMapper<TransportCertificateArrivalRecord> {
+
+    List<TransportArrivalSum> selectTransportArrivalPages(Page<TransportArrivalSum> page, Map params);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/TransportCertificateFileMapper.java b/src/main/java/com/gk/firework/Mapper/TransportCertificateFileMapper.java
new file mode 100644
index 0000000..e65cd78
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/TransportCertificateFileMapper.java
@@ -0,0 +1,12 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.TransportCertificateFile;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface TransportCertificateFileMapper extends BaseMapper<TransportCertificateFile> {
+
+    void deleteByCertificateCode(@Param("code") String code);
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/TransportCertificateMapper.java b/src/main/java/com/gk/firework/Mapper/TransportCertificateMapper.java
new file mode 100644
index 0000000..74839ea
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/TransportCertificateMapper.java
@@ -0,0 +1,23 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.TransportCertificate;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface TransportCertificateMapper extends BaseMapper<TransportCertificate> {
+
+    List<TransportCertificate> selectPages(Page<TransportCertificate> page, Map params);
+
+    TransportCertificate getOneById(@Param("id") Long id);
+
+    TransportCertificate selectByCode(@Param("code") String code);
+
+    List<TransportCertificate> selectWarnList(@Param("start") Date start, @Param("end") Date end);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/TransportCertificatePersonMapper.java b/src/main/java/com/gk/firework/Mapper/TransportCertificatePersonMapper.java
new file mode 100644
index 0000000..71a729b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/TransportCertificatePersonMapper.java
@@ -0,0 +1,11 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.TransportCertificatePerson;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface TransportCertificatePersonMapper extends BaseMapper<TransportCertificatePerson> {
+
+    void deleteByCertificateCode(String code);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/TransportCertificateProductMapper.java b/src/main/java/com/gk/firework/Mapper/TransportCertificateProductMapper.java
new file mode 100644
index 0000000..4a65856
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/TransportCertificateProductMapper.java
@@ -0,0 +1,12 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.TransportCertificateProduct;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface TransportCertificateProductMapper extends BaseMapper<TransportCertificateProduct> {
+
+    void deleteByCertificateCode(@Param("code") String code);
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/TransportPersonMapper.java b/src/main/java/com/gk/firework/Mapper/TransportPersonMapper.java
new file mode 100644
index 0000000..0b935d4
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/TransportPersonMapper.java
@@ -0,0 +1,10 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.TransportPerson;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface TransportPersonMapper extends BaseMapper<TransportPerson> {
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/UserDeadlineLogMapper.java b/src/main/java/com/gk/firework/Mapper/UserDeadlineLogMapper.java
new file mode 100644
index 0000000..3495b1a
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/UserDeadlineLogMapper.java
@@ -0,0 +1,9 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.UserDeadlineOperationLog;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface UserDeadlineLogMapper extends BaseMapper<UserDeadlineOperationLog> {
+}
diff --git a/src/main/java/com/gk/firework/Mapper/UserInfoMapper.java b/src/main/java/com/gk/firework/Mapper/UserInfoMapper.java
new file mode 100644
index 0000000..4dc4967
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/UserInfoMapper.java
@@ -0,0 +1,45 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Config.Oauth2.OauthRole;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Vo.UserVo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface UserInfoMapper extends BaseMapper<UserInfo> {
+    int deleteByPrimaryKey(Long id);
+
+    UserInfo selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(UserInfo record);
+
+    int updateByPrimaryKey(UserInfo record);
+
+    UserVo selectByLoginname(@Param("username") String username);
+
+    List<OauthRole> selectRoleByUser(Integer userId);
+
+    List<UserVo> selectUserDataGrid(Page<UserVo> page, Map<String, Object> record);
+
+    List<UserInfo> selectUserInfo(@Param("id") Long id,@Param("username") String username);
+
+    int deleteOneByCompanyId(@Param("companyId")Long companyId);
+
+    UserInfo getOneByCompanyId(@Param("companyId")Long companyId);
+
+    UserInfo selectSupervise(@Param("province") String province,@Param("city") String city,@Param("area") String district,@Param("town") String street,@Param("community") String committee);
+
+    UserVo selectUserVoByName(@Param("username")String username);
+
+
+    int updateDeadlineByCompanyId(Long companyid, Date deadline);
+
+    void updateDeadline2NullByComapnyId(Long companyid);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/UserRolesInfoMapper.java b/src/main/java/com/gk/firework/Mapper/UserRolesInfoMapper.java
new file mode 100644
index 0000000..22e5a72
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/UserRolesInfoMapper.java
@@ -0,0 +1,18 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gk.firework.Domain.UserRolesInfo;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface UserRolesInfoMapper extends BaseMapper<UserRolesInfo> {
+    int deleteByPrimaryKey(Long id);
+
+    UserRolesInfo selectByPrimaryKey(Long id);
+
+    int updateByPrimaryKeySelective(UserRolesInfo record);
+
+    int updateByPrimaryKey(UserRolesInfo record);
+
+    void deleteByUserId(Long userid);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/WarnContentInfoMapper.java b/src/main/java/com/gk/firework/Mapper/WarnContentInfoMapper.java
new file mode 100644
index 0000000..4c00f98
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/WarnContentInfoMapper.java
@@ -0,0 +1,34 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.Vo.WarnContentVo;
+import com.gk.firework.Domain.WarnContentInfo;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface WarnContentInfoMapper extends BaseMapper<WarnContentInfo> {
+
+    WarnContentInfo selectByPrimaryKey(Long id);
+
+    List<WarnContentVo> selectStockDataGrid(Page<WarnContentVo> page, Map<String, Object> condition);
+
+    List<WarnContentVo> selectPurchaseDataGrid(Page<WarnContentVo> page, Map<String, Object> condition);
+
+    WarnContentInfo selectByWarn(@Param("warntype") String warntype,@Param("warnlevel") String warnlevel,@Param("customer") Long customer,@Param("warncontent") String warncontent);
+
+    WarnContentInfo selectByEnterpriseWarn(@Param("warntype")String warntype,@Param("warnlevel") String warnlevel,@Param("enterpriseid") Long enterpriseid,@Param("warncontent")String warncontent);
+
+    List<WarnContentVo> selectNeedMail(@Param("starttime") String starttime,@Param("endtime") String endtime);
+
+    List<WarnContentVo> selectIsNotMend();
+
+    List<WarnContentVo> selectWarningDataGrid(Page<WarnContentVo> page, Map<String, Object> condition);
+
+    int insertBatch(@Param("list")List<WarnContentInfo> warnContentInfos);
+
+}
diff --git a/src/main/java/com/gk/firework/Mapper/WarningInfoMapper.java b/src/main/java/com/gk/firework/Mapper/WarningInfoMapper.java
new file mode 100644
index 0000000..eee3c36
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/WarningInfoMapper.java
@@ -0,0 +1,20 @@
+package com.gk.firework.Mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gk.firework.Domain.WarningInfo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+@Repository
+public interface WarningInfoMapper extends BaseMapper<WarningInfo> {
+
+    WarningInfo selectByPrimaryKey(Long id);
+
+    List<WarningInfo> selectDataGrid(Page<WarningInfo> page, Map<String, Object> condition);
+
+    List<WarningInfo> selectByType(@Param("warntype") String warntype);
+}
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/AccessAssessApplyMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/AccessAssessApplyMapper.xml
new file mode 100644
index 0000000..ae14a57
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/AccessAssessApplyMapper.xml
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.AccessAssessApplyMapper" >
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, type, code, status, requestor, submittime, approver, approvetime, approvenote,
+    enterprisename, enterprisenumber, punishstatus, path1, path2, punishmentreason, punishmentmeasure,
+    createtime, modifytime, lastrejecttime
+  </sql>
+
+  <select id="selectPages" resultType="com.gk.firework.Domain.AccessAssessApply">
+    select *
+    from assessapply
+    where validflag = 1
+    and type = #{params.type}
+    <if test="params.requestorid != null and params.requestorid != ''">
+      and requestorid = #{params.requestorid}
+    </if>
+    <if test="params.enterprisename != null and params.enterprisename != ''">
+      and enterprisename like concat("%",#{params.enterprisename},"%")
+    </if>
+    <if test="params.status != null and params.status != ''">
+      and status = #{params.status}
+    </if>
+    <if test="params.code != null and params.code != ''">
+      and code like concat("%",#{params.code},"%")
+    </if>
+    order by createtime desc
+  </select>
+  <select id="selectAppealPages" resultType="com.gk.firework.Domain.Vo.AssessApplyAppealVo">
+    select
+    id,
+    code,
+    enterprisename,
+    enterprisenumber,
+    punishmentreason,
+    punishmentmeasure,
+    path1,
+    path2,
+    punishstatus,
+    approvetime,
+    approvenote,
+    deadline,
+    appealcontent,
+    appealstatus,
+    appealapprover,
+    appealapprovetime,
+    case when date_add(now(),interval 7 day) &gt;= deadline and appealstatus != #{params.passed} then 1 else 0 end iswarn,
+    case when punishstatus = #{params.unpunish} and now() &lt; deadline and appealstatus = #{params.unappealed} then 1 else 0  end whetherCanAppeal
+    from assessapply
+    where validflag = 1
+    and type = #{params.type}
+    and status = #{params.status}
+    <if test="params.enterprisenumber != null and params.enterprisenumber != ''">
+      and enterprisenumber =  #{enterprisenumber}
+    </if>
+    <if test="params.appealstatus != null and params.appealstatus != ''">
+      and appealstatus =  #{params.appealstatus}
+    </if>
+    <if test="params.enterprisename != null and params.enterprisename != ''">
+      and enterprisename like concat("%",#{params.enterprisename},"%")
+    </if>
+    <if test="params.code != null and params.code != ''">
+      and code like concat("%",#{params.code},"%")
+    </if>
+    order by whetherCanAppeal desc,deadline asc
+  </select>
+  <select id="selectAllOverTimeAccessAssessApply" resultType="com.gk.firework.Domain.AccessAssessApply">
+    select *
+    from assessapply
+    where
+    validflag = 1
+    and deadline &lt;= now()
+    and type = #{access}
+    and appealstatus != #{passed}
+    and punishstatus = #{unPunish}
+
+  </select>
+  <select id="selectAllPunishingAccessAssessApply" resultType="com.gk.firework.Domain.AccessAssessApply">
+    select *
+    from assessapply
+    where
+    validflag = 1
+    and type = #{access}
+    and punishstatus = #{punishing}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from assessapply
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.AssessApply" >
+    <!--          -->
+    update assessapply
+    <set >
+      <if test="type != null" >
+        type = #{type,jdbcType=VARCHAR},
+      </if>
+      <if test="code != null" >
+        code = #{code,jdbcType=VARCHAR},
+      </if>
+      <if test="status != null" >
+        status = #{status,jdbcType=VARCHAR},
+      </if>
+      <if test="requestor != null" >
+        requestor = #{requestor,jdbcType=VARCHAR},
+      </if>
+      <if test="submittime != null" >
+        submittime = #{submittime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="approver != null" >
+        approver = #{approver,jdbcType=VARCHAR},
+      </if>
+      <if test="approvetime != null" >
+        approvetime = #{approvetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="approvenote != null" >
+        approvenote = #{approvenote,jdbcType=VARCHAR},
+      </if>
+      <if test="enterprisename != null" >
+        enterprisename = #{enterprisename,jdbcType=VARCHAR},
+      </if>
+      <if test="enterprisenumber != null" >
+        enterprisenumber = #{enterprisenumber,jdbcType=VARCHAR},
+      </if>
+      <if test="path1 != null" >
+        path1 = #{path1,jdbcType=VARCHAR},
+      </if>
+      <if test="path2 != null" >
+        path2 = #{path2,jdbcType=VARCHAR},
+      </if>
+      <if test="punishmentreason != null" >
+        punishmentreason = #{punishmentreason,jdbcType=VARCHAR},
+      </if>
+      <if test="punishmentmeasure != null" >
+        punishmentmeasure = #{punishmentmeasure,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        createtime = #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="modifytime != null" >
+        modifytime = #{modifytime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="lastrejecttime != null" >
+        lastrejecttime = #{lastrejecttime,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.AssessApply" >
+    <!--          -->
+    update assessapply
+    set type = #{type,jdbcType=VARCHAR},
+    code = #{code,jdbcType=VARCHAR},
+    status = #{status,jdbcType=VARCHAR},
+    requestor = #{requestor,jdbcType=VARCHAR},
+    submittime = #{submittime,jdbcType=TIMESTAMP},
+    approver = #{approver,jdbcType=VARCHAR},
+    approvetime = #{approvetime,jdbcType=TIMESTAMP},
+    approvenote = #{approvenote,jdbcType=VARCHAR},
+    enterprisename = #{enterprisename,jdbcType=VARCHAR},
+    enterprisenumber = #{enterprisenumber,jdbcType=VARCHAR},
+    path1 = #{path1,jdbcType=VARCHAR},
+    path2 = #{path2,jdbcType=VARCHAR},
+    punishmentreason = #{punishmentreason,jdbcType=VARCHAR},
+    punishmentmeasure = #{punishmentmeasure,jdbcType=VARCHAR},
+    createtime = #{createtime,jdbcType=TIMESTAMP},
+    modifytime = #{modifytime,jdbcType=TIMESTAMP},
+    lastrejecttime = #{lastrejecttime,jdbcType=TIMESTAMP}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/AppFileInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/AppFileInfoMapper.xml
new file mode 100644
index 0000000..b83cc6a
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/AppFileInfoMapper.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.AppFileInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.AppFileInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="filetype" property="filetype" jdbcType="VARCHAR" />
+    <result column="filename" property="filename" jdbcType="VARCHAR" />
+    <result column="fileurl" property="fileurl" jdbcType="VARCHAR" />
+    <result column="version" property="version" jdbcType="INTEGER" />
+    <result column="remark" property="remark" jdbcType="VARCHAR" />
+    <result column="created" property="created" jdbcType="TIMESTAMP" />
+    <result column="updated" property="updated" jdbcType="TIMESTAMP" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, filetype, filename, fileurl, version, remark, created, updated
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select
+    <include refid="Base_Column_List" />
+    from appfile
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <select id="selectDataGrid" resultType="com.gk.firework.Domain.AppFileInfo">
+    select
+    <include refid="Base_Column_List" />
+    from appfile
+    <where>
+      1=1
+      <if test="condition.filetype != null and condition.filetype !=''">
+        and filetype = #{condition.filetype}
+      </if>
+    </where>
+  </select>
+  <select id="selectNew" resultType="com.gk.firework.Domain.AppFileInfo">
+    select
+    <include refid="Base_Column_List" />
+    from appfile
+    <where>
+      1=1
+      <if test="filetype != null and filetype !=''">
+        and filetype = #{filetype}
+      </if>
+    </where>
+    order by version desc
+    limit 1
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from appfile
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.AppFileInfo" >
+    <!--          -->
+    update appfile
+    <set >
+      <if test="filetype != null" >
+        filetype = #{filetype,jdbcType=VARCHAR},
+      </if>
+      <if test="filename != null" >
+        filename = #{filename,jdbcType=VARCHAR},
+      </if>
+      <if test="fileurl != null" >
+        fileurl = #{fileurl,jdbcType=VARCHAR},
+      </if>
+      <if test="version != null" >
+        version = #{version,jdbcType=INTEGER},
+      </if>
+      <if test="remark != null" >
+        remark = #{remark,jdbcType=VARCHAR},
+      </if>
+      <if test="created != null" >
+        created = #{created,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updated != null" >
+        updated = #{updated,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.AppFileInfo" >
+    <!--          -->
+    update appfile
+    set filetype = #{filetype,jdbcType=VARCHAR},
+      filename = #{filename,jdbcType=VARCHAR},
+      fileurl = #{fileurl,jdbcType=VARCHAR},
+      version = #{version,jdbcType=INTEGER},
+      remark = #{remark,jdbcType=VARCHAR},
+      created = #{created,jdbcType=TIMESTAMP},
+      updated = #{updated,jdbcType=TIMESTAMP}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/AssessApplyMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/AssessApplyMapper.xml
new file mode 100644
index 0000000..4384c64
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/AssessApplyMapper.xml
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.AssessApplyMapper" >
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, type, code, status, requestor, submittime, approver, approvetime, approvenote,
+    enterprisename, enterprisenumber, ispunish, path1, path2, punishmentreason, punishmentmeasure,
+    createtime, modifytime, lastrejecttime
+  </sql>
+
+  <select id="selectPages" resultType="com.gk.firework.Domain.AssessApply">
+    select *
+    from assessapply
+    where validflag = 1
+    and type = #{params.type}
+    <if test="params.requestorid != null and params.requestorid != ''">
+      and requestorid = #{params.requestorid}
+    </if>
+    <if test="params.enterprisename != null and params.enterprisename != ''">
+      and enterprisename like concat("%",#{params.enterprisename},"%")
+    </if>
+    <if test="params.status != null and params.status != ''">
+      and status = #{params.status}
+    </if>
+    <if test="params.code != null and params.code != ''">
+      and code like concat("%",#{params.code},"%")
+    </if>
+    order by createtime desc
+  </select>
+  <select id="selectAllPunishingSaleAssessApply" resultType="com.gk.firework.Domain.AssessApply">
+      select *
+      from assessapply
+      where validflag = 1
+      and type = #{sale}
+      and punishstatus = #{punishing}
+    </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from assessapply
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.AssessApply" >
+    <!--          -->
+    update assessapply
+    <set >
+      <if test="type != null" >
+        type = #{type,jdbcType=VARCHAR},
+      </if>
+      <if test="code != null" >
+        code = #{code,jdbcType=VARCHAR},
+      </if>
+      <if test="status != null" >
+        status = #{status,jdbcType=VARCHAR},
+      </if>
+      <if test="requestor != null" >
+        requestor = #{requestor,jdbcType=VARCHAR},
+      </if>
+      <if test="submittime != null" >
+        submittime = #{submittime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="approver != null" >
+        approver = #{approver,jdbcType=VARCHAR},
+      </if>
+      <if test="approvetime != null" >
+        approvetime = #{approvetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="approvenote != null" >
+        approvenote = #{approvenote,jdbcType=VARCHAR},
+      </if>
+      <if test="enterprisename != null" >
+        enterprisename = #{enterprisename,jdbcType=VARCHAR},
+      </if>
+      <if test="enterprisenumber != null" >
+        enterprisenumber = #{enterprisenumber,jdbcType=VARCHAR},
+      </if>
+      <if test="ispunish != null" >
+        ispunish = #{ispunish,jdbcType=BIT},
+      </if>
+      <if test="path1 != null" >
+        path1 = #{path1,jdbcType=VARCHAR},
+      </if>
+      <if test="path2 != null" >
+        path2 = #{path2,jdbcType=VARCHAR},
+      </if>
+      <if test="punishmentreason != null" >
+        punishmentreason = #{punishmentreason,jdbcType=VARCHAR},
+      </if>
+      <if test="punishmentmeasure != null" >
+        punishmentmeasure = #{punishmentmeasure,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        createtime = #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="modifytime != null" >
+        modifytime = #{modifytime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="lastrejecttime != null" >
+        lastrejecttime = #{lastrejecttime,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.AssessApply" >
+    <!--          -->
+    update assessapply
+    set type = #{type,jdbcType=VARCHAR},
+    code = #{code,jdbcType=VARCHAR},
+    status = #{status,jdbcType=VARCHAR},
+    requestor = #{requestor,jdbcType=VARCHAR},
+    submittime = #{submittime,jdbcType=TIMESTAMP},
+    approver = #{approver,jdbcType=VARCHAR},
+    approvetime = #{approvetime,jdbcType=TIMESTAMP},
+    approvenote = #{approvenote,jdbcType=VARCHAR},
+    enterprisename = #{enterprisename,jdbcType=VARCHAR},
+    enterprisenumber = #{enterprisenumber,jdbcType=VARCHAR},
+    ispunish = #{ispunish,jdbcType=BIT},
+    path1 = #{path1,jdbcType=VARCHAR},
+    path2 = #{path2,jdbcType=VARCHAR},
+    punishmentreason = #{punishmentreason,jdbcType=VARCHAR},
+    punishmentmeasure = #{punishmentmeasure,jdbcType=VARCHAR},
+    createtime = #{createtime,jdbcType=TIMESTAMP},
+    modifytime = #{modifytime,jdbcType=TIMESTAMP},
+    lastrejecttime = #{lastrejecttime,jdbcType=TIMESTAMP}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/AuthorizationInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/AuthorizationInfoMapper.xml
new file mode 100644
index 0000000..60e67ed
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/AuthorizationInfoMapper.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.AuthorizationInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.AuthorizationInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="enterprisenumber" property="enterprisenumber" jdbcType="VARCHAR" />
+    <result column="authcode" property="authcode" jdbcType="VARCHAR" />
+    <result column="authcodeprefix" property="authcodeprefix" jdbcType="VARCHAR" />
+    <result column="contractcode" property="contractcode" jdbcType="VARCHAR" />
+    <result column="createdat" property="createdat" jdbcType="TIMESTAMP" />
+    <result column="createdby" property="createdby" jdbcType="VARCHAR" />
+    <result column="flag" property="flag" jdbcType="TINYINT" />
+    <result column="lasttime" property="lasttime" jdbcType="TIMESTAMP" />
+    <result column="status" property="status" jdbcType="TINYINT" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, enterprisenumber, authcode, authcodeprefix, contractcode, createdat, createdby,
+    flag, lasttime, status
+  </sql>
+  <select id="selectByUser" resultType="com.gk.firework.Domain.AuthorizationInfo">
+    select *
+    from authorization
+    where
+        enterprisenumber = #{enterprisenumber}
+    and authcode = #{authcode}
+    and status = 1
+  </select>
+
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/BlackListMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/BlackListMapper.xml
new file mode 100644
index 0000000..0bf1231
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/BlackListMapper.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.BlackListMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.BlackList" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="enterprisenumber" property="enterprisenumber" jdbcType="VARCHAR" />
+    <result column="enterprisename" property="enterprisename" jdbcType="VARCHAR" />
+    <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
+    <result column="createby" property="createby" jdbcType="VARCHAR" />
+    <result column="modifytime" property="modifytime" jdbcType="TIMESTAMP" />
+    <result column="modifyby" property="modifyby" jdbcType="VARCHAR" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, enterprisenumber, enterprisename, createtime, createby, modifytime, modifyby,
+    validflag
+  </sql>
+  <select id="selectPages" resultType="com.gk.firework.Domain.BlackList">
+    select *
+    from blacklist
+    where validflag = 1
+    <if test="params.createbyid != null and params.createbyid != ''" >
+      and createbyid = #{params.createbyid}
+    </if>
+    <if test="params.enterprisename != null and params.enterprisename != ''" >
+      and enterprisename  like concat("%",#{params.enterprisename},"%")
+    </if>
+    order by createtime
+
+  </select>
+
+
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/ContractDetailInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/ContractDetailInfoMapper.xml
new file mode 100644
index 0000000..0606d5e
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/ContractDetailInfoMapper.xml
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.ContractDetailInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.ContractDetailInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="ordercode" property="ordercode" jdbcType="VARCHAR" />
+    <result column="directioncode" property="directioncode" jdbcType="VARCHAR" />
+    <result column="name" property="name" jdbcType="VARCHAR" />
+    <result column="num" property="num" jdbcType="INTEGER" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, ordercode, directioncode, name, num
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select
+    <include refid="Base_Column_List" />
+    from contractdetail
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <select id="selectByOrder" resultType="com.gk.firework.Domain.Vo.ProductVo">
+    SELECT
+	contractdetail.id,
+	contractdetail.directioncode,
+	contractdetail.num,
+	contractdetail.price,
+	contractdetail.changenum,
+	product.`name`,
+    product.purchaseprice,
+    product.saleprice,
+	product.specification,
+    product.explosivecontent,
+    product.type,
+    product.`level`,
+    product.productdate,
+    product.boxnumber,
+    product.packing,
+    product.manufacturer
+    FROM
+	 contractdetail
+    LEFT JOIN product on product.directioncode = contractdetail.directioncode and product.isdel = 0
+    where
+     contractdetail.ordercode = #{ordercode}
+  </select>
+    <select id="selectAllDetailAtSpecificDate" resultType="com.gk.firework.Domain.ContractDetailInfo">
+        select  detail.*
+        from contractorder as co
+        left join contractdetail as detail on detail.ordercode = co.ordercode
+        where
+        detail.directioncode = #{productCode}
+        and DATE(co.producedate) = DATE(#{producedate})
+    </select>
+    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from contractdetail
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <delete id="deleteByOrder">
+    delete from contractdetail
+    where ordercode = #{ordercode}
+  </delete>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.ContractDetailInfo" >
+    <!--          -->
+    update contractdetail
+    <set >
+      <if test="ordercode != null" >
+        ordercode = #{ordercode,jdbcType=VARCHAR},
+      </if>
+      <if test="directioncode != null" >
+        directioncode = #{directioncode,jdbcType=VARCHAR},
+      </if>
+      <if test="name != null" >
+        name = #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="num != null" >
+        num = #{num,jdbcType=INTEGER},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.ContractDetailInfo" >
+    <!--          -->
+    update contractdetail
+    set ordercode = #{ordercode,jdbcType=VARCHAR},
+      directioncode = #{directioncode,jdbcType=VARCHAR},
+      name = #{name,jdbcType=VARCHAR},
+      num = #{num,jdbcType=INTEGER}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateChangNum">
+    update contractdetail
+    set changenum = changenum + #{returnNum}
+    where ordercode = #{ordercode}
+    and directioncode = #{productCode}
+
+  </update>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/ContractFileMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/ContractFileMapper.xml
new file mode 100644
index 0000000..636c764
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/ContractFileMapper.xml
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.ContractFileMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.ContractFile" >
+    <!--          -->
+    <result column="id" property="id" jdbcType="BIGINT" />
+    <result column="ordercode" property="ordercode" jdbcType="VARCHAR" />
+    <result column="filename" property="filename" jdbcType="VARCHAR" />
+    <result column="url" property="url" jdbcType="VARCHAR" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+    <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
+    <result column="createby" property="createby" jdbcType="BIGINT" />
+    <result column="createbyname" property="createbyname" jdbcType="VARCHAR" />
+    <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+    <result column="updateby" property="updateby" jdbcType="BIGINT" />
+    <result column="updatebyname" property="updatebyname" jdbcType="VARCHAR" />
+  </resultMap>
+  <insert id="insert" parameterType="com.gk.firework.Domain.ContractFile" >
+    <!--          -->
+    insert into contractfile (id, ordercode, filename, 
+      url, validflag, createtime, 
+      createby, createbyname, updatetime, 
+      updateby, updatebyname)
+    values (#{id,jdbcType=BIGINT}, #{ordercode,jdbcType=VARCHAR}, #{filename,jdbcType=VARCHAR}, 
+      #{url,jdbcType=VARCHAR}, #{validflag,jdbcType=BIT}, #{createtime,jdbcType=TIMESTAMP}, 
+      #{createby,jdbcType=BIGINT}, #{createbyname,jdbcType=VARCHAR}, #{updatetime,jdbcType=TIMESTAMP}, 
+      #{updateby,jdbcType=BIGINT}, #{updatebyname,jdbcType=VARCHAR})
+  </insert>
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.ContractFile" >
+    <!--          -->
+    insert into contractfile
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="ordercode != null" >
+        ordercode,
+      </if>
+      <if test="filename != null" >
+        filename,
+      </if>
+      <if test="url != null" >
+        url,
+      </if>
+      <if test="validflag != null" >
+        validflag,
+      </if>
+      <if test="createtime != null" >
+        createtime,
+      </if>
+      <if test="createby != null" >
+        createby,
+      </if>
+      <if test="createbyname != null" >
+        createbyname,
+      </if>
+      <if test="updatetime != null" >
+        updatetime,
+      </if>
+      <if test="updateby != null" >
+        updateby,
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="ordercode != null" >
+        #{ordercode,jdbcType=VARCHAR},
+      </if>
+      <if test="filename != null" >
+        #{filename,jdbcType=VARCHAR},
+      </if>
+      <if test="url != null" >
+        #{url,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        #{validflag,jdbcType=BIT},
+      </if>
+      <if test="createtime != null" >
+        #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        #{updatebyname,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/ContractLogInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/ContractLogInfoMapper.xml
new file mode 100644
index 0000000..c8d2a4f
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/ContractLogInfoMapper.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.ContractLogInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.ContractLogInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="operatordate" property="operatordate" jdbcType="TIMESTAMP" />
+    <result column="optlog" property="optlog" jdbcType="VARCHAR" />
+    <result column="operator" property="operator" jdbcType="VARCHAR" />
+    <result column="ordercode" property="ordercode" jdbcType="VARCHAR" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, operatordate, optlog, operator, ordercode
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select
+    <include refid="Base_Column_List" />
+    from contractlog
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from contractlog
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.ContractLogInfo" >
+    <!--          -->
+    update contractlog
+    <set >
+      <if test="operatordate != null" >
+        operatordate = #{operatordate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="optlog != null" >
+        optlog = #{optlog,jdbcType=VARCHAR},
+      </if>
+      <if test="operator != null" >
+        operator = #{operator,jdbcType=VARCHAR},
+      </if>
+      <if test="ordercode != null" >
+        ordercode = #{ordercode,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.ContractLogInfo" >
+    <!--          -->
+    update contractlog
+    set operatordate = #{operatordate,jdbcType=TIMESTAMP},
+      optlog = #{optlog,jdbcType=VARCHAR},
+      operator = #{operator,jdbcType=VARCHAR},
+      ordercode = #{ordercode,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/ContractOrderInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/ContractOrderInfoMapper.xml
new file mode 100644
index 0000000..d113cd2
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/ContractOrderInfoMapper.xml
@@ -0,0 +1,275 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.ContractOrderInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.ContractOrderInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="ordercode" property="ordercode" jdbcType="VARCHAR" />
+    <result column="status" property="status" jdbcType="VARCHAR" />
+    <result column="returnstatus" property="returnstatus" jdbcType="VARCHAR" />
+    <result column="operator" property="operator" jdbcType="VARCHAR" />
+    <result column="manufacturer" property="manufacturer" jdbcType="VARCHAR" />
+    <result column="origincontract" property="origincontract" jdbcType="VARCHAR" />
+    <result column="confirmcontract" property="confirmcontract" jdbcType="VARCHAR" />
+    <result column="createdby" property="createdby" jdbcType="VARCHAR" />
+    <result column="createddate" property="createddate" jdbcType="TIMESTAMP" />
+    <result column="modifiedby" property="modifiedby" jdbcType="VARCHAR" />
+    <result column="modifieddate" property="modifieddate" jdbcType="TIMESTAMP" />
+    <result column="producedate" property="producedate" jdbcType="TIMESTAMP" />
+    <result column="isdel" property="isdel" jdbcType="TINYINT" />
+    <result column="comments" property="comments" jdbcType="VARCHAR" />
+    <result column="opinion" property="opinion" jdbcType="VARCHAR" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, ordercode, status,returnstatus, operator, manufacturer, origincontract, confirmcontract, createdby,
+    createddate, modifiedby, modifieddate, producedate, isdel, comments, opinion
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select
+    <include refid="Base_Column_List" />
+    from contractorder
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <select id="selectDataGrid" resultType="com.gk.firework.Domain.Vo.ContractOrderVo">
+    select
+    contractorder.*
+    from contractorder
+    LEFT JOIN `user` ON `user`.companynumber = contractorder.purchaseenterprisenumber
+    <where>
+      1=1
+      AND contractorder.isdel = 0
+      AND `user`.isdel = 0
+      AND `user`.issale = 0
+      <if test="condition.supplyunitname != null and condition.supplyunitname!=''">
+        and contractorder.supplyunitname LIKE CONCAT('%',#{condition.supplyunitname},'%')
+      </if>
+      <if test="condition.supplyenterprisenumber != null and condition.supplyenterprisenumber != ''">
+        and contractorder.supplyenterprisenumber = #{condition.supplyenterprisenumber}
+      </if>
+      <if test="condition.purchaseunitname != null and condition.purchaseunitname != ''">
+        and contractorder.purchaseunitname LIKE CONCAT('%',#{condition.purchaseunitname},'%')
+      </if>
+      <if test="condition.operator != null and condition.operator != ''">
+        and contractorder.operator LIKE CONCAT('%',#{condition.operator},'%')
+      </if>
+      <if test="condition.purchaseenterprisenumber != null and condition.purchaseenterprisenumber != ''">
+        and contractorder.purchaseenterprisenumber = #{condition.purchaseenterprisenumber}
+      </if>
+      <if test="condition.ordercode != null and condition.ordercode!=''">
+        and contractorder.ordercode = #{condition.ordercode}
+      </if>
+      <if test="condition.status != null and condition.status!=''">
+        and contractorder.status = #{condition.status}
+      </if>
+      <if test="condition.province != null and condition.province != ''">
+        and `user`.province = #{condition.province}
+      </if>
+      <if test="condition.city != null and condition.city != ''">
+        and `user`.city = #{condition.city}
+      </if>
+      <if test="condition.area != null and condition.area != ''">
+        and `user`.area = #{condition.area}
+      </if>
+      <if test="condition.town != null and condition.town != ''">
+        and `user`.town = #{condition.town}
+      </if>
+      <if test="condition.community != null and condition.community != ''">
+        and `user`.community = #{condition.community}
+      </if>
+      <if test="condition.confirm != null and condition.confirm == 1">
+        and contractorder.status != '待提交'
+      </if>
+    </where>
+  </select>
+  <select id="selectByStatus" resultType="com.gk.firework.Domain.ContractOrderInfo">
+      select
+      <include refid="Base_Column_List" />
+      from contractorder
+      where isdel = 0
+      and status = #{status}
+      and producedate &lt;= #{now}
+  </select>
+  <select id="selectByOrderCode" resultType="com.gk.firework.Domain.ContractOrderInfo">
+    select
+    <include refid="Base_Column_List" />
+    from contractorder
+    where isdel = 0
+    and ordercode = #{ordercode}
+  </select>
+    <select id="selectCountToday" resultType="java.lang.Integer">
+      select
+      count(0)
+      from contractorder as contractorder
+      where contractorder.isdel = 0
+      and TO_DAYS(contractorder.createddate) = TO_DAYS(NOW())
+    </select>
+    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from contractorder
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.ContractOrderInfo" >
+    <!--          -->
+    insert into contractorder
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="ordercode != null" >
+        ordercode,
+      </if>
+      <if test="status != null" >
+        status,
+      </if>
+      <if test="operator != null" >
+        operator,
+      </if>
+      <if test="manufacturer != null" >
+        manufacturer,
+      </if>
+      <if test="origincontract != null" >
+        origincontract,
+      </if>
+      <if test="confirmcontract != null" >
+        confirmcontract,
+      </if>
+      <if test="createdby != null" >
+        createdby,
+      </if>
+      <if test="createddate != null" >
+        createddate,
+      </if>
+      <if test="modifiedby != null" >
+        modifiedby,
+      </if>
+      <if test="modifieddate != null" >
+        modifieddate,
+      </if>
+      <if test="isdel != null">
+        isdel,
+      </if>
+      <if test="comments != null">
+        comments,
+      </if>
+      <if test="opinion != null">
+        opinion,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="ordercode != null" >
+        #{ordercode,jdbcType=VARCHAR},
+      </if>
+      <if test="status != null" >
+        #{status,jdbcType=VARCHAR},
+      </if>
+      <if test="operator != null" >
+        #{operator,jdbcType=VARCHAR},
+      </if>
+      <if test="manufacturer != null" >
+        #{manufacturer,jdbcType=VARCHAR},
+      </if>
+      <if test="origincontract != null" >
+        #{origincontract,jdbcType=VARCHAR},
+      </if>
+      <if test="confirmcontract != null" >
+        #{confirmcontract,jdbcType=VARCHAR},
+      </if>
+      <if test="createdby != null" >
+        #{createdby,jdbcType=VARCHAR},
+      </if>
+      <if test="createddate != null" >
+        #{createddate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="modifiedby != null" >
+        #{modifiedby,jdbcType=VARCHAR},
+      </if>
+      <if test="modifieddate != null" >
+        #{modifieddate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="isdel != null">
+        #{isdel,jdbcType=TINYINT},
+      </if>
+      <if test="comments != null">
+        #{comments,jdbcType=VARCHAR},
+      </if>
+      <if test="opinion != null">
+        #{opinion,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.ContractOrderInfo" >
+    <!--          -->
+    update contractorder
+    <set >
+      <if test="ordercode != null" >
+        ordercode = #{ordercode,jdbcType=VARCHAR},
+      </if>
+      <if test="status != null" >
+        status = #{status,jdbcType=VARCHAR},
+      </if>
+      <if test="operator != null" >
+        operator = #{operator,jdbcType=VARCHAR},
+      </if>
+      <if test="manufacturer != null" >
+        manufacturer = #{manufacturer,jdbcType=VARCHAR},
+      </if>
+      <if test="origincontract != null" >
+        origincontract = #{origincontract,jdbcType=VARCHAR},
+      </if>
+      <if test="confirmcontract != null" >
+        confirmcontract = #{confirmcontract,jdbcType=VARCHAR},
+      </if>
+      <if test="createdby != null" >
+        createdby = #{createdby,jdbcType=VARCHAR},
+      </if>
+      <if test="createddate != null" >
+        createddate = #{createddate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="modifiedby != null" >
+        modifiedby = #{modifiedby,jdbcType=VARCHAR},
+      </if>
+      <if test="modifieddate != null" >
+        modifieddate = #{modifieddate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="isdel != null">
+        isdel = #{isdel,jdbcType=TINYINT},
+      </if>
+      <if test="comments != null">
+        comments = #{comments,jdbcType=VARCHAR},
+      </if>
+      <if test="opinion != null">
+        opinion = #{opinion,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.ContractOrderInfo" >
+    <!--          -->
+    update contractorder
+    set ordercode = #{ordercode,jdbcType=VARCHAR},
+      status = #{status,jdbcType=VARCHAR},
+      operator = #{operator,jdbcType=VARCHAR},
+      manufacturer = #{manufacturer,jdbcType=VARCHAR},
+      origincontract = #{origincontract,jdbcType=VARCHAR},
+      confirmcontract = #{confirmcontract,jdbcType=VARCHAR},
+      createdby = #{createdby,jdbcType=VARCHAR},
+      createddate = #{createddate,jdbcType=TIMESTAMP},
+      modifiedby = #{modifiedby,jdbcType=VARCHAR},
+      modifieddate = #{modifieddate,jdbcType=TIMESTAMP},
+      isdel = #{isdel,jdbcType=TINYINT},
+      comments = #{comments,jdbcType=VARCHAR},
+      opinion = #{opinion,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+    <update id="updateReturnStatus">
+      update contractorder
+      set returnstatus = #{returnstatus}
+      where ordercode = #{ordercode}
+    </update>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/ContractUnitDetailMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/ContractUnitDetailMapper.xml
new file mode 100644
index 0000000..b3fd75c
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/ContractUnitDetailMapper.xml
@@ -0,0 +1,307 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.ContractUnitDetailMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.ContractUnitDetail" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="type" property="type" jdbcType="VARCHAR" />
+    <result column="unitname" property="unitname" jdbcType="VARCHAR" />
+    <result column="unitaddress" property="unitaddress" jdbcType="VARCHAR" />
+    <result column="representative" property="representative" jdbcType="VARCHAR" />
+    <result column="representativephone" property="representativephone" jdbcType="VARCHAR" />
+    <result column="bank" property="bank" jdbcType="VARCHAR" />
+    <result column="licensenumber" property="licensenumber" jdbcType="VARCHAR" />
+    <result column="zipcode" property="zipcode" jdbcType="VARCHAR" />
+    <result column="agent" property="agent" jdbcType="VARCHAR" />
+    <result column="agentphone" property="agentphone" jdbcType="VARCHAR" />
+    <result column="agentemail" property="agentemail" jdbcType="VARCHAR" />
+    <result column="account" property="account" jdbcType="VARCHAR" />
+    <result column="createby" property="createby" jdbcType="BIGINT" />
+    <result column="createbyname" property="createbyname" jdbcType="VARCHAR" />
+    <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
+    <result column="updateby" property="updateby" jdbcType="BIGINT" />
+    <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+    <result column="updatebyname" property="updatebyname" jdbcType="VARCHAR" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, type, unitname, unitaddress, representative, representativephone, bank, licensenumber,
+    zipcode, agent, agentphone, agentemail, account, createby, createbyname, createtime,
+    updateby, updatetime, updatebyname, validflag
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select
+    <include refid="Base_Column_List" />
+    from contractunitdetail
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <select id="selectPages" resultType="com.gk.firework.Domain.ContractUnitDetail">
+    select unitdetail.*
+    from contractunitdetail as unitdetail
+    left join enterprise as e on unitdetail.enterprisenumber = e.enterprisenumber and e.validflag = 1
+    where unitdetail.validflag = 1
+    <choose>
+      <when test="params.enterprisenumber !=null and params.enterprisenumber != ''">
+        and unitdetail.enterprisenumber = #{params.enterprisenumber}
+      </when>
+      <otherwise>
+        <if test="params.province != null and params.province != ''">
+          and e.province = #{params.province}
+        </if>
+        <if test="params.city != null and params.city != ''">
+          and e.city = #{params.city}
+        </if>
+        <if test="params.district != null and params.district != ''">
+          and e.district = #{params.district}
+        </if>
+        <if test="params.street != null and params.street != ''">
+          and e.street = #{params.street}
+        </if>
+        <if test="params.committee != null and params.committee != ''">
+          and e.committee = #{params.committee}
+        </if>
+      </otherwise>
+    </choose>
+    <if test="params.filterProvince != null and params.filterProvince != ''">
+      and e.province = #{params.filterProvince}
+    </if>
+    <if test="params.filterCity != null and params.filterCity != ''">
+      and e.city = #{params.filterCity}
+    </if>
+    <if test="params.filterDistrict != null and params.filterDistrict != ''">
+      and e.district = #{params.filterDistrict}
+    </if>
+    <if test="params.filterStreet != null and params.filterStreet != ''">
+      and e.street = #{params.filterStreet}
+    </if>
+    <if test="params.filterCommittee != null and params.filterCommittee != ''">
+      and e.committee = #{params.filterCommittee}
+    </if>
+    order by unitdetail.createtime
+
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from contractunitdetail
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.ContractUnitDetail" >
+    <!--          -->
+    insert into contractunitdetail
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="type != null" >
+        type,
+      </if>
+      <if test="unitname != null" >
+        unitname,
+      </if>
+      <if test="unitaddress != null" >
+        unitaddress,
+      </if>
+      <if test="representative != null" >
+        representative,
+      </if>
+      <if test="representativephone != null" >
+        representativephone,
+      </if>
+      <if test="bank != null" >
+        bank,
+      </if>
+      <if test="licensenumber != null" >
+        licensenumber,
+      </if>
+      <if test="zipcode != null" >
+        zipcode,
+      </if>
+      <if test="agent != null" >
+        agent,
+      </if>
+      <if test="agentphone != null" >
+        agentphone,
+      </if>
+      <if test="agentemail != null" >
+        agentemail,
+      </if>
+      <if test="account != null" >
+        account,
+      </if>
+      <if test="createby != null" >
+        createby,
+      </if>
+      <if test="createbyname != null" >
+        createbyname,
+      </if>
+      <if test="createtime != null" >
+        createtime,
+      </if>
+      <if test="updateby != null" >
+        updateby,
+      </if>
+      <if test="updatetime != null" >
+        updatetime,
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname,
+      </if>
+      <if test="validflag != null" >
+        validflag,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="type != null" >
+        #{type,jdbcType=VARCHAR},
+      </if>
+      <if test="unitname != null" >
+        #{unitname,jdbcType=VARCHAR},
+      </if>
+      <if test="unitaddress != null" >
+        #{unitaddress,jdbcType=VARCHAR},
+      </if>
+      <if test="representative != null" >
+        #{representative,jdbcType=VARCHAR},
+      </if>
+      <if test="representativephone != null" >
+        #{representativephone,jdbcType=VARCHAR},
+      </if>
+      <if test="bank != null" >
+        #{bank,jdbcType=VARCHAR},
+      </if>
+      <if test="licensenumber != null" >
+        #{licensenumber,jdbcType=VARCHAR},
+      </if>
+      <if test="zipcode != null" >
+        #{zipcode,jdbcType=VARCHAR},
+      </if>
+      <if test="agent != null" >
+        #{agent,jdbcType=VARCHAR},
+      </if>
+      <if test="agentphone != null" >
+        #{agentphone,jdbcType=VARCHAR},
+      </if>
+      <if test="agentemail != null" >
+        #{agentemail,jdbcType=VARCHAR},
+      </if>
+      <if test="account != null" >
+        #{account,jdbcType=VARCHAR},
+      </if>
+      <if test="createby != null" >
+        #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatetime != null" >
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updatebyname != null" >
+        #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        #{validflag,jdbcType=BIT},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.ContractUnitDetail" >
+    <!--          -->
+    update contractunitdetail
+    <set >
+      <if test="type != null" >
+        type = #{type,jdbcType=VARCHAR},
+      </if>
+      <if test="unitname != null" >
+        unitname = #{unitname,jdbcType=VARCHAR},
+      </if>
+      <if test="unitaddress != null" >
+        unitaddress = #{unitaddress,jdbcType=VARCHAR},
+      </if>
+      <if test="representative != null" >
+        representative = #{representative,jdbcType=VARCHAR},
+      </if>
+      <if test="representativephone != null" >
+        representativephone = #{representativephone,jdbcType=VARCHAR},
+      </if>
+      <if test="bank != null" >
+        bank = #{bank,jdbcType=VARCHAR},
+      </if>
+      <if test="licensenumber != null" >
+        licensenumber = #{licensenumber,jdbcType=VARCHAR},
+      </if>
+      <if test="zipcode != null" >
+        zipcode = #{zipcode,jdbcType=VARCHAR},
+      </if>
+      <if test="agent != null" >
+        agent = #{agent,jdbcType=VARCHAR},
+      </if>
+      <if test="agentphone != null" >
+        agentphone = #{agentphone,jdbcType=VARCHAR},
+      </if>
+      <if test="agentemail != null" >
+        agentemail = #{agentemail,jdbcType=VARCHAR},
+      </if>
+      <if test="account != null" >
+        account = #{account,jdbcType=VARCHAR},
+      </if>
+      <if test="createby != null" >
+        createby = #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        createbyname = #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        createtime = #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        updateby = #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatetime != null" >
+        updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        validflag = #{validflag,jdbcType=BIT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.ContractUnitDetail" >
+    <!--          -->
+    update contractunitdetail
+    set type = #{type,jdbcType=VARCHAR},
+      unitname = #{unitname,jdbcType=VARCHAR},
+      unitaddress = #{unitaddress,jdbcType=VARCHAR},
+      representative = #{representative,jdbcType=VARCHAR},
+      representativephone = #{representativephone,jdbcType=VARCHAR},
+      bank = #{bank,jdbcType=VARCHAR},
+      licensenumber = #{licensenumber,jdbcType=VARCHAR},
+      zipcode = #{zipcode,jdbcType=VARCHAR},
+      agent = #{agent,jdbcType=VARCHAR},
+      agentphone = #{agentphone,jdbcType=VARCHAR},
+      agentemail = #{agentemail,jdbcType=VARCHAR},
+      account = #{account,jdbcType=VARCHAR},
+      createby = #{createby,jdbcType=BIGINT},
+      createbyname = #{createbyname,jdbcType=VARCHAR},
+      createtime = #{createtime,jdbcType=TIMESTAMP},
+      updateby = #{updateby,jdbcType=BIGINT},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      validflag = #{validflag,jdbcType=BIT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/ControlPrintParamMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/ControlPrintParamMapper.xml
new file mode 100644
index 0000000..ce847ad
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/ControlPrintParamMapper.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.ControlPrintParamMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.ControlPrintParam" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="owner" property="owner" jdbcType="VARCHAR" />
+    <result column="type" property="type" jdbcType="VARCHAR" />
+    <result column="leftbasex" property="leftBaseX" jdbcType="INTEGER" />
+    <result column="rightbasex" property="rightBaseX" jdbcType="INTEGER" />
+    <result column="leftqrx" property="leftQrX" jdbcType="INTEGER" />
+    <result column="rightqrx" property="rightQrX" jdbcType="INTEGER" />
+    <result column="leftframex" property="leftFrameX" jdbcType="INTEGER" />
+    <result column="rightframex" property="rightFrameX" jdbcType="INTEGER" />
+    <result column="framey" property="frameY" jdbcType="INTEGER" />
+    <result column="framewidth" property="frameWidth" jdbcType="INTEGER" />
+    <result column="frameheight" property="frameHeight" jdbcType="INTEGER" />
+    <result column="titleoffsetx" property="titleOffsetX" jdbcType="INTEGER" />
+    <result column="titley" property="titleY" jdbcType="INTEGER" />
+    <result column="barcodey" property="barcodeY" jdbcType="INTEGER" />
+    <result column="barcodewidth" property="barcodeWidth" jdbcType="INTEGER" />
+    <result column="barcodewidthradio" property="barcodeWidthRadio" jdbcType="INTEGER" />
+    <result column="barcodeheight" property="barcodeHeight" jdbcType="INTEGER" />
+    <result column="qrcodemodel" property="qrCodeModel" jdbcType="INTEGER" />
+    <result column="qrcodemagnification" property="qrCodeMagnification" jdbcType="INTEGER" />
+    <result column="qrx" property="qrX" jdbcType="INTEGER" />
+    <result column="qry" property="qrY" jdbcType="INTEGER" />
+    <result column="fontsize1" property="fontsize1" jdbcType="INTEGER" />
+    <result column="fontsize2" property="fontsize2" jdbcType="INTEGER" />
+    <result column="fontsize3" property="fontsize3" jdbcType="INTEGER" />
+    <result column="barcodetexty" property="barcodeTextY" jdbcType="INTEGER" />
+    <result column="itemnamey" property="itemNameY" jdbcType="INTEGER" />
+    <result column="typey" property="typeY" jdbcType="INTEGER" />
+    <result column="datey" property="dateY" jdbcType="INTEGER" />
+    <result column="manufacturery" property="manufacturerY" jdbcType="INTEGER" />
+    <result column="manufacturery2" property="manufacturerY2" jdbcType="INTEGER" />
+    <result column="totaly" property="totalY" jdbcType="INTEGER" />
+    <result column="darkness" property="darkness" jdbcType="INTEGER" />
+    <result column="flag" property="flag" jdbcType="TINYINT" />
+    <result column="content" property="content" jdbcType="VARCHAR" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, owner, type, leftbasex, rightbasex, leftqrx, rightqrx, leftframex, rightframex, framey,
+    framewidth, frameheight,titleoffsetx, titley, barcodey, barcodewidth, barcodewidthradio,
+    barcodeheight, qrcodemodel, qrcodemagnification, qrx, qry, fontsize1, fontsize2, fontsize3,
+    barcodetexty, itemnamey, typey, datey, manufacturery, manufacturery2, totaly, flag, content, darkness
+  </sql>
+    <select id="selectDataGrid" resultType="com.gk.firework.Domain.ControlPrintParam">
+        select
+        <include refid="Base_Column_List"/>
+        from controlprintparam
+        <where>
+            1=1
+            <if test="condition.enterprisename != null and condition.enterprisename!=''">
+                and controlprintparam.owner LIKE CONCAT('%',#{condition.enterprisename},'%')
+            </if>
+            <if test="condition.owner != null and condition.owner !=''">
+                and controlprintparam.owner = #{condition.owner}
+            </if>
+            <if test="condition.type != null and condition.type != ''">
+                and controlprintparam.type = #{condition.type}
+            </if>
+        </where>
+    </select>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/CustomerInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/CustomerInfoMapper.xml
new file mode 100644
index 0000000..689d2de
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/CustomerInfoMapper.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.CustomerInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.CustomerInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="name" property="name" jdbcType="VARCHAR" />
+    <result column="gender" property="gender" jdbcType="TINYINT" />
+    <result column="idcardnum" property="idcardnum" jdbcType="VARCHAR" />
+    <result column="nation" property="nation" jdbcType="VARCHAR" />
+    <result column="bornday" property="bornday" jdbcType="DATE" />
+    <result column="address" property="address" jdbcType="VARCHAR" />
+    <result column="frequency" property="frequency" jdbcType="INTEGER" />
+    <result column="num" property="num" jdbcType="INTEGER" />
+    <result column="lasttime" property="lasttime" jdbcType="TIMESTAMP" />
+    <result column="lastnum" property="lastnum" jdbcType="INTEGER" />
+    <result column="createddate" property="createddate" jdbcType="TIMESTAMP" />
+    <result column="modifieddate" property="modifieddate" jdbcType="TIMESTAMP" />
+    <result column="path" property="path" jdbcType="VARCHAR" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, `name`, gender, idcardnum, nation, bornday, address, frequency, num, lasttime,
+    lastnum, createddate, modifieddate,path
+  </sql>
+  <select id="selectCustomerByIdCardNum" resultMap="BaseResultMap">
+    select
+    <include refid="Base_Column_List"/>
+    from customer
+    <where>
+      idcardnum = #{idCardNumber}
+    </where>
+  </select>
+  <select id="getCustomerBySaleOrder" resultMap="BaseResultMap">
+    select
+    customer.id,
+    customer.`name`,
+    customer.gender,
+    customer.idcardnum,
+    customer.nation,
+    customer.bornday,
+    customer.address,
+    customer.frequency,
+    customer.num,
+    customer.lasttime,
+    customer.lastnum,
+    customer.createddate,
+    customer.modifieddate,
+    customer.path
+    from customer as customer
+    left join saleorder as so on so.customer = customer.id
+    <where>
+      so.`code` = #{orderCode}
+    </where>
+  </select>
+
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/DeliveryDetailInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/DeliveryDetailInfoMapper.xml
new file mode 100644
index 0000000..2969230
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/DeliveryDetailInfoMapper.xml
@@ -0,0 +1,342 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.DeliveryDetailInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.DeliveryDetailInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="deliverycode" property="deliverycode" jdbcType="VARCHAR" />
+    <result column="itemcode" property="itemcode" jdbcType="VARCHAR" />
+    <result column="itemname" property="itemname" jdbcType="VARCHAR" />
+    <result column="directioncode" property="directioncode" jdbcType="VARCHAR" />
+    <result column="createat" property="createat" jdbcType="TIMESTAMP" />
+    <result column="createby" property="createby" jdbcType="VARCHAR" />
+    <result column="num" property="num" jdbcType="INTEGER" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, deliverycode, itemcode, itemname, directioncode, createat, createby, num
+  </sql>
+    <select id="selectDetailPage" resultType="java.util.Map">
+      select
+      dd.id,
+      dd.itemcode,
+      dd.itemname,
+      dd.directioncode,
+      case length(dd.directioncode)  when 19 then  concat(dd.num,"挂") else concat(dd.num,"挂/箱") end num,
+      product.type,
+      product.level,
+      product.explosivecontent,
+      product.specification,
+      product.type,
+      product.level,
+      product.boxnumber,
+      product.explosivecontent,
+      product.specification
+      from deliverydetail as dd
+      left join product as product on product.directioncode = dd.itemcode and product.isdel = 0
+      where dd.deliverycode = #{params.code}
+      <if test="params.starttime != null and params.starttime != ''">
+        and dd.createat &gt;= #{params.starttime}
+      </if>
+      <if test="params.endtime != null and params.endtime != ''">
+        and dd.createat &lt;= #{params.endtime}
+      </if>
+      order by dd.createat
+    </select>
+  <select id="selectDetailExport" resultType="java.util.Map">
+    select
+      deliveryorder.ordercode,
+      deliveryorder.shop,
+      deliveryorder.transportcert,
+      dd.id,
+      dd.directioncode,
+      dd.itemcode,
+      dd.itemname,
+      case length(dd.directioncode)  when 19 then  concat(dd.num,"件") else concat(dd.num,"件/箱") end num,
+      product.type,
+      product.level,
+      product.explosivecontent,
+      product.specification
+      from deliverydetail as dd
+      left join deliveryorder as deliveryorder on deliveryorder.ordercode = dd.deliverycode
+      left join product as product on product.directioncode = dd.itemcode and product.isdel = 0
+      where dd.deliverycode = #{code}
+      order by dd.createat
+  </select>
+    <select id="selectEnterpriseDeliveryNumber" resultType="java.math.BigDecimal">
+      SELECT
+      IFNULL(SUM( deliverynum ),0)
+      FROM
+      (
+      SELECT
+      SUM( dd.num )/ p.boxnumber AS deliverynum
+      FROM
+      deliverydetail AS dd
+      LEFT JOIN deliveryorder AS do ON do.`ordercode` = dd.deliverycode
+      LEFT JOIN product AS p ON p.directioncode = dd.itemcode and p.isdel = 0
+      <where>
+        do.companynumber = #{enterprisenumber}
+        <if test="starttime != null and starttime != ''">
+          and do.createat &gt;= #{starttime}
+        </if>
+        <if test="endtime != null and endtime != ''">
+          and do.createat &lt;= #{endtime}
+        </if>
+      </where>
+      GROUP BY
+      dd.itemcode
+      ) temp
+
+    </select>
+    <select id="selectEnterpriseTypeDelivery" resultType="java.util.Map">
+
+        select
+        alldata.*,
+        round(
+        <trim suffixOverrides="+">
+            <foreach collection="list" item="item" index="index">
+                alldata.num_${item} +
+            </foreach>
+        </trim>
+        ,2) totalcol
+
+        from (
+
+        select
+        tmptmptmp.city name,
+        tmptmptmp.enterprisename
+        <foreach collection="list" item="item" index="index">
+            ,MAX(
+            CASE tmptmptmp.type
+            WHEN #{item} THEN
+            round(tmptmptmp.num,2)
+            ELSE
+            0
+            END
+            ) num_${item}
+        </foreach>
+
+        from (
+
+        select
+        tmptmp.city,tmptmp.enterprisename,tmptmp.type,sum(tmptmp.num) num
+        from
+        (
+        SELECT
+        e.city,e.enterprisename,do.companynumber,p.type,sum( dd.num ) /p.
+        boxnumber num
+        FROM
+        deliverydetail AS dd
+        LEFT JOIN
+        deliveryorder AS do ON do.`ordercode` = dd.deliverycode
+        LEFT JOIN product AS p ON p.directioncode = dd.itemcode
+        LEFT JOIN
+        enterprise AS e ON do.companynumber = e.enterprisenumber
+        where
+        e.
+        enterprisestatus = 'ON'
+        and p.isdel = 0
+        and e.validflag = 1
+        <if test="params.starttime != null and params.starttime != ''">
+            and do.createat &gt;= #{params.starttime}
+        </if>
+        <if test="params.endtime != null and params.endtime != ''">
+            and do.createat &lt; #{params.endtime}
+        </if>
+        <if test="params.safetysupervision != null and params.safetysupervision != ''">
+            and e.safetysupervision = #{params.safetysupervision }
+        </if>
+        <if test="params.enterprisename != null and params.enterprisename != ''">
+            and e.enterprisename like concat("%",#{params.enterprisename },"%")
+        </if>
+        <if test="params.province != null and params.province != ''">
+            and e.province = #{params.province }
+        </if>
+        <if test="params.city != null and params.city != ''">
+            and e.city = #{params.city }
+        </if>
+        <if test="params.district != null and params.district != ''">
+            and e.district = #{params.district }
+        </if>
+        GROUP BY
+        do.companynumber,dd.itemcode
+
+        ) as tmptmp
+        group by tmptmp.companynumber,tmptmp.type
+
+
+
+        ) as tmptmptmp
+        group by tmptmptmp.enterprisename)
+
+        as alldata
+
+
+    </select>
+  <select id="selectAllType" resultType="java.util.Map">
+          select
+          lasttmp.*
+          ,
+          round(
+          <trim suffixOverrides="+">
+              <foreach collection="list" item="item" index="index">
+                  ifnull(lasttmp.num_${item},0) +
+              </foreach>
+          </trim>
+          ,2) totalcol
+          from (
+          select
+          '合计' name
+          <foreach collection="list" item="item" index="index">
+              ,MAX(
+              CASE tmptmptmp.type
+              WHEN #{item} THEN
+              round(tmptmptmp.num,2)
+              ELSE
+              0
+              END
+              ) num_${item}
+          </foreach>
+          from (
+
+
+          select
+          tmptmp.type,sum(tmptmp.num) num
+          from
+          (
+          SELECT
+          e.city,do.companynumber,p.type,sum(dd.num) /p.
+          boxnumber num
+          FROM
+          deliverydetail AS dd
+          LEFT JOIN
+          deliveryorder AS do ON do.`ordercode` = dd.deliverycode
+          LEFT JOIN product AS p ON p.directioncode = dd.itemcode
+          LEFT JOIN
+          enterprise AS e ON do.companynumber = e.enterprisenumber
+          where
+          e.
+          enterprisestatus = 'ON'
+          and p.isdel = 0
+          and e.validflag = 1
+          <if test="params.starttime != null and params.starttime != ''">
+              and do.createat &gt;= #{params.starttime}
+          </if>
+          <if test="params.endtime != null and params.endtime != ''">
+              and do.createat &lt; #{params.endtime}
+          </if>
+          <if test="params.province != null and params.province != ''">
+              and e.province = #{params.province }
+          </if>
+          <if test="params.safetysupervision != null and params.safetysupervision != ''">
+              and e.safetysupervision = #{params.safetysupervision }
+          </if>
+          <if test="params.enterprisename != null and params.enterprisename != ''">
+              and e.enterprisename like concat("%",#{params.enterprisename },"%")
+          </if>
+          <if test="params.province != null and params.province != ''">
+              and e.province = #{params.province }
+          </if>
+          <if test="params.city != null and params.city != ''">
+              and e.city = #{params.city }
+          </if>
+          <if test="params.district != null and params.district != ''">
+              and e.district = #{params.district }
+          </if>
+          GROUP BY
+          do.companynumber,dd.itemcode
+
+          ) as tmptmp
+          group by tmptmp.type
+
+
+          ) as tmptmptmp
+          ) as lasttmp
+
+  </select>
+    <select id="selectCityTypeDelivery" resultType="java.util.Map">
+        select
+        citys.name
+        <foreach collection="list" item="item" index="index">
+            ,round(ifnull(num_${item},0),2) num_${item}
+        </foreach>,
+        ifnull(round(
+        <trim suffixOverrides="+">
+            <foreach collection="list" item="item" index="index">
+                alldata.num_${item} +
+            </foreach>
+        </trim>
+        ,2),0) totalcol
+        from (
+        select district.name
+        from district
+        where parentcode =(
+        select district.code
+        from district as district
+        where district.name = #{params.province}
+        and type = 1)
+        and type =2
+        ) as citys
+
+        left join (
+        select
+        tmptmptmp.city
+        <foreach collection="list" item="item" index="index">
+            ,MAX(
+            CASE tmptmptmp.type
+            WHEN #{item} THEN
+            tmptmptmp.num
+            ELSE
+            0
+            END
+            ) num_${item}
+        </foreach>
+
+        from (
+
+        select
+        tmptmp.city,tmptmp.type,sum(tmptmp.num) num
+        from
+        (
+        SELECT
+        e.city,do.companynumber,p.type,sum(dd.num) /p.
+        boxnumber num
+        FROM
+        deliverydetail AS dd
+        LEFT JOIN
+        deliveryorder AS do ON do.`ordercode` = dd.deliverycode
+        LEFT JOIN product AS p ON p.directioncode = dd.itemcode
+        LEFT JOIN
+        enterprise AS e ON do.companynumber = e.enterprisenumber
+        where
+        e.
+        enterprisestatus = 'ON'
+        and p.isdel = 0
+        and e.validflag = 1
+        <if test="params.starttime != null and params.starttime != ''">
+            and do.createat &gt;= #{params.starttime}
+        </if>
+        <if test="params.endtime != null and params.endtime != ''">
+            and do.createat &lt; #{params.endtime}
+        </if>
+        <if test="params.province != null and params.province != ''">
+            and e.province = #{params.province }
+        </if>
+        <if test="params.safetysupervision != null and params.safetysupervision != ''">
+            and e.safetysupervision = #{params.safetysupervision }
+        </if>
+        <if test="params.enterprisename != null and params.enterprisename != ''">
+            and e.enterprisename like concat("%",#{params.enterprisename },"%")
+        </if>
+        GROUP BY
+        do.companynumber,dd.itemcode
+
+        ) as tmptmp
+        group by tmptmp.city,tmptmp.type
+        ) as tmptmptmp
+        group by tmptmptmp.city
+        ) as alldata
+        on citys.name = alldata.city
+    </select>
+
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/DeliveryOrderInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/DeliveryOrderInfoMapper.xml
new file mode 100644
index 0000000..3b46128
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/DeliveryOrderInfoMapper.xml
@@ -0,0 +1,179 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.DeliveryOrderInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.DeliveryOrderInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="ordercode" property="ordercode" jdbcType="VARCHAR" />
+    <result column="createat" property="createat" jdbcType="TIMESTAMP" />
+    <result column="createby" property="createby" jdbcType="VARCHAR" />
+    <result column="operator" property="operator" jdbcType="VARCHAR" />
+    <result column="operatat" property="operatat" jdbcType="TIMESTAMP" />
+    <result column="shop" property="shop" jdbcType="VARCHAR" />
+    <result column="boxnum" property="boxnum" jdbcType="INTEGER" />
+    <result column="type" property="type" jdbcType="TINYINT" />
+    <result column="companynumber" property="companynumber" jdbcType="VARCHAR" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, ordercode, createat, createby, operator, operatat, shop, boxnum, `type`, companynumber
+  </sql>
+    <select id="selectPages" resultType="com.gk.firework.Domain.Vo.DeliveryOrderInfoVo">
+      select
+      do.id,
+      do.ordercode,
+      do.createat,
+      do.createby,
+      do.operator,
+      do.operatat,
+      do.shop,
+      sum(do.num) realboxnum,
+      do.transportcert,
+      do.`type`,
+      do.companynumber
+      from (
+          select
+          do.id,
+          do.ordercode,
+          do.createat,
+          do.createby,
+          do.operator,
+          do.operatat,
+          do.shop,
+          sum(dd.num/p.boxnumber) num,
+          do.transportcert,
+          do.`type`,
+          do.companynumber
+          from deliveryorder as do
+          left join deliverydetail as dd on dd.deliverycode = do.ordercode
+          left join product as p on p.directioncode = dd.itemcode and p.isdel = 0
+          <where>
+            <if test="params.starttime != null and params.starttime != ''">
+              and  do.operatat &gt;= #{params.starttime}
+            </if>
+            <if test="params.endtime != null and params.endtime != ''">
+              and do.operatat &lt; #{params.endtime}
+            </if>
+            <if test="params.transportcert != null and params.transportcert != ''">
+              and do.transportcert like concat("%",#{params.transportcert},"%")
+            </if>
+            <if test="params.type != null and params.type != ''">
+              and do.type = #{params.type}
+            </if>
+            <if test="params.code != null and params.code != ''">
+              and do.ordercode like concat("%",#{params.code},"%")
+            </if>
+          </where>
+          group by do.ordercode,dd.itemcode
+      ) as do
+      left join enterprise as e on e.enterprisenumber = do.companynumber
+      <where>
+         e.validflag = 1
+         and e.enterprisestatus = 'ON'
+        <choose>
+          <when test="params.enterprisenumber != null and params.enterprisenumber != ''">
+            and do.companynumber = #{params.enterprisenumber}
+          </when>
+          <otherwise>
+            <if test="params.province != null and params.province != ''">
+              and e.province = #{params.province}
+            </if>
+            <if test="params.city != null and params.city != ''">
+              and e.city = #{params.city}
+            </if>
+            <if test="params.district != null and params.district != ''">
+              and e.district = #{params.district}
+            </if>
+            <if test="params.street != null and params.street != ''">
+              and e.street = #{params.street}
+            </if>
+            <if test="params.committee != null and params.committee != ''">
+              and e.committee = #{params.committee}
+            </if>
+          </otherwise>
+        </choose>
+        <if test="params.filterProvince != null and params.filterProvince  != ''">
+          and e.province = #{params.filterProvince}
+        </if>
+        <if test="params.filterCity != null and  params.filterCity  != ''">
+          and e.city = #{params.filterCity}
+        </if>
+        <if test="params.filterDistrict != null and params.filterDistrict  != ''">
+          and e.district = #{params.filterDistrict}
+        </if>
+        <if test="params.filterStreet != null and params.filterStreet  != ''">
+          and e.street = #{params.filterStreet}
+        </if>
+        <if test="params.filterCommittee != null and params.filterCommittee  != ''">
+          and e.committee = #{params.filterCommittee}
+        </if>
+        <if test="params.filterType != null and params.filterType != ''">
+          and do.type = #{params.filterType}
+        </if>
+        <if test="params.enterprisename != null and params.enterprisename != ''">
+          and e.enterprisename like concat("%",#{params.enterprisename},"%")
+        </if>
+        <if test="params.safetysupervision != null and params.safetysupervision != ''">
+          and e.safetysupervision = #{params.safetysupervision}
+        </if>
+      </where>
+
+      group by do.ordercode
+      order by do.operatat desc
+    </select>
+
+  <select id="getDeliveryNum" resultType="decimal">
+    select
+    sum(detail.num/product.boxnumber)
+    from deliverydetail as detail
+    left join deliveryorder as delivery on delivery.ordercode = detail.deliverycode
+    left join product on detail.itemcode = product.directioncode and product.isdel = 0
+    <where>
+      delivery.type = 1
+      and delivery.operatat &gt;= #{condition.beginDate}
+      and delivery.operatat &lt;= #{condition.endDate}
+      and delivery.companynumber = #{condition.companyNumber}
+      <if test="condition.itemCode != null">
+        and product.directioncode = #{condition.itemCode}
+      </if>
+    </where>
+  </select>
+
+  <select id="getReturnDeliveryNum" resultType="decimal">
+    select
+    sum(detail.num/product.boxnumber)
+    from deliverydetail as detail
+    left join deliveryorder as delivery on delivery.ordercode = detail.deliverycode
+    left join product on detail.itemcode = product.directioncode and product.isdel = 0
+    <where>
+      delivery.type = 2
+      and delivery.operatat &gt;= #{condition.beginDate}
+      and delivery.operatat &lt;= #{condition.endDate}
+      and delivery.companynumber = #{condition.companyNumber}
+      <if test="condition.itemCode != null">
+        and product.directioncode = #{condition.itemCode}
+      </if>
+    </where>
+  </select>
+  <select id="selectDeliveryOrderByTimeAndUser" resultMap="BaseResultMap">
+    select
+    <include refid="Base_Column_List"/>
+    from deliveryorder
+    <where>
+      operator = #{username}
+      and operatat = #{datetime}
+    </where>
+    limit 1
+  </select>
+
+  <select id="getProductVosByCert" resultType="com.gk.firework.Domain.Vo.ProductVo">
+    select
+    detail.itemcode as itemCode,
+    detail.itemname as name,
+    COUNT(detail.id)as num
+    from deliverydetail_slice1 as detail
+    LEFT JOIN deliveryorder_slice1 as dor on dor.ordercode = detail.deliverycode
+    where dor.transportcert = #{cert}
+    group by detail.itemcode
+  </select>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/DictionaryItemInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/DictionaryItemInfoMapper.xml
new file mode 100644
index 0000000..8420898
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/DictionaryItemInfoMapper.xml
@@ -0,0 +1,217 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.DictionaryItemInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.DictionaryItemInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="sort" property="sort" jdbcType="INTEGER" />
+    <result column="status" property="status" jdbcType="TINYINT" />
+    <result column="text" property="text" jdbcType="VARCHAR" />
+    <result column="value" property="value" jdbcType="VARCHAR" />
+    <result column="createdby" property="createdby" jdbcType="VARCHAR" />
+    <result column="createddate" property="createddate" jdbcType="TIMESTAMP" />
+    <result column="modifiedby" property="modifiedby" jdbcType="VARCHAR" />
+    <result column="modifieddate" property="modifieddate" jdbcType="TIMESTAMP" />
+    <result column="description" property="description" jdbcType="VARCHAR" />
+    <result column="typeid" property="typeid" jdbcType="BIGINT" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, sort, status, text, value, createdby, createddate, modifiedby, modifieddate,
+    description, typeid
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select
+    <include refid="Base_Column_List" />
+    from dictionaryitem
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <select id="selectDataGrid" resultType="com.gk.firework.Domain.DictionaryItemInfo">
+    select
+    <include refid="Base_Column_List" />
+    from dictionaryitem
+    <where>
+      1=1
+      and status = 1
+      <if test="condition.name != null and condition.name != ''">
+        and  text like concat('%',#{condition.name},'%')
+      </if>
+      <if test="condition.dictionaryTypeId != null">
+        and typeid = #{condition.dictionaryTypeId}
+      </if>
+    </where>
+  </select>
+  <select id="selectExistInfo" resultType="com.gk.firework.Domain.DictionaryTypeInfo">
+    select
+    <include refid="Base_Column_List" />
+    from dictionaryitem
+    <where>
+      1=1
+      and id != #{id}
+      <if test="value != null and value != ''">
+        and  value = #{value}
+      </if>
+      <if test="text != null and text !=''">
+        and text = #{text}
+      </if>
+    </where>
+  </select>
+  <select id="selectByType" resultType="com.gk.firework.Domain.DictionaryItemInfo">
+    select
+    dictionaryitem.*
+    from dictionaryitem
+    left join dictionarytype on dictionarytype.id = dictionaryitem.typeid
+    <where>
+      1=1
+      and dictionarytype.status = 1
+      and dictionaryitem.status = 1
+      <if test="dictionaryType != null and dictionaryType !=''">
+        and dictionarytype.text = #{dictionaryType}
+      </if>
+    </where>
+    order by dictionaryitem.sort asc
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from dictionaryitem
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.gk.firework.Domain.DictionaryItemInfo" >
+    <!--          -->
+    insert into dictionaryitem (id, sort, status,
+      text, value, createdby,
+      createddate, modifiedby, modifieddate,
+      description, typeid)
+    values (#{id,jdbcType=BIGINT}, #{sort,jdbcType=INTEGER}, #{status,jdbcType=TINYINT},
+      #{text,jdbcType=VARCHAR}, #{value,jdbcType=VARCHAR}, #{createdby,jdbcType=VARCHAR},
+      #{createddate,jdbcType=TIMESTAMP}, #{modifiedby,jdbcType=VARCHAR}, #{modifieddate,jdbcType=TIMESTAMP},
+      #{description,jdbcType=VARCHAR}, #{typeid,jdbcType=BIGINT})
+  </insert>
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.DictionaryItemInfo" >
+    <!--          -->
+    insert into dictionaryitem
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="sort != null" >
+        sort,
+      </if>
+      <if test="status != null" >
+        status,
+      </if>
+      <if test="text != null" >
+        text,
+      </if>
+      <if test="value != null" >
+        value,
+      </if>
+      <if test="createdby != null" >
+        createdby,
+      </if>
+      <if test="createddate != null" >
+        createddate,
+      </if>
+      <if test="modifiedby != null" >
+        modifiedby,
+      </if>
+      <if test="modifieddate != null" >
+        modifieddate,
+      </if>
+      <if test="description != null" >
+        description,
+      </if>
+      <if test="typeid != null" >
+        typeid,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="sort != null" >
+        #{sort,jdbcType=INTEGER},
+      </if>
+      <if test="status != null" >
+        #{status,jdbcType=TINYINT},
+      </if>
+      <if test="text != null" >
+        #{text,jdbcType=VARCHAR},
+      </if>
+      <if test="value != null" >
+        #{value,jdbcType=VARCHAR},
+      </if>
+      <if test="createdby != null" >
+        #{createdby,jdbcType=VARCHAR},
+      </if>
+      <if test="createddate != null" >
+        #{createddate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="modifiedby != null" >
+        #{modifiedby,jdbcType=VARCHAR},
+      </if>
+      <if test="modifieddate != null" >
+        #{modifieddate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="description != null" >
+        #{description,jdbcType=VARCHAR},
+      </if>
+      <if test="typeid != null" >
+        #{typeid,jdbcType=BIGINT},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.DictionaryItemInfo" >
+    <!--          -->
+    update dictionaryitem
+    <set >
+      <if test="sort != null" >
+        sort = #{sort,jdbcType=INTEGER},
+      </if>
+      <if test="status != null" >
+        status = #{status,jdbcType=TINYINT},
+      </if>
+      <if test="text != null" >
+        text = #{text,jdbcType=VARCHAR},
+      </if>
+      <if test="value != null" >
+        value = #{value,jdbcType=VARCHAR},
+      </if>
+      <if test="createdby != null" >
+        createdby = #{createdby,jdbcType=VARCHAR},
+      </if>
+      <if test="createddate != null" >
+        createddate = #{createddate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="modifiedby != null" >
+        modifiedby = #{modifiedby,jdbcType=VARCHAR},
+      </if>
+      <if test="modifieddate != null" >
+        modifieddate = #{modifieddate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="description != null" >
+        description = #{description,jdbcType=VARCHAR},
+      </if>
+      <if test="typeid != null" >
+        typeid = #{typeid,jdbcType=BIGINT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.DictionaryItemInfo" >
+    <!--          -->
+    update dictionaryitem
+    set sort = #{sort,jdbcType=INTEGER},
+      status = #{status,jdbcType=TINYINT},
+      text = #{text,jdbcType=VARCHAR},
+      value = #{value,jdbcType=VARCHAR},
+      createdby = #{createdby,jdbcType=VARCHAR},
+      createddate = #{createddate,jdbcType=TIMESTAMP},
+      modifiedby = #{modifiedby,jdbcType=VARCHAR},
+      modifieddate = #{modifieddate,jdbcType=TIMESTAMP},
+      description = #{description,jdbcType=VARCHAR},
+      typeid = #{typeid,jdbcType=BIGINT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/DictionaryTypeInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/DictionaryTypeInfoMapper.xml
new file mode 100644
index 0000000..686ea2a
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/DictionaryTypeInfoMapper.xml
@@ -0,0 +1,176 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.DictionaryTypeInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.DictionaryTypeInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="code" property="code" jdbcType="VARCHAR" />
+    <result column="status" property="status" jdbcType="TINYINT" />
+    <result column="text" property="text" jdbcType="VARCHAR" />
+    <result column="createdby" property="createdby" jdbcType="VARCHAR" />
+    <result column="createddate" property="createddate" jdbcType="TIMESTAMP" />
+    <result column="modifiedby" property="modifiedby" jdbcType="VARCHAR" />
+    <result column="modifieddate" property="modifieddate" jdbcType="TIMESTAMP" />
+    <result column="description" property="description" jdbcType="VARCHAR" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, code, status, text, createdby, createddate, modifiedby, modifieddate, description
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select
+    <include refid="Base_Column_List" />
+    from dictionarytype
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <select id="selectDataGrid" resultType="com.gk.firework.Domain.DictionaryTypeInfo">
+    select
+    <include refid="Base_Column_List" />
+    from dictionarytype
+    <where>
+        1=1
+        and status = 1
+      <if test="condition.name != null and condition.name != ''">
+       and  text like concat('%',#{condition.name},'%')
+      </if>
+    </where>
+  </select>
+  <select id="selectExistInfo" resultType="com.gk.firework.Domain.DictionaryTypeInfo">
+    select
+    <include refid="Base_Column_List" />
+    from dictionarytype
+    <where>
+      1=1
+      and id != #{id}
+      <if test="code != null and code !=''">
+        and code = #{code}
+      </if>
+      <if test="text != null and text !=''">
+        and text = #{text}
+      </if>
+    </where>
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from dictionarytype
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.gk.firework.Domain.DictionaryTypeInfo" >
+    <!--          -->
+    insert into dictionarytype (id, code, status,
+      text, createdby, createddate,
+      modifiedby, modifieddate, description
+      )
+    values (#{id,jdbcType=BIGINT}, #{code,jdbcType=VARCHAR}, #{status,jdbcType=TINYINT},
+      #{text,jdbcType=VARCHAR}, #{createdby,jdbcType=VARCHAR}, #{createddate,jdbcType=TIMESTAMP},
+      #{modifiedby,jdbcType=VARCHAR}, #{modifieddate,jdbcType=TIMESTAMP}, #{description,jdbcType=VARCHAR}
+      )
+  </insert>
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.DictionaryTypeInfo" >
+    <!--          -->
+    insert into dictionarytype
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="code != null" >
+        code,
+      </if>
+      <if test="status != null" >
+        status,
+      </if>
+      <if test="text != null" >
+        text,
+      </if>
+      <if test="createdby != null" >
+        createdby,
+      </if>
+      <if test="createddate != null" >
+        createddate,
+      </if>
+      <if test="modifiedby != null" >
+        modifiedby,
+      </if>
+      <if test="modifieddate != null" >
+        modifieddate,
+      </if>
+      <if test="description != null" >
+        description,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="code != null" >
+        #{code,jdbcType=VARCHAR},
+      </if>
+      <if test="status != null" >
+        #{status,jdbcType=TINYINT},
+      </if>
+      <if test="text != null" >
+        #{text,jdbcType=VARCHAR},
+      </if>
+      <if test="createdby != null" >
+        #{createdby,jdbcType=VARCHAR},
+      </if>
+      <if test="createddate != null" >
+        #{createddate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="modifiedby != null" >
+        #{modifiedby,jdbcType=VARCHAR},
+      </if>
+      <if test="modifieddate != null" >
+        #{modifieddate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="description != null" >
+        #{description,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.DictionaryTypeInfo" >
+    <!--          -->
+    update dictionarytype
+    <set >
+      <if test="code != null" >
+        code = #{code,jdbcType=VARCHAR},
+      </if>
+      <if test="status != null" >
+        status = #{status,jdbcType=TINYINT},
+      </if>
+      <if test="text != null" >
+        text = #{text,jdbcType=VARCHAR},
+      </if>
+      <if test="createdby != null" >
+        createdby = #{createdby,jdbcType=VARCHAR},
+      </if>
+      <if test="createddate != null" >
+        createddate = #{createddate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="modifiedby != null" >
+        modifiedby = #{modifiedby,jdbcType=VARCHAR},
+      </if>
+      <if test="modifieddate != null" >
+        modifieddate = #{modifieddate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="description != null" >
+        description = #{description,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.DictionaryTypeInfo" >
+    <!--          -->
+    update dictionarytype
+    set code = #{code,jdbcType=VARCHAR},
+      status = #{status,jdbcType=TINYINT},
+      text = #{text,jdbcType=VARCHAR},
+      createdby = #{createdby,jdbcType=VARCHAR},
+      createddate = #{createddate,jdbcType=TIMESTAMP},
+      modifiedby = #{modifiedby,jdbcType=VARCHAR},
+      modifieddate = #{modifieddate,jdbcType=TIMESTAMP},
+      description = #{description,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/DistrictInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/DistrictInfoMapper.xml
new file mode 100644
index 0000000..030a8e5
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/DistrictInfoMapper.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.DistrictInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.DistrictInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="code" property="code" jdbcType="VARCHAR" />
+    <result column="name" property="name" jdbcType="VARCHAR" />
+    <result column="parentcode" property="parentcode" jdbcType="VARCHAR" />
+    <result column="type" property="type" jdbcType="TINYINT" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, code, name, parentcode, type
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select
+    <include refid="Base_Column_List" />
+    from district
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <select id="selectDistrictInfo" resultType="com.gk.firework.Domain.DistrictInfo">
+    select
+    <include refid="Base_Column_List" />
+    from district
+    where type = #{type}
+    and parentcode = #{parentcode}
+  </select>
+  <select id="selectDistrictByName" resultType="com.gk.firework.Domain.DistrictInfo">
+    SELECT
+	district.*
+    FROM
+	district
+    WHERE
+	district.type = #{type}
+    AND district.parentcode IN (
+	SELECT
+		`code`
+	FROM
+		district
+	WHERE
+	type = #{parenttype}
+	and	district.NAME = #{parentname}
+    )
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from district
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.DistrictInfo" >
+    <!--          -->
+    update district
+    <set >
+      <if test="code != null" >
+        code = #{code,jdbcType=VARCHAR},
+      </if>
+      <if test="name != null" >
+        name = #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="parentcode != null" >
+        parentcode = #{parentcode,jdbcType=VARCHAR},
+      </if>
+      <if test="type != null" >
+        type = #{type,jdbcType=TINYINT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.DistrictInfo" >
+    <!--          -->
+    update district
+    set code = #{code,jdbcType=VARCHAR},
+      name = #{name,jdbcType=VARCHAR},
+      parentcode = #{parentcode,jdbcType=VARCHAR},
+      type = #{type,jdbcType=TINYINT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseAnnualMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseAnnualMapper.xml
new file mode 100644
index 0000000..b71fdaa
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseAnnualMapper.xml
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.EnterpriseAnnualMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.EnterpriseAnnual" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="year" property="year" jdbcType="VARCHAR" />
+    <result column="amount" property="amount" jdbcType="INTEGER" />
+    <result column="type" property="type" jdbcType="VARCHAR" />
+    <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
+    <result column="createby" property="createby" jdbcType="BIGINT" />
+    <result column="createbyname" property="createbyname" jdbcType="VARCHAR" />
+    <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+    <result column="updateby" property="updateby" jdbcType="BIGINT" />
+    <result column="updatebyname" property="updatebyname" jdbcType="VARCHAR" />
+    <result column="enterpriseid" property="enterpriseid" jdbcType="BIGINT" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, year, amount, type, createtime, createby, createbyname, updatetime, updateby, 
+    updatebyname, enterpriseid, validflag
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select 
+    <include refid="Base_Column_List" />
+    from enterpriseannual
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from enterpriseannual
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.EnterpriseAnnual" >
+    <!--          -->
+    insert into enterpriseannual
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="year != null" >
+        year,
+      </if>
+      <if test="amount != null" >
+        amount,
+      </if>
+      <if test="type != null" >
+        type,
+      </if>
+      <if test="createtime != null" >
+        createtime,
+      </if>
+      <if test="createby != null" >
+        createby,
+      </if>
+      <if test="createbyname != null" >
+        createbyname,
+      </if>
+      <if test="updatetime != null" >
+        updatetime,
+      </if>
+      <if test="updateby != null" >
+        updateby,
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname,
+      </if>
+      <if test="enterpriseid != null" >
+        enterpriseid,
+      </if>
+      <if test="validflag != null" >
+        validflag,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="year != null" >
+        #{year,jdbcType=VARCHAR},
+      </if>
+      <if test="amount != null" >
+        #{amount,jdbcType=INTEGER},
+      </if>
+      <if test="type != null" >
+        #{type,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="enterpriseid != null" >
+        #{enterpriseid,jdbcType=BIGINT},
+      </if>
+      <if test="validflag != null" >
+        #{validflag,jdbcType=BIT},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.EnterpriseAnnual" >
+    <!--          -->
+    update enterpriseannual
+    <set >
+      <if test="year != null" >
+        year = #{year,jdbcType=VARCHAR},
+      </if>
+      <if test="amount != null" >
+        amount = #{amount,jdbcType=INTEGER},
+      </if>
+      <if test="type != null" >
+        type = #{type,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        createtime = #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        createby = #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        createbyname = #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        updateby = #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="enterpriseid != null" >
+        enterpriseid = #{enterpriseid,jdbcType=BIGINT},
+      </if>
+      <if test="validflag != null" >
+        validflag = #{validflag,jdbcType=BIT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.EnterpriseAnnual" >
+    <!--          -->
+    update enterpriseannual
+    set year = #{year,jdbcType=VARCHAR},
+      amount = #{amount,jdbcType=INTEGER},
+      type = #{type,jdbcType=VARCHAR},
+      createtime = #{createtime,jdbcType=TIMESTAMP},
+      createby = #{createby,jdbcType=BIGINT},
+      createbyname = #{createbyname,jdbcType=VARCHAR},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      updateby = #{updateby,jdbcType=BIGINT},
+      updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      enterpriseid = #{enterpriseid,jdbcType=BIGINT},
+      validflag = #{validflag,jdbcType=BIT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseApplyMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseApplyMapper.xml
new file mode 100644
index 0000000..d24d743
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseApplyMapper.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.EnterpriseApplyMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.EnterpriseApply" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="safetysupervision" property="safetysupervision" jdbcType="VARCHAR" />
+    <result column="economicindustry" property="economicindustry" jdbcType="VARCHAR" />
+    <result column="enterprisenumber" property="enterprisenumber" jdbcType="VARCHAR" />
+    <result column="enterprisename" property="enterprisename" jdbcType="VARCHAR" />
+    <result column="enterpriseemail" property="enterpriseemail" jdbcType="VARCHAR" />
+    <result column="enterprisesize" property="enterprisesize" jdbcType="VARCHAR" />
+    <result column="enterprisestatus" property="enterprisestatus" jdbcType="VARCHAR" />
+    <result column="department" property="department" jdbcType="VARCHAR" />
+    <result column="devicenumber" property="devicenumber" jdbcType="VARCHAR" />
+    <result column="officeaddress" property="officeaddress" jdbcType="VARCHAR" />
+    <result column="province" property="province" jdbcType="VARCHAR" />
+    <result column="city" property="city" jdbcType="VARCHAR" />
+    <result column="district" property="district" jdbcType="VARCHAR" />
+    <result column="street" property="street" jdbcType="VARCHAR" />
+    <result column="committee" property="committee" jdbcType="VARCHAR" />
+    <result column="securitysupervisory" property="securitysupervisory" jdbcType="VARCHAR" />
+    <result column="officephone" property="officephone" jdbcType="VARCHAR" />
+    <result column="faxphone" property="faxphone" jdbcType="VARCHAR" />
+    <result column="registeraddress" property="registeraddress" jdbcType="VARCHAR" />
+    <result column="registertype" property="registertype" jdbcType="VARCHAR" />
+    <result column="establishtime" property="establishtime" jdbcType="TIMESTAMP" />
+    <result column="qqnumber" property="qqnumber" jdbcType="VARCHAR" />
+    <result column="postcode" property="postcode" jdbcType="VARCHAR" />
+    <result column="roomnumber" property="roomnumber" jdbcType="INTEGER" />
+    <result column="economictype" property="economictype" jdbcType="VARCHAR" />
+    <result column="productioncontent" property="productioncontent" jdbcType="VARCHAR" />
+    <result column="businessregisternumber" property="businessregisternumber" jdbcType="VARCHAR" />
+    <result column="organizationstructurecode" property="organizationstructurecode" jdbcType="VARCHAR" />
+    <result column="validstarttime" property="validstarttime" jdbcType="TIMESTAMP" />
+    <result column="validendtime" property="validendtime" jdbcType="TIMESTAMP" />
+    <result column="employeenumber" property="employeenumber" jdbcType="INTEGER" />
+    <result column="ispaysafetyinsurance" property="ispaysafetyinsurance" jdbcType="BIT" />
+    <result column="insurancecontractnumber" property="insurancecontractnumber" jdbcType="VARCHAR" />
+    <result column="insureamount" property="insureamount" jdbcType="INTEGER" />
+    <result column="insurestarttime" property="insurestarttime" jdbcType="TIMESTAMP" />
+    <result column="insureendtime" property="insureendtime" jdbcType="TIMESTAMP" />
+    <result column="ismajorhazard" property="ismajorhazard" jdbcType="BIT" />
+    <result column="isspecialequipment" property="isspecialequipment" jdbcType="BIT" />
+    <result column="isoccupationalhealthinfo" property="isoccupationalhealthinfo" jdbcType="BIT" />
+    <result column="isspecialpersonnel" property="isspecialpersonnel" jdbcType="BIT" />
+    <result column="selfrecordingcycle" property="selfrecordingcycle" jdbcType="BIT" />
+    <result column="isparententerprise" property="isparententerprise" jdbcType="BIT" />
+    <result column="parententerprisename" property="parententerprisename" jdbcType="VARCHAR" />
+    <result column="infoupdateby" property="infoupdateby" jdbcType="BIGINT" />
+    <result column="infocreateby" property="infocreateby" jdbcType="BIGINT" />
+    <result column="legalrepresentative" property="legalrepresentative" jdbcType="VARCHAR" />
+    <result column="mainprincipal" property="mainprincipal" jdbcType="VARCHAR" />
+    <result column="securityofficer" property="securityofficer" jdbcType="VARCHAR" />
+    <result column="informationofficer" property="informationofficer" jdbcType="VARCHAR" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+    <result column="enterpriselocation" property="enterpriselocation" jdbcType="VARCHAR" />
+    <result column="infocreatetime" property="infocreatetime" jdbcType="TIMESTAMP" />
+    <result column="infocreatebyname" property="infocreatebyname" jdbcType="VARCHAR" />
+    <result column="infoupdatetime" property="infoupdatetime" jdbcType="TIMESTAMP" />
+    <result column="infoupdatebyname" property="infoupdatebyname" jdbcType="VARCHAR" />
+    <result column="dividelogo" property="dividelogo" jdbcType="TINYINT" />
+    <result column="updatefields" property="updatefields" jdbcType="VARCHAR" />
+    <result column="applystatus" property="applystatus" jdbcType="BIT" />
+    <result column="parentid" property="parentid" jdbcType="BIGINT" />
+    <result column="applytime" property="applytime" jdbcType="TIMESTAMP" />
+    <result column="processtime" property="processtime" jdbcType="TIMESTAMP" />
+    <result column="applypersonid" property="applypersonid" jdbcType="BIGINT" />
+    <result column="applypersonname" property="applypersonname" jdbcType="VARCHAR" />
+    <result column="processpersonid" property="processpersonid" jdbcType="BIGINT" />
+    <result column="processpersonname" property="processpersonname" jdbcType="VARCHAR" />
+  </resultMap>
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseDocumentMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseDocumentMapper.xml
new file mode 100644
index 0000000..808cf22
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseDocumentMapper.xml
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.EnterpriseDocumentMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.EnterpriseDocument" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="name" property="name" jdbcType="VARCHAR" />
+    <result column="createby" property="createby" jdbcType="BIGINT" />
+    <result column="createbyname" property="createbyname" jdbcType="VARCHAR" />
+    <result column="updateby" property="updateby" jdbcType="BIGINT" />
+    <result column="updatebyname" property="updatebyname" jdbcType="VARCHAR" />
+    <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
+    <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+    <result column="memo" property="memo" jdbcType="VARCHAR" />
+    <result column="type" property="type" jdbcType="VARCHAR" />
+    <result column="settime" property="settime" jdbcType="TIMESTAMP" />
+      <collection property="enterpriseResources"
+                  javaType="java.util.List"
+                  ofType="com.gk.firework.Domain.EnterpriseResource"
+                  column="{edid=id,tabletype=tabletype}"
+                  select="selectInner">
+      </collection>
+  </resultMap>
+
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, name, createby, createbyname, updateby, updatebyname, createtime, updatetime, 
+    validflag, memo, type
+  </sql>
+
+    <select id="selectInner" parameterType = "java.util.Map" resultType="com.gk.firework.Domain.EnterpriseResource">
+      select  er.id id, er.url,er.filename,er.tabletype
+      from enterpriseresource er
+      where  er.validflag = 1
+      and tabletype = #{tabletype}
+      and belongid = #{edid}
+    </select>
+
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select 
+    <include refid="Base_Column_List" />
+    from enterprisedocument
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+    <select id="selectPages" parameterType = "java.util.Map"  resultMap="BaseResultMap">
+          select ed.*,
+          #{params.tabletype} tabletype
+          from enterprisedocument ed
+          where ed.validflag = 1
+          and ed.enterpriseid = #{params.id}
+          and ed.type = #{params.type}
+          order by ed.createtime desc
+    </select>
+    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from enterprisedocument
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.EnterpriseDocument" >
+    <!--          -->
+    insert into enterprisedocument
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="name != null" >
+        name,
+      </if>
+      <if test="createby != null" >
+        createby,
+      </if>
+      <if test="createbyname != null" >
+        createbyname,
+      </if>
+      <if test="updateby != null" >
+        updateby,
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname,
+      </if>
+      <if test="createtime != null" >
+        createtime,
+      </if>
+      <if test="updatetime != null" >
+        updatetime,
+      </if>
+      <if test="validflag != null" >
+        validflag,
+      </if>
+      <if test="memo != null" >
+        memo,
+      </if>
+      <if test="type != null" >
+        type,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="name != null" >
+        #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="createby != null" >
+        #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updateby != null" >
+        #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updatetime != null" >
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="validflag != null" >
+        #{validflag,jdbcType=BIT},
+      </if>
+      <if test="memo != null" >
+        #{memo,jdbcType=VARCHAR},
+      </if>
+      <if test="type != null" >
+        #{type,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.EnterpriseDocument" >
+    <!--          -->
+    update enterprisedocument
+    <set >
+      <if test="name != null" >
+        name = #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="createby != null" >
+        createby = #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        createbyname = #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updateby != null" >
+        updateby = #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        createtime = #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updatetime != null" >
+        updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="validflag != null" >
+        validflag = #{validflag,jdbcType=BIT},
+      </if>
+      <if test="memo != null" >
+        memo = #{memo,jdbcType=VARCHAR},
+      </if>
+      <if test="type != null" >
+        type = #{type,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.EnterpriseDocument" >
+    <!--          -->
+    update enterprisedocument
+    set name = #{name,jdbcType=VARCHAR},
+      createby = #{createby,jdbcType=BIGINT},
+      createbyname = #{createbyname,jdbcType=VARCHAR},
+      updateby = #{updateby,jdbcType=BIGINT},
+      updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      createtime = #{createtime,jdbcType=TIMESTAMP},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      validflag = #{validflag,jdbcType=BIT},
+      memo = #{memo,jdbcType=VARCHAR},
+      type = #{type,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseFeedMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseFeedMapper.xml
new file mode 100644
index 0000000..a93f04e
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseFeedMapper.xml
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.EnterpriseFeedMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.EnterpriseFeed" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="content" property="content" jdbcType="VARCHAR" />
+    <result column="createby" property="createby" jdbcType="BIGINT" />
+    <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
+    <result column="source" property="source" jdbcType="VARCHAR" />
+    <result column="enterpriseid" property="enterpriseid" jdbcType="BIGINT" />
+    <collection property="enterpriseResources"
+                javaType="java.util.List"
+                ofType="com.gk.firework.Domain.EnterpriseResource"
+                column="{efid=id,tabletype=tabletype}"
+                select="selectInner">
+    </collection>
+
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, content, createby, createtime, from, enterpriseid
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select
+    <include refid="Base_Column_List" />
+    from enterprisefeed
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <select id="selectInner" parameterType = "java.util.Map" resultType="com.gk.firework.Domain.EnterpriseResource">
+      select  er.id id, er.url,er.filename,er.tabletype
+      from enterpriseresource er
+      where  er.validflag = 1
+      and er.tabletype = #{tabletype}
+      and er.belongid = #{efid}
+    </select>
+  <select id="selectPages" parameterType = "java.util.Map" resultMap="BaseResultMap">
+    select ef.*,
+    #{params.tabletype} tabletype
+    from enterprisefeed as ef
+    where ef.validflag = 1
+    and ef.enterpriseid = #{params.id}
+    order by ef.createtime desc
+  </select>
+  <select id="selectExportFeed" resultType="java.util.Map">
+    select e.enterprisename,
+    ef.createtime,
+    ef.findtime,
+    ef.createbyname,
+    ef.content
+    from enterprisefeed as ef
+    left join enterprise as e on e.id = ef.enterpriseid and e.validflag = 1
+    where  e.validflag = 1
+    and ef.validflag = 1
+    <choose>
+      <when test="params.enterprisenumber != null and params.enterprisenumber != ''">
+        and e.enterprisenumber = #{params.enterprisenumber}
+      </when>
+      <otherwise>
+        <if test="params.province != null and params.province != ''">
+          and e.province = #{params.province}
+        </if>
+        <if test="params.city != null and params.city != ''">
+          and e.city = #{params.city}
+        </if>
+        <if test="params.district != null and params.district != ''">
+          and e.district = #{params.district}
+        </if>
+        <if test="params.street != null and params.street != ''">
+          and e.street = #{params.street}
+        </if>
+        <if test="params.committee != null and params.committee != ''">
+          and e.committee = #{params.committee}
+        </if>
+      </otherwise>
+    </choose>
+
+    <if test="params.safetySupervision != null and params.safetySupervision != ''">
+      and e.safetysupervision = #{params.safetySupervision}
+    </if>
+    <if test="params.economicIndustry != null and params.economicIndustry != ''">
+      and e.economicIndustry = #{params.economicIndustry}
+    </if>
+    <if test="params.valid != null and params.valid != ''">
+      <if test="params.valid == 1">
+        and e.validendtime &gt; now()
+      </if>
+      <if test="params.valid == 2">
+        and e.validendtime &lt;= now()
+      </if>
+    </if>
+    <if test="params.filterProvince != null and params.filterProvince  != ''">
+      and e.province = #{params.filterProvince}
+    </if>
+    <if test="params.filterCity != null and  params.filterCity  != ''">
+      and e.city = #{params.filterCity}
+    </if>
+    <if test="params.filterDistrict != null and params.filterDistrict  != ''">
+      and e.district = #{params.filterDistrict}
+    </if>
+    <if test="params.filterStreet != null and params.filterStreet  != ''">
+      and e.street = #{params.filterStreet}
+    </if>
+    <if test="params.filterCommittee != null and params.filterCommittee  != ''">
+      and e.committee = #{params.filterCommittee}
+    </if>
+    <if test="params.enterprisename != null and params.enterprisename  != ''">
+      and e.enterprisename like concat("%",#{params.enterprisename},"%")
+    </if>
+
+  </select>
+    <select id="selectExportFeedById" resultType="java.util.Map">
+      select e.enterprisename,
+      feedback.findtime,
+      feedback.createtime,
+      feedback.createbyname,
+      feedback.content
+      from enterprisefeed as feedback
+      left join  enterprise as e on e.id = feedback.enterpriseid
+      where feedback.validflag = 1
+      and feedback.enterpriseid = #{id}
+    </select>
+
+
+    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from enterprisefeed
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.EnterpriseFeed" >
+    <!--          -->
+    insert into enterprisefeed
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="content != null" >
+        content,
+      </if>
+      <if test="createby != null" >
+        createby,
+      </if>
+      <if test="createtime != null" >
+        createtime,
+      </if>
+      <if test="from != null" >
+        from,
+      </if>
+      <if test="enterpriseid != null" >
+        enterpriseid,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="content != null" >
+        #{content,jdbcType=VARCHAR},
+      </if>
+      <if test="createby != null" >
+        #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createtime != null" >
+        #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="from != null" >
+        #{from,jdbcType=VARCHAR},
+      </if>
+      <if test="enterpriseid != null" >
+        #{enterpriseid,jdbcType=BIGINT},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.EnterpriseFeed" >
+    <!--          -->
+    update enterprisefeed
+    <set >
+      <if test="content != null" >
+        content = #{content,jdbcType=VARCHAR},
+      </if>
+      <if test="createby != null" >
+        createby = #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createtime != null" >
+        createtime = #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="from != null" >
+        from = #{from,jdbcType=VARCHAR},
+      </if>
+      <if test="enterpriseid != null" >
+        enterpriseid = #{enterpriseid,jdbcType=BIGINT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.EnterpriseFeed" >
+    <!--          -->
+    update enterprisefeed
+    set content = #{content,jdbcType=VARCHAR},
+      createby = #{createby,jdbcType=BIGINT},
+      createtime = #{createtime,jdbcType=TIMESTAMP},
+      from = #{from,jdbcType=VARCHAR},
+      enterpriseid = #{enterpriseid,jdbcType=BIGINT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseLicenseMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseLicenseMapper.xml
new file mode 100644
index 0000000..f5cf64b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseLicenseMapper.xml
@@ -0,0 +1,210 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.EnterpriseLicenseMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.EnterpriseLicense" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="licensenumber" property="licensenumber" jdbcType="VARCHAR" />
+    <result column="licensename" property="licensename" jdbcType="VARCHAR" />
+    <result column="authority" property="authority" jdbcType="VARCHAR" />
+    <result column="ranges" property="ranges" jdbcType="VARCHAR" />
+    <result column="validstarttime" property="validstarttime" jdbcType="TIMESTAMP" />
+    <result column="validendtime" property="validendtime" jdbcType="TIMESTAMP" />
+    <result column="enterpriseid" property="enterpriseid" jdbcType="BIGINT" />
+    <result column="createby" property="createby" jdbcType="BIGINT" />
+    <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
+    <result column="createbyname" property="createbyname" jdbcType="VARCHAR" />
+    <result column="updateby" property="updateby" jdbcType="BIGINT" />
+    <result column="updatebyname" property="updatebyname" jdbcType="VARCHAR" />
+    <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+    <collection property="enterpriseResources"
+                javaType="java.util.List"
+                ofType="com.gk.firework.Domain.EnterpriseResource"
+                column="{elid=id,tabletype=tabletype}"
+                select="selectInner">
+    </collection>
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, licensenumber, licensename, authority, ranges, validstarttime, validendtime, enterpriseid, 
+    createby, createbyname, updateby, updatebyname, validflag
+  </sql>
+
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select 
+    <include refid="Base_Column_List" />
+    from enterpriselicense
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+
+  <select id="selectInner" parameterType = "java.util.Map" resultType="com.gk.firework.Domain.EnterpriseResource">
+      select  er.id id, er.url,er.filename,er.tabletype
+      from enterpriseresource er
+      where  er.validflag = 1
+      and tabletype = #{tabletype}
+      and belongid = #{elid}
+    </select>
+
+  <select id="selectPages" parameterType = "java.util.Map" resultMap="BaseResultMap">
+    select el.*,
+    #{params.tabletype} tabletype
+    from enterpriselicense el
+    where el.validflag = 1
+    and el.enterpriseid = #{params.id}
+    order by el.createtime desc
+    </select>
+    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from enterpriselicense
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.EnterpriseLicense" >
+    <!--          -->
+    insert into enterpriselicense
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="licensenumber != null" >
+        licensenumber,
+      </if>
+      <if test="licensename != null" >
+        licensename,
+      </if>
+      <if test="authority != null" >
+        authority,
+      </if>
+      <if test="ranges != null" >
+        ranges,
+      </if>
+      <if test="validstarttime != null" >
+        validstarttime,
+      </if>
+      <if test="validendtime != null" >
+        validendtime,
+      </if>
+      <if test="enterpriseid != null" >
+        enterpriseid,
+      </if>
+      <if test="createby != null" >
+        createby,
+      </if>
+      <if test="createbyname != null" >
+        createbyname,
+      </if>
+      <if test="updateby != null" >
+        updateby,
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname,
+      </if>
+      <if test="validflag != null" >
+        validflag,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="licensenumber != null" >
+        #{licensenumber,jdbcType=VARCHAR},
+      </if>
+      <if test="licensename != null" >
+        #{licensename,jdbcType=VARCHAR},
+      </if>
+      <if test="authority != null" >
+        #{authority,jdbcType=VARCHAR},
+      </if>
+      <if test="ranges != null" >
+        #{ranges,jdbcType=VARCHAR},
+      </if>
+      <if test="validstarttime != null" >
+        #{validstarttime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="validendtime != null" >
+        #{validendtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="enterpriseid != null" >
+        #{enterpriseid,jdbcType=BIGINT},
+      </if>
+      <if test="createby != null" >
+        #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updateby != null" >
+        #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        #{validflag,jdbcType=BIT},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.EnterpriseLicense" >
+    <!--          -->
+    update enterpriselicense
+    <set >
+      <if test="licensenumber != null" >
+        licensenumber = #{licensenumber,jdbcType=VARCHAR},
+      </if>
+      <if test="licensename != null" >
+        licensename = #{licensename,jdbcType=VARCHAR},
+      </if>
+      <if test="authority != null" >
+        authority = #{authority,jdbcType=VARCHAR},
+      </if>
+      <if test="ranges != null" >
+        ranges = #{ranges,jdbcType=VARCHAR},
+      </if>
+      <if test="validstarttime != null" >
+        validstarttime = #{validstarttime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="validendtime != null" >
+        validendtime = #{validendtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="enterpriseid != null" >
+        enterpriseid = #{enterpriseid,jdbcType=BIGINT},
+      </if>
+      <if test="createby != null" >
+        createby = #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        createbyname = #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updateby != null" >
+        updateby = #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        validflag = #{validflag,jdbcType=BIT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.EnterpriseLicense" >
+    <!--          -->
+    update enterpriselicense
+    set licensenumber = #{licensenumber,jdbcType=VARCHAR},
+      licensename = #{licensename,jdbcType=VARCHAR},
+      authority = #{authority,jdbcType=VARCHAR},
+      ranges = #{ranges,jdbcType=VARCHAR},
+      validstarttime = #{validstarttime,jdbcType=TIMESTAMP},
+      validendtime = #{validendtime,jdbcType=TIMESTAMP},
+      enterpriseid = #{enterpriseid,jdbcType=BIGINT},
+      createby = #{createby,jdbcType=BIGINT},
+      createbyname = #{createbyname,jdbcType=VARCHAR},
+      updateby = #{updateby,jdbcType=BIGINT},
+      updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      validflag = #{validflag,jdbcType=BIT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseMapper.xml
new file mode 100644
index 0000000..58d449a
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseMapper.xml
@@ -0,0 +1,768 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gk.firework.Mapper.EnterpriseMapper">
+
+    <resultMap id="BaseResultMap" type="com.gk.firework.Domain.Enterprise">
+        <!--          -->
+        <id column="id" jdbcType="BIGINT" property="id" />
+        <result column="safetysupervision" jdbcType="VARCHAR" property="safetysupervision" />
+        <result column="economicindustry" jdbcType="VARCHAR" property="economicindustry" />
+        <result column="enterprisenumber" jdbcType="VARCHAR" property="enterprisenumber" />
+        <result column="enterprisename" jdbcType="VARCHAR" property="enterprisename" />
+        <result column="enterpriseemail" jdbcType="VARCHAR" property="enterpriseemail" />
+        <result column="enterprisesize" jdbcType="VARCHAR" property="enterprisesize" />
+        <result column="enterprisestatus" jdbcType="VARCHAR" property="enterprisestatus" />
+        <result column="department" jdbcType="VARCHAR" property="department" />
+        <result column="devicenumber" jdbcType="VARCHAR" property="devicenumber" />
+        <result column="officeaddress" jdbcType="VARCHAR" property="officeaddress" />
+        <result column="province" jdbcType="VARCHAR" property="province" />
+        <result column="city" jdbcType="VARCHAR" property="city" />
+        <result column="district" jdbcType="VARCHAR" property="district" />
+        <result column="street" jdbcType="VARCHAR" property="street" />
+        <result column="committee" jdbcType="VARCHAR" property="committee" />
+        <result column="securitysupervisory" jdbcType="VARCHAR" property="securitysupervisory" />
+        <result column="officephone" jdbcType="VARCHAR" property="officephone" />
+        <result column="faxphone" jdbcType="VARCHAR" property="faxphone" />
+        <result column="registeraddress" jdbcType="VARCHAR" property="registeraddress" />
+        <result column="registertype" jdbcType="VARCHAR" property="registertype" />
+        <result column="establishtime" jdbcType="TIMESTAMP" property="establishtime" />
+        <result column="qqnumber" jdbcType="VARCHAR" property="qqnumber" />
+        <result column="postcode" jdbcType="VARCHAR" property="postcode" />
+        <result column="roomnumber" jdbcType="INTEGER" property="roomnumber" />
+        <result column="personnumber" jdbcType="INTEGER" property="personnumber" />
+        <result column="economictype" jdbcType="VARCHAR" property="economictype" />
+        <result column="productioncontent" jdbcType="VARCHAR" property="productioncontent" />
+        <result column="businessregisternumber" jdbcType="VARCHAR" property="businessregisternumber" />
+        <result column="organizationstructurecode" jdbcType="VARCHAR" property="organizationstructurecode" />
+        <result column="validstarttime" jdbcType="TIMESTAMP" property="validstarttime" />
+        <result column="validendtime" jdbcType="TIMESTAMP" property="validendtime" />
+        <result column="employeenumber" jdbcType="INTEGER" property="employeenumber" />
+        <result column="ispaysafetyinsurance" jdbcType="BIT" property="ispaysafetyinsurance" />
+        <result column="insurancecontractnumber" jdbcType="VARCHAR" property="insurancecontractnumber" />
+        <result column="insurancecompany" jdbcType="VARCHAR" property="insurancecompany" />
+        <result column="insureamount" jdbcType="DECIMAL" property="insureamount" />
+        <result column="insurestarttime" jdbcType="TIMESTAMP" property="insurestarttime" />
+        <result column="insureendtime" jdbcType="TIMESTAMP" property="insureendtime" />
+        <result column="ismajorhazard" jdbcType="BIT" property="ismajorhazard" />
+        <result column="isspecialequipment" jdbcType="BIT" property="isspecialequipment" />
+        <result column="isoccupationalhealthinfo" jdbcType="BIT" property="isoccupationalhealthinfo" />
+        <result column="isspecialpersonnel" jdbcType="BIT" property="isspecialpersonnel" />
+        <result column="selfrecordingcycle" jdbcType="BIT" property="selfrecordingcycle" />
+        <result column="isparententerprise" jdbcType="BIT" property="isparententerprise" />
+        <result column="parententerpriseid" jdbcType="BIGINT" property="parententerpriseid" />
+        <result column="parententerprisename" jdbcType="VARCHAR" property="parententerprisename" />
+        <result column="infocreatetime" jdbcType="TIMESTAMP" property="infocreatetime" />
+        <result column="infoupdatetime" jdbcType="TIMESTAMP" property="infoupdatetime" />
+        <result column="infoupdateby" jdbcType="BIGINT" property="infoupdateby" />
+        <result column="infocreateby" jdbcType="BIGINT" property="infocreateby" />
+        <result column="validflag" jdbcType="BIT" property="validflag" />
+        <result column="longitude" jdbcType="VARCHAR" property="longitude" />
+        <result column="latitude" jdbcType="VARCHAR" property="latitude" />
+        <result column="infocreatebyname" jdbcType="VARCHAR" property="infocreatebyname" />
+        <result column="infoupdatebyname" jdbcType="VARCHAR" property="infoupdatebyname" />
+        <result column="divideflag" jdbcType="TINYINT" property="divideflag" />
+        <result column="twobitcode" jdbcType="VARCHAR" property="twobitcode" />
+        <association property="legalrepresentative"
+                    javaType="com.gk.firework.Domain.EnterpriseStaff"
+                    column="{eid=id,type = legalrepresentative}"
+                    select="select1">
+        </association>
+        <association property="mainprincipal"
+                     javaType="com.gk.firework.Domain.EnterpriseStaff"
+                     column="{eid=id,type = mainprincipal }"
+                     select="select1">
+        </association>
+        <association property="securityofficer"
+                     javaType="com.gk.firework.Domain.EnterpriseStaff"
+                     column="{eid=id, type =  securityofficer }"
+                     select="select1">
+        </association>
+        <association property="informationofficer"
+                     javaType="com.gk.firework.Domain.EnterpriseStaff"
+                     column="{eid=id,type = informationofficer }"
+                     select="select1">
+        </association>
+    </resultMap>
+    <update id="updateCompanyCodeAndSetDeviceIdNull" parameterType="com.gk.firework.Domain.Enterprise">
+        update
+            enterprise
+        set
+            dlcompanycode = #{dlcompanycode},
+            infoupdatebyname = #{infoupdatebyname},
+            infoupdateby = #{infoupdateby},
+            infoupdatetime = #{infoupdatetime},
+            deviceid = null
+        where id = #{id}
+
+    </update>
+    <update id="updateLoginValidFlag" >
+        update enterprise
+        set loginvalidflag = #{flag}
+        where id = #{id}
+
+    </update>
+
+    <delete id="deleteOne" parameterType="java.lang.Long">
+        update enterprise
+        set validflag = 0
+        where id = #{id}
+    </delete>
+    <select id="selectPages" resultMap="BaseResultMap">
+        select e.*,
+        #{params.leagalrepresentative} legalrepresentative,
+        #{params.informationofficer} informationofficer,
+        #{params.mainprincipal} mainprincipal,
+        #{params.securityofficer} securityofficer
+        from enterprise e
+        where  e.validflag = 1
+        <choose>
+            <when test="params.enterprisenumber != null and params.enterprisenumber != ''">
+                and e.enterprisenumber = #{params.enterprisenumber}
+            </when>
+            <otherwise>
+                <if test="params.province != null and params.province != ''">
+                    and e.province = #{params.province}
+                </if>
+                <if test="params.city != null and params.city != ''">
+                    and e.city = #{params.city}
+                </if>
+                <if test="params.district != null and params.district != ''">
+                    and e.district = #{params.district}
+                </if>
+                <if test="params.street != null and params.street != ''">
+                    and e.street = #{params.street}
+                </if>
+                <if test="params.committee != null and params.committee != ''">
+                    and e.committee = #{params.committee}
+                </if>
+            </otherwise>
+        </choose>
+
+        <if test="params.safetySupervision != null and params.safetySupervision != ''">
+            and e.safetysupervision = #{params.safetySupervision}
+        </if>
+        <if test="params.economicIndustry != null and params.economicIndustry != ''">
+            and e.economicIndustry = #{params.economicIndustry}
+        </if>
+        <if test="params.valid != null and params.valid != ''">
+           <if test="params.valid == 1">
+               and e.validendtime &gt; now()
+           </if>
+            <if test="params.valid == 2">
+                and e.validendtime &lt;= now()
+            </if>
+        </if>
+        <if test="params.loginValid != null and params.loginValid != ''">
+            <if test="params.loginValid > 0">
+                and e.loginvalidflag = 1
+                or e.loginvalidflag is null
+            </if>
+            <if  test="params.loginValid &lt; 0">
+                and e.loginvalidflag = 0
+            </if>
+        </if>
+        <if test="params.filterProvince != null and params.filterProvince  != ''">
+            and e.province = #{params.filterProvince}
+        </if>
+        <if test="params.filterCity != null and  params.filterCity  != ''">
+            and e.city = #{params.filterCity}
+        </if>
+        <if test="params.filterDistrict != null and params.filterDistrict  != ''">
+            and e.district = #{params.filterDistrict}
+        </if>
+        <if test="params.filterStreet != null and params.filterStreet  != ''">
+            and e.street = #{params.filterStreet}
+        </if>
+        <if test="params.filterCommittee != null and params.filterCommittee  != ''">
+            and e.committee = #{params.filterCommittee}
+        </if>
+        <if test="params.enterprisename != null and params.enterprisename  != ''">
+            and e.enterprisename like concat("%",#{params.enterprisename},"%")
+        </if>
+    </select>
+
+    <select id="select1" parameterType="java.util.Map" resultType="com.gk.firework.Domain.EnterpriseStaff">
+    select es.*
+    from enterprisestaff es
+    where belongid = #{eid}
+    and type =#{type}
+    </select>
+    <select id="selectParentPage" resultType="com.gk.firework.Domain.Enterprise">
+        select id,
+        enterprisename,
+        enterprisenumber,
+        province,
+        city,
+        district,
+        street,
+        committee
+        from enterprise
+        where  validflag = 1
+        <if test="params.enterprisename != null and params.enterprisename  != ''">
+            and enterprisename like concat("%",#{params.enterprisename},"%")
+        </if>
+        <if test="params.safetysupervision != null and params.safetysupervision != ''">
+            and safetysupervision = #{params.safetysupervision}
+        </if>
+        <if test="params.province != null and params.province  != ''">
+            and province = #{params.province}
+        </if>
+        <if test="params.city != null and  params.city  != ''">
+            and city = #{params.city}
+        </if>
+        <if test="params.district != null and params.district  != ''">
+            and district = #{params.district}
+        </if>
+        <if test="params.street != null and params.street  != ''">
+            and street = #{params.street}
+        </if>
+    </select>
+    <select id="selctSimpleByNumber" resultType="com.gk.firework.Domain.Vo.EnterpriseVo">
+        SELECT
+	    enterprise.id,
+	    enterprise.safetysupervision,
+        enterprise.enterprisenumber,
+        enterprise.enterprisename,
+        enterprise.officeaddress,
+	    enterprise.securitysupervisory,
+	    enterprise.officephone,
+        mainprincipal.`name` as mainperson,
+        safety.`name` as safety
+        FROM
+	    enterprise
+        LEFT JOIN enterprisestaff as mainprincipal ON enterprise.id = mainprincipal.belongid and mainprincipal.type = '主要负责人'
+        LEFT JOIN enterprisestaff as safety ON enterprise.id = safety.belongid and safety.type = '安全负责人'
+        WHERE
+        enterprise.validflag = '1'
+        and enterprise.enterprisenumber = #{enterprisenumber}
+        LIMIT 1
+    </select>
+    <select id="selectInAndOut" resultType="java.util.Map">
+        SELECT IFNULL(a.salenum,0) salenum,IFNULL(b.storagenum,0) storagenum
+        from
+        (
+        SELECT count(0) salenum,so.companynumber
+        from
+        saleorder  as so
+        left join saleorderdetail as  sod  on sod.ordercode = so.code
+        where so.companynumber= #{enterprisenumber}
+        and so.createdat > #{starttime}
+        ) as	a
+        LEFT JOIN
+        (SELECT sum(eo.num) storagenum,eo.companynumber
+        from entryorder as eo
+        where eo.companynumber= #{enterprisenumber}
+        and eo.entrydate > #{starttime}
+        )  as b
+        on a.companynumber = b.companynumber
+    </select>
+    <select id="getAllLocation" resultType="java.util.Map">
+        select
+        e.enterprisename,
+        e.enterprisenumber,
+        e.safetysupervision,
+        IFNULL(e.economicindustry,'')  economicindustry,
+        IFNULL(e.officeaddress,'')  officeaddress,
+        IFNULL(e.officephone,'')  officephone,
+        IFNULL(e.latitude,'') latitude,
+        IFNULL(e.longitude,'') longitude
+        from enterprise as e
+        <where>
+            e.validflag = 1
+            <if test="city != null and city !=''">
+                and e.city = #{city}
+            </if>
+        </where>
+    </select>
+    <select id="getRetailStatisticsByArea" resultType="java.util.Map">
+        select
+        e.city,
+        count(0) num
+        from enterprise as e
+        where e.province =  #{province}
+        GROUP BY  e.city
+    </select>
+    <select id="selectExportEnterprise" resultType="com.gk.firework.Domain.Vo.EnterpriseExportVo">
+        select
+        e.enterprisename,
+        e.enterprisenumber,
+        e.securitysupervisory,
+        e.safetysupervision,
+        ifnull(e.province,'') province,
+        ifnull(e.city,'') city,
+        ifnull(e.district,'') district,
+        ifnull(e.street,'') street,
+        ifnull(e.committee,'') committee,
+        date_format(e.validstarttime,'%Y-%m-%d') validstarttime,
+        date_format(e.validendtime,'%Y-%m-%d')  validendtime,
+        e.insurancecontractnumber,
+        e.insureamount,
+        date_format(e.insurestarttime,'%Y-%m-%d') insurestarttime,
+        date_format(e.insureendtime,'%Y-%m-%d') insureendtime ,
+        e.insurancecompany,
+        e.personnumber,
+        e.employeenumber,
+        case e.ispaysafetyinsurance when null then '' when 1 then '是' when 0  then '否' end ispaysafetyinsurance,
+        case e.ismajorhazard  when null then '' when 1 then '有' when 0 then '无' end ismajorhazard,
+        ifnull(standardization.level,'') level
+        from enterprise as e
+        left join enterprisestandardization as standardization on standardization.enterpriseid = e.id and standardization.validflag = 1
+        where  e.validflag = 1
+        <choose>
+            <when test="params.enterprisenumber != null and params.enterprisenumber != ''">
+                and e.enterprisenumber = #{params.enterprisenumber}
+            </when>
+            <otherwise>
+                <if test="params.province != null and params.province != ''">
+                    and e.province = #{params.province}
+                </if>
+                <if test="params.city != null and params.city != ''">
+                    and e.city = #{params.city}
+                </if>
+                <if test="params.district != null and params.district != ''">
+                    and e.district = #{params.district}
+                </if>
+                <if test="params.street != null and params.street != ''">
+                    and e.street = #{params.street}
+                </if>
+                <if test="params.committee != null and params.committee != ''">
+                    and e.committee = #{params.committee}
+                </if>
+            </otherwise>
+        </choose>
+        <if test="params.safetySupervision != null and params.safetySupervision != ''">
+            and e.safetysupervision = #{params.safetySupervision}
+        </if>
+        <if test="params.economicIndustry != null and params.economicIndustry != ''">
+            and e.economicIndustry = #{params.economicIndustry}
+        </if>
+        <if test="params.valid != null and params.valid != ''">
+            <if test="params.valid == 1">
+                and e.validendtime &gt; now()
+            </if>
+            <if test="params.valid == 2">
+                and e.validendtime &lt; now()
+            </if>
+        </if>
+        <if test="params.filterProvince != null and params.filterProvince  != ''">
+            and e.province = #{params.filterProvince}
+        </if>
+        <if test="params.filterCity != null and  params.filterCity  != ''">
+            and e.city = #{params.filterCity}
+        </if>
+        <if test="params.filterDistrict != null and params.filterDistrict  != ''">
+            and e.district = #{params.filterDistrict}
+        </if>
+        <if test="params.filterStreet != null and params.filterStreet  != ''">
+            and e.street = #{params.filterStreet}
+        </if>
+        <if test="params.filterCommittee != null and params.filterCommittee  != ''">
+            and e.committee = #{params.filterCommittee}
+        </if>
+        <if test="params.enterprisename != null and params.enterprisename  != ''">
+            and e.enterprisename like concat("%",#{params.enterprisename},"%")
+        </if>
+        group by e.id
+
+    </select>
+    <select id="getSaleNum" resultType="java.lang.Integer">
+        select count(0)
+        from enterprise as e
+        where e.safetysupervision != #{safetysupervision}
+        and validflag = 1
+    </select>
+
+    <select id="selectSaleEnterprise" resultType="com.gk.firework.Domain.Enterprise">
+        select
+        e.id,
+        e.enterprisename,
+        e.enterprisenumber
+        from enterprise as e
+        <where>
+            e.enterprisestatus = "ON"
+            and e.validflag = 1
+            <if test="params.enterprisenumber != null and params.enterprisenumber  != ''">
+                and (e.enterprisenumber = #{params.enterprisenumber}
+                <if test="params.subList != null and params.subList.size() > 0">
+                    <foreach collection="params.subList" item="item" index="index" >
+                        or  e.enterprisenumber = #{item}
+                    </foreach>
+                </if>
+                )
+            </if>
+            <if test="params.enterprisename != null and params.enterprisename  != ''">
+                and e.enterprisename like concat("%",#{params.enterprisename},"%")
+            </if>
+            <if test="params.parententerprisename != null and params.parententerprisename  != ''">
+                and e.parententerprisename like concat("%",#{params.parententerprisename},"%")
+            </if>
+            <if test="params.safetysupervision != null and params.safetysupervision != ''">
+                and e.safetysupervision = #{params.safetysupervision}
+            </if>
+            <if test="params.filterProvince != null and params.filterProvince  != ''">
+                and e.province = #{params.filterProvince}
+            </if>
+            <if test="params.filterCity != null and  params.filterCity  != ''">
+                and e.city = #{params.filterCity}
+            </if>
+            <if test="params.filterDistrict != null and params.filterDistrict  != ''">
+                and e.district = #{params.filterDistrict}
+            </if>
+            <if test="params.filterStreet != null and params.filterStreet  != ''">
+                and e.street = #{params.filterStreet}
+            </if>
+            <if test="params.filterCommittee != null and params.filterCommittee  != ''">
+                and e.committee = #{params.filterCommittee}
+            </if>
+        </where>
+    </select>
+    <select id="countAllUndoneEnterprise" resultType="java.lang.Integer">
+        select count(0)
+        from enterprise as e
+        <where>
+            e.validflag = 1
+            and e.officeaddress is  null
+            and (e.enterprisestatus = 'ON'  or e.enterprisestatus is  null)
+            <if test="params.province != null and params.province != ''">
+                and e.province = #{params.province}
+            </if>
+            <if test="params.city != null and params.city != ''">
+                and e.city = #{params.city}
+            </if>
+            <if test="params.district != null and params.district != ''">
+                and e.district = #{params.district}
+            </if>
+            <if test="params.street != null and params.street != ''">
+                and e.street = #{params.street}
+            </if>
+            <if test="params.committee != null and params.committee != ''">
+                and e.committee = #{params.committee}
+            </if>
+        </where>
+    </select>
+    <select id="selectListUnderSupervision" resultType="com.gk.firework.Domain.Enterprise">
+        select
+        e.enterprisename,
+        e.enterprisenumber
+        from enterprise as e
+        where e.validflag = 1
+        <if test="params.province != null and params.province != ''">
+            and e.province = #{params.province}
+        </if>
+        <if test="params.city != null and params.city != ''">
+            and e.city = #{params.city}
+        </if>
+        <if test="params.district != null and params.district != ''">
+            and e.district = #{params.district}
+        </if>
+        <if test="params.street != null and params.street != ''">
+            and e.street = #{params.street}
+        </if>
+        <if test="params.committee != null and params.committee != ''">
+            and e.committee = #{params.committee}
+        </if>
+        <if test="params.type == 1">
+            and e.safetysupervision = #{params.safetysupervision}
+        </if>
+        <if test="params.type == 2">
+            and e.safetysupervision != #{params.safetysupervision}
+        </if>
+
+
+    </select>
+    <select id="selectUndoneList" resultType="com.gk.firework.Domain.Enterprise">
+        select
+        e.id,
+        e.enterprisename,
+        e.enterprisenumber,
+        e.province,
+        e.city,
+        e.district,
+        e.street,
+        e.committee
+        from enterprise as e
+        <where>
+            e.validflag = 1
+            and (e.enterprisestatus = 'ON'  or e.enterprisestatus is  null)
+            and e.officeaddress is  null
+            <if test="params.province != null and params.province != ''">
+                and e.province = #{params.province}
+            </if>
+            <if test="params.city != null and params.city != ''">
+                and e.city = #{params.city}
+            </if>
+            <if test="params.district != null and params.district != ''">
+                and e.district = #{params.district}
+            </if>
+            <if test="params.street != null and params.street != ''">
+                and e.street = #{params.street}
+            </if>
+            <if test="params.committee != null and params.committee != ''">
+                and e.committee = #{params.committee}
+            </if>
+            <if test="params.filterProvince != null and params.filterProvince != ''">
+                and e.province = #{params.filterProvince}
+            </if>
+            <if test="params.filterCity != null and params.filterCity != ''">
+                and e.city = #{params.filterCity}
+            </if>
+            <if test="params.filterDistrict != null and params.filterDistrict != ''">
+                and e.district = #{params.filterDistrict}
+            </if>
+            <if test="params.filterStreet != null and params.filterStreet != ''">
+                and e.street = #{params.filterStreet}
+            </if>
+            <if test="params.filterCommittee != null and params.filterCommittee != ''">
+                and e.committee = #{params.filterCommittee}
+            </if>
+            <if test="params.enterprisename != null and params.enterprisename != ''">
+                and e.enterprisename like concat("%",#{params.enterprisename},"%")
+            </if>
+        </where>
+    </select>
+    <select id="countAllEnterpriseExpired" resultType="java.lang.Integer">
+        select count(0)
+        from enterprise as e
+        <where>
+            e.validflag = 1
+            and (e.enterprisestatus = 'ON'  or e.enterprisestatus is  null)
+            and (e.validendtime &lt; now() or e.validendtime is null)
+            <if test="params.province != null and params.province != ''">
+                and e.province = #{params.province}
+            </if>
+            <if test="params.city != null and params.city != ''">
+                and e.city = #{params.city}
+            </if>
+            <if test="params.district != null and params.district != ''">
+                and e.district = #{params.district}
+            </if>
+            <if test="params.street != null and params.street != ''">
+                and e.street = #{params.street}
+            </if>
+            <if test="params.committee != null and params.committee != ''">
+                and e.committee = #{params.committee}
+            </if>
+        </where>
+    </select>
+    <select id="selectExpiredList" resultType="com.gk.firework.Domain.Enterprise">
+        select
+        e.id,
+        e.enterprisename,
+        e.enterprisenumber,
+        e.province,
+        e.city,
+        e.district,
+        e.street,
+        e.committee,
+        e.validstarttime,
+        e.validendtime
+        from enterprise as e
+        <where>
+            e.validflag = 1
+            and (e.enterprisestatus = 'ON'  or e.enterprisestatus is  null)
+            and (e.validendtime &lt; now() or e.validendtime is null)
+            <if test="params.province != null and params.province != ''">
+                and e.province = #{params.province}
+            </if>
+            <if test="params.city != null and params.city != ''">
+                and e.city = #{params.city}
+            </if>
+            <if test="params.district != null and params.district != ''">
+                and e.district = #{params.district}
+            </if>
+            <if test="params.street != null and params.street != ''">
+                and e.street = #{params.street}
+            </if>
+            <if test="params.committee != null and params.committee != ''">
+                and e.committee = #{params.committee}
+            </if>
+            <if test="params.filterProvince != null and params.filterProvince != ''">
+                and e.province = #{params.filterProvince}
+            </if>
+            <if test="params.filterCity != null and params.filterCity != ''">
+                and e.city = #{params.filterCity}
+            </if>
+            <if test="params.filterDistrict != null and params.filterDistrict != ''">
+                and e.district = #{params.filterDistrict}
+            </if>
+            <if test="params.filterStreet != null and params.filterStreet != ''">
+                and e.street = #{params.filterStreet}
+            </if>
+            <if test="params.filterCommittee != null and params.filterCommittee != ''">
+                and e.committee = #{params.filterCommittee}
+            </if>
+            <if test="params.enterprisename != null and params.enterprisename != ''">
+                and e.enterprisename like concat("%",#{params.enterprisename},"%")
+            </if>
+        </where>
+        order by e.validendtime desc
+
+    </select>
+    <select id="getEnterpriseByLimit" resultType="com.gk.firework.Domain.Enterprise">
+        select
+            enterprise.id,
+            enterprise.enterprisename,
+            enterprise.enterprisenumber,
+            enterprise.province,
+            enterprise.city,
+            enterprise.district
+            from enterprise
+        <where>
+            1=1
+            and enterprise.validflag = 1
+            and enterprise.enterprisestatus = 'ON'
+            <if test="condition.name != null and condition.name != ''">
+                and enterprise.enterprisename like CONCAT('%',#{condition.name},'%')
+            </if>
+            <if test="condition.operator != null and condition.operator != ''">
+                and (enterprise.enterprisenumber =#{condition.operator}
+                <if test="condition.subList != null and condition.subList.size() > 0">
+                    <foreach collection="condition.subList" item="item" index="index" >
+                        or  enterprise.enterprisenumber = #{item}
+                    </foreach>
+                </if>
+                )
+            </if>
+            <if test="condition.type != null and condition.type != ''">
+                and enterprise.safetysupervision = #{condition.type}
+            </if>
+            <if test="condition.province != null and condition.province != ''">
+                and enterprise.province = #{condition.province}
+            </if>
+            <if test="condition.city != null and condition.city != ''">
+                and enterprise.city = #{condition.city}
+            </if>
+            <if test="condition.district != null and condition.district != ''">
+                and enterprise.district = #{condition.district}
+            </if>
+            <if test="condition.street != null and condition.street != ''">
+                and enterprise.street = #{condition.street}
+            </if>
+            <if test="condition.community != null and condition.community != ''">
+                and enterprise.committee = #{condition.community}
+            </if>
+        </where>
+    </select>
+
+    <select id="getEnterpriseByLimitCount" resultType="integer">
+        select
+        count(*)
+        from (
+        select
+        enterprise.id,
+        enterprise.enterprisename,
+        enterprise.enterprisenumber,
+        enterprise.province,
+        enterprise.city,
+        enterprise.district
+        from enterprise
+        <where>
+            1=1
+            and enterprise.validflag = 1
+            and enterprise.enterprisestatus = 'ON'
+            <if test="condition.name != null and condition.name != ''">
+                and enterprise.enterprisename like CONCAT('%',#{condition.name},'%')
+            </if>
+            <if test="condition.operator != null and condition.operator != ''">
+                and (enterprise.enterprisenumber =#{condition.operator}
+                <if test="condition.subList != null and condition.subList.size() > 0">
+                    <foreach collection="condition.subList" item="item" index="index">
+                        or enterprise.enterprisenumber = #{item}
+                    </foreach>
+                </if>
+                )
+            </if>
+            <if test="condition.type != null and condition.type != ''">
+                and enterprise.safetysupervision = #{condition.type}
+            </if>
+            <if test="condition.province != null and condition.province != ''">
+                and enterprise.province = #{condition.province}
+            </if>
+            <if test="condition.city != null and condition.city != ''">
+                and enterprise.city = #{condition.city}
+            </if>
+            <if test="condition.district != null and condition.district != ''">
+                and enterprise.district = #{condition.district}
+            </if>
+            <if test="condition.street != null and condition.street != ''">
+                and enterprise.street = #{condition.street}
+            </if>
+            <if test="condition.community != null and condition.community != ''">
+                and enterprise.committee = #{condition.community}
+            </if>
+        </where>
+        )temp
+    </select>
+
+    <select id="selectEnterpriseIdsByLocation" resultType="java.lang.Long">
+        select e.id from enterprise e
+        <where>
+            1=1
+            <if test="province != null and province != ''">
+                and province = #{province}
+            </if>
+            <if test="city != null and city != ''">
+                and city = #{city}
+            </if>
+            <if test="district != null and district != ''">
+                and district = #{district}
+            </if>
+            <if test="street != null and street != ''">
+                and street = #{street}
+            </if>
+            <if test="committee != null and committee != ''">
+                and committee = #{committee}
+            </if>
+        </where>
+    </select>
+
+    <select id="selectEnterpriseListByLocation" resultType="com.gk.firework.Domain.Enterprise">
+        select
+        e.id,
+        e.enterprisename,
+        e.enterprisenumber,
+        e.province,
+        e.city,
+        e.district,
+        e.street,
+        e.committee,
+        e.validstarttime,
+        e.validendtime
+        from enterprise as e
+        <where>
+            1=1
+            <if test="province != null and province != ''">
+                and e.province like #{province}
+            </if>
+            <if test="city != null and city != ''">
+                and e.city like #{city}
+            </if>
+            <if test="district != null and district != ''">
+                and e.district like #{district}
+            </if>
+            <if test="street != null and street != ''">
+                and e.street like #{street}
+            </if>
+            <if test="committee != null and committee != ''">
+                and e.committee like #{committee}
+            </if>
+        </where>
+    </select>
+
+    <select id="selectEnterpriseListByNameLike" parameterType="string" resultType="com.gk.firework.Domain.Enterprise">
+        <bind name="partten" value="'%' + name + '%'"/>
+        select
+        e.id,
+        e.enterprisename,
+        e.enterprisenumber,
+        e.province,
+        e.city,
+        e.district,
+        e.street,
+        e.committee,
+        e.validstarttime,
+        e.validendtime
+        from enterprise as e
+        where e.enterprisename like #{partten}
+    </select>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/EnterprisePersonMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/EnterprisePersonMapper.xml
new file mode 100644
index 0000000..2e20757
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/EnterprisePersonMapper.xml
@@ -0,0 +1,279 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.EnterprisePersonMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.EnterprisePerson" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="name" property="name" jdbcType="VARCHAR" />
+    <result column="post" property="post" jdbcType="VARCHAR" />
+    <result column="number" property="number" jdbcType="VARCHAR" />
+    <result column="validstarttime" property="validstarttime" jdbcType="TIMESTAMP" />
+    <result column="validendtime" property="validendtime" jdbcType="TIMESTAMP" />
+    <result column="memo" property="memo" jdbcType="VARCHAR" />
+    <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
+    <result column="createby" property="createby" jdbcType="BIGINT" />
+    <result column="createbyname" property="createbyname" jdbcType="VARCHAR" />
+    <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+    <result column="updateby" property="updateby" jdbcType="BIGINT" />
+    <result column="updatebyname" property="updatebyname" jdbcType="VARCHAR" />
+    <result column="enterpriseid" property="enterpriseid" jdbcType="BIGINT" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+    <result column="type" property="type" jdbcType="VARCHAR" />
+    <collection property="enterpriseResources"
+                javaType="java.util.List"
+                ofType="com.gk.firework.Domain.EnterpriseResource"
+                column="{epid=id,tabletype=tabletype}"
+                select="selectInner">
+    </collection>
+  </resultMap>
+  <resultMap id="ResultMapWithBLOBs" type="com.gk.firework.Domain.EnterprisePerson" extends="BaseResultMap" >
+    <result column="isreview" property="isreview" jdbcType="BIT" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, name, post, number, validstarttime, validendtime, memo, createtime, createby, 
+    createbyname, updatetime, updateby, updatebyname, enterpriseid, validflag, type
+  </sql>
+
+  <select id="selectInner" parameterType = "java.util.Map" resultType="com.gk.firework.Domain.EnterpriseResource">
+      select  er.id id, er.url,er.filename,er.tabletype
+      from enterpriseresource er
+      where  er.validflag = 1
+      and er.tabletype= #{tabletype}
+      and belongid = #{epid}
+    </select>
+
+  <sql id="Blob_Column_List" >
+    <!--          -->
+    other
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="ResultMapWithBLOBs" parameterType="java.lang.Long" >
+    <!--          -->
+    select 
+    <include refid="Base_Column_List" />
+    ,
+    <include refid="Blob_Column_List" />
+    from enterpriseperson
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <select id="selectPages" resultMap="BaseResultMap">
+        select ep.*,
+        #{params.tabletype} tabletype
+          from enterpriseperson ep
+          where ep.validflag = 1
+          and ep.enterpriseid = #{params.id}
+          and ep.type = #{params.category}
+          order by ep.createtime desc
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from enterpriseperson
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.EnterprisePerson" >
+    <!--          -->
+    insert into enterpriseperson
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="name != null" >
+        name,
+      </if>
+      <if test="post != null" >
+        post,
+      </if>
+      <if test="number != null" >
+        number,
+      </if>
+      <if test="validstarttime != null" >
+        validstarttime,
+      </if>
+      <if test="validendtime != null" >
+        validendtime,
+      </if>
+      <if test="memo != null" >
+        memo,
+      </if>
+      <if test="createtime != null" >
+        createtime,
+      </if>
+      <if test="createby != null" >
+        createby,
+      </if>
+      <if test="createbyname != null" >
+        createbyname,
+      </if>
+      <if test="updatetime != null" >
+        updatetime,
+      </if>
+      <if test="updateby != null" >
+        updateby,
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname,
+      </if>
+      <if test="enterpriseid != null" >
+        enterpriseid,
+      </if>
+      <if test="validflag != null" >
+        validflag,
+      </if>
+      <if test="type != null" >
+        type,
+      </if>
+      <if test="other != null" >
+        other,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="name != null" >
+        #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="post != null" >
+        #{post,jdbcType=VARCHAR},
+      </if>
+      <if test="number != null" >
+        #{number,jdbcType=VARCHAR},
+      </if>
+      <if test="validstarttime != null" >
+        #{validstarttime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="validendtime != null" >
+        #{validendtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="memo != null" >
+        #{memo,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="enterpriseid != null" >
+        #{enterpriseid,jdbcType=BIGINT},
+      </if>
+      <if test="validflag != null" >
+        #{validflag,jdbcType=BIT},
+      </if>
+      <if test="type != null" >
+        #{type,jdbcType=VARCHAR},
+      </if>
+      <if test="other != null" >
+        #{other,jdbcType=LONGVARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.EnterprisePerson" >
+    <!--          -->
+    update enterpriseperson
+    <set >
+      <if test="name != null" >
+        name = #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="post != null" >
+        post = #{post,jdbcType=VARCHAR},
+      </if>
+      <if test="number != null" >
+        number = #{number,jdbcType=VARCHAR},
+      </if>
+      <if test="validstarttime != null" >
+        validstarttime = #{validstarttime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="validendtime != null" >
+        validendtime = #{validendtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="memo != null" >
+        memo = #{memo,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        createtime = #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        createby = #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        createbyname = #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        updateby = #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="enterpriseid != null" >
+        enterpriseid = #{enterpriseid,jdbcType=BIGINT},
+      </if>
+      <if test="validflag != null" >
+        validflag = #{validflag,jdbcType=BIT},
+      </if>
+      <if test="type != null" >
+        type = #{type,jdbcType=VARCHAR},
+      </if>
+      <if test="other != null" >
+        other = #{other,jdbcType=LONGVARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKeyWithBLOBs" parameterType="com.gk.firework.Domain.EnterprisePerson" >
+    <!--          -->
+    update enterpriseperson
+    set name = #{name,jdbcType=VARCHAR},
+      post = #{post,jdbcType=VARCHAR},
+      number = #{number,jdbcType=VARCHAR},
+      validstarttime = #{validstarttime,jdbcType=TIMESTAMP},
+      validendtime = #{validendtime,jdbcType=TIMESTAMP},
+      memo = #{memo,jdbcType=VARCHAR},
+      createtime = #{createtime,jdbcType=TIMESTAMP},
+      createby = #{createby,jdbcType=BIGINT},
+      createbyname = #{createbyname,jdbcType=VARCHAR},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      updateby = #{updateby,jdbcType=BIGINT},
+      updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      enterpriseid = #{enterpriseid,jdbcType=BIGINT},
+      validflag = #{validflag,jdbcType=BIT},
+      type = #{type,jdbcType=VARCHAR},
+      other = #{other,jdbcType=LONGVARCHAR}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.EnterprisePerson" >
+    <!--          -->
+    update enterpriseperson
+    set name = #{name,jdbcType=VARCHAR},
+      post = #{post,jdbcType=VARCHAR},
+      number = #{number,jdbcType=VARCHAR},
+      validstarttime = #{validstarttime,jdbcType=TIMESTAMP},
+      validendtime = #{validendtime,jdbcType=TIMESTAMP},
+      memo = #{memo,jdbcType=VARCHAR},
+      createtime = #{createtime,jdbcType=TIMESTAMP},
+      createby = #{createby,jdbcType=BIGINT},
+      createbyname = #{createbyname,jdbcType=VARCHAR},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      updateby = #{updateby,jdbcType=BIGINT},
+      updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      enterpriseid = #{enterpriseid,jdbcType=BIGINT},
+      validflag = #{validflag,jdbcType=BIT},
+      type = #{type,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseResourceMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseResourceMapper.xml
new file mode 100644
index 0000000..257af96
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseResourceMapper.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.EnterpriseResourceMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.EnterpriseResource" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="tabletype" property="tabletype" jdbcType="VARCHAR" />
+    <result column="url" property="url" jdbcType="VARCHAR" />
+    <result column="filename" property="filename" jdbcType="VARCHAR" />
+    <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
+    <result column="createby" property="createby" jdbcType="BIGINT" />
+    <result column="createbyname" property="createbyname" jdbcType="VARCHAR" />
+    <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+    <result column="updateby" property="updateby" jdbcType="BIGINT" />
+    <result column="updatebyname" property="updatebyname" jdbcType="VARCHAR" />
+    <result column="belongid" property="belongid" jdbcType="BIGINT" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, tabletype, url, filename, createtime, createby, createbyname, updatetime, updateby, 
+    updatebyname, belongid, validflag
+  </sql>
+
+
+
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select 
+    <include refid="Base_Column_List" />
+    from enterpriseresource
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from enterpriseresource
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.EnterpriseResource" >
+    <!--          -->
+    insert into enterpriseresource
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="tabletype != null" >
+        tabletype,
+      </if>
+      <if test="url != null" >
+        url,
+      </if>
+      <if test="filename != null" >
+        filename,
+      </if>
+      <if test="createtime != null" >
+        createtime,
+      </if>
+      <if test="createby != null" >
+        createby,
+      </if>
+      <if test="createbyname != null" >
+        createbyname,
+      </if>
+      <if test="updatetime != null" >
+        updatetime,
+      </if>
+      <if test="updateby != null" >
+        updateby,
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname,
+      </if>
+      <if test="belongid != null" >
+        belongid,
+      </if>
+      <if test="validflag != null" >
+        validflag,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="tabletype != null" >
+        #{tabletype,jdbcType=VARCHAR},
+      </if>
+      <if test="url != null" >
+        #{url,jdbcType=VARCHAR},
+      </if>
+      <if test="filename != null" >
+        #{filename,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="belongid != null" >
+        #{belongid,jdbcType=BIGINT},
+      </if>
+      <if test="validflag != null" >
+        #{validflag,jdbcType=BIT},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.EnterpriseResource" >
+    <!--          -->
+    update enterpriseresource
+    <set >
+      <if test="tabletype != null" >
+        tabletype = #{tabletype,jdbcType=VARCHAR},
+      </if>
+      <if test="url != null" >
+        url = #{url,jdbcType=VARCHAR},
+      </if>
+      <if test="filename != null" >
+        filename = #{filename,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        createtime = #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        createby = #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        createbyname = #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        updateby = #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="belongid != null" >
+        belongid = #{belongid,jdbcType=BIGINT},
+      </if>
+      <if test="validflag != null" >
+        validflag = #{validflag,jdbcType=BIT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.EnterpriseResource" >
+    <!--          -->
+    update enterpriseresource
+    set tabletype = #{tabletype,jdbcType=VARCHAR},
+      url = #{url,jdbcType=VARCHAR},
+      filename = #{filename,jdbcType=VARCHAR},
+      createtime = #{createtime,jdbcType=TIMESTAMP},
+      createby = #{createby,jdbcType=BIGINT},
+      createbyname = #{createbyname,jdbcType=VARCHAR},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      updateby = #{updateby,jdbcType=BIGINT},
+      updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      belongid = #{belongid,jdbcType=BIGINT},
+      validflag = #{validflag,jdbcType=BIT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+
+  <select id="getUrlByBelongIdAndType" resultType="string">
+    select
+    url
+    from enterpriseresource
+    <where>
+      belongid = #{id}
+      and tabletype = #{type}
+    </where>
+  </select>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseStaffMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseStaffMapper.xml
new file mode 100644
index 0000000..8abd591
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseStaffMapper.xml
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.EnterpriseStaffMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.EnterpriseStaff" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="type" property="type" jdbcType="VARCHAR" />
+    <result column="name" property="name" jdbcType="VARCHAR" />
+    <result column="post" property="post" jdbcType="VARCHAR" />
+    <result column="identify" property="identify" jdbcType="VARCHAR" />
+    <result column="phone" property="phone" jdbcType="VARCHAR" />
+    <result column="number" property="number" jdbcType="VARCHAR" />
+    <result column="officephone" property="officephone" jdbcType="VARCHAR" />
+    <result column="validstarttime" property="validstarttime" jdbcType="TIMESTAMP" />
+    <result column="validendtime" property="validendtime" jdbcType="TIMESTAMP" />
+    <result column="belongid" property="belongid" jdbcType="BIGINT" />
+    <result column="belongname" property="belongname" jdbcType="VARCHAR" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, type, name, post, identify, phone, number, validstarttime, validendtime, belongid, 
+    belongname
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select 
+    <include refid="Base_Column_List" />
+    from enterprisestaff
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from enterprisestaff
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.EnterpriseStaff" >
+    <!--          -->
+    insert into enterprisestaff
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="type != null" >
+        type,
+      </if>
+      <if test="name != null" >
+        name,
+      </if>
+      <if test="post != null" >
+        post,
+      </if>
+      <if test="identify != null" >
+        identify,
+      </if>
+      <if test="phone != null" >
+        phone,
+      </if>
+      <if test="number != null" >
+        number,
+      </if>
+      <if test="validstarttime != null" >
+        validstarttime,
+      </if>
+      <if test="validendtime != null" >
+        validendtime,
+      </if>
+      <if test="belongid != null" >
+        belongid,
+      </if>
+      <if test="belongname != null" >
+        belongname,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="type != null" >
+        #{type,jdbcType=VARCHAR},
+      </if>
+      <if test="name != null" >
+        #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="post != null" >
+        #{post,jdbcType=VARCHAR},
+      </if>
+      <if test="identify != null" >
+        #{identify,jdbcType=VARCHAR},
+      </if>
+      <if test="phone != null" >
+        #{phone,jdbcType=VARCHAR},
+      </if>
+      <if test="number != null" >
+        #{number,jdbcType=VARCHAR},
+      </if>
+      <if test="validstarttime != null" >
+        #{validstarttime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="validendtime != null" >
+        #{validendtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="belongid != null" >
+        #{belongid,jdbcType=BIGINT},
+      </if>
+      <if test="belongname != null" >
+        #{belongname,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.EnterpriseStaff" >
+    <!--          -->
+    update enterprisestaff
+    <set >
+      <if test="type != null" >
+        type = #{type,jdbcType=VARCHAR},
+      </if>
+      <if test="name != null" >
+        name = #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="post != null" >
+        post = #{post,jdbcType=VARCHAR},
+      </if>
+      <if test="identify != null" >
+        identify = #{identify,jdbcType=VARCHAR},
+      </if>
+      <if test="phone != null" >
+        phone = #{phone,jdbcType=VARCHAR},
+      </if>
+      <if test="number != null" >
+        number = #{number,jdbcType=VARCHAR},
+      </if>
+      <if test="validstarttime != null" >
+        validstarttime = #{validstarttime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="validendtime != null" >
+        validendtime = #{validendtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="belongid != null" >
+        belongid = #{belongid,jdbcType=BIGINT},
+      </if>
+      <if test="belongname != null" >
+        belongname = #{belongname,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.EnterpriseStaff" >
+    <!--          -->
+    update enterprisestaff
+    set type = #{type,jdbcType=VARCHAR},
+      name = #{name,jdbcType=VARCHAR},
+      post = #{post,jdbcType=VARCHAR},
+      identify = #{identify,jdbcType=VARCHAR},
+      phone = #{phone,jdbcType=VARCHAR},
+      number = #{number,jdbcType=VARCHAR},
+      validstarttime = #{validstarttime,jdbcType=TIMESTAMP},
+      validendtime = #{validendtime,jdbcType=TIMESTAMP},
+      belongid = #{belongid,jdbcType=BIGINT},
+      belongname = #{belongname,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseStandardizationMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseStandardizationMapper.xml
new file mode 100644
index 0000000..6f223e2
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseStandardizationMapper.xml
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.EnterpriseStandardizationMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.EnterpriseStandardization" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="level" property="level" jdbcType="VARCHAR" />
+    <result column="licensenumber" property="licensenumber" jdbcType="VARCHAR" />
+    <result column="reviewunit" property="reviewunit" jdbcType="VARCHAR" />
+    <result column="licensingunit" property="licensingunit" jdbcType="VARCHAR" />
+    <result column="score" property="score" jdbcType="DECIMAL" />
+    <result column="validstarttime" property="validstarttime" jdbcType="TIMESTAMP" />
+    <result column="validendtime" property="validendtime" jdbcType="TIMESTAMP" />
+    <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
+    <result column="createby" property="createby" jdbcType="BIGINT" />
+    <result column="createbyname" property="createbyname" jdbcType="VARCHAR" />
+    <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+    <result column="updateby" property="updateby" jdbcType="BIGINT" />
+    <result column="updatebyname" property="updatebyname" jdbcType="VARCHAR" />
+    <result column="enterpriseid" property="enterpriseid" jdbcType="BIGINT" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+    <collection property="enterpriseResources"
+                javaType="java.util.List"
+                ofType="com.gk.firework.Domain.EnterpriseResource"
+                column="{esid=id,tabletype=tabletype}"
+                select="selectInner">
+    </collection>
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, level, licensenumber, reviewunit, licensingunit, score, validstarttime, validendtime,
+    createtime, createby, createbyname, updatetime, updateby, updatebyname, enterpriseid,
+    validflag
+  </sql>
+    <select id="selectPages" resultMap="BaseResultMap">
+        select es.*,
+        #{params.tabletype} tabletype
+        from enterprisestandardization es
+        where es.validflag = 1
+        and es.enterpriseid = #{params.id}
+        order by es.createtime desc
+    </select>
+
+  <select id="selectInner" parameterType = "java.util.Map" resultType="com.gk.firework.Domain.EnterpriseResource">
+      select  er.id id, er.url,er.filename,er.tabletype
+      from enterpriseresource er
+      where  er.validflag = 1
+      and er.tabletype= #{tabletype}
+      and belongid = #{esid}
+    </select>
+
+    <select id="selectStandardization"  resultMap="BaseResultMap">
+        select es.*,
+        #{tabletype} tabletype
+        from enterprisestandardization es
+        where es.validflag = 1
+        and es.enterpriseid = #{id}
+        order by es.createtime desc
+    </select>
+
+
+    <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.EnterpriseStandardization" >
+    <!--          -->
+    update enterprisestandardization
+    <set >
+      <if test="level != null" >
+        level = #{level,jdbcType=VARCHAR},
+      </if>
+      <if test="licensenumber != null" >
+        licensenumber = #{licensenumber,jdbcType=VARCHAR},
+      </if>
+      <if test="reviewunit != null" >
+        reviewunit = #{reviewunit,jdbcType=VARCHAR},
+      </if>
+      <if test="licensingunit != null" >
+        licensingunit = #{licensingunit,jdbcType=VARCHAR},
+      </if>
+      <if test="score != null" >
+        score = #{score,jdbcType=INTEGER},
+      </if>
+      <if test="validstarttime != null" >
+        validstarttime = #{validstarttime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="validendtime != null" >
+        validendtime = #{validendtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createtime != null" >
+        createtime = #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        createby = #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        createbyname = #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        updateby = #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        validflag = #{validflag,jdbcType=BIT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseWarehouseMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseWarehouseMapper.xml
new file mode 100644
index 0000000..3551e5b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/EnterpriseWarehouseMapper.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gk.firework.Mapper.EnterpriseWarehouseMapper">
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.EnterpriseWarehouse">
+    <!--          -->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="bulidingnumber" jdbcType="INTEGER" property="bulidingnumber" />
+    <result column="dangerlevel" jdbcType="VARCHAR" property="dangerlevel" />
+    <result column="area" jdbcType="INTEGER" property="area" />
+    <result column="limits" jdbcType="INTEGER" property="limits" />
+    <result column="safetyperson" jdbcType="VARCHAR" property="safetyperson" />
+    <result column="enterpriseid" jdbcType="BIGINT" property="enterpriseid" />
+    <result column="createtime" jdbcType="TIMESTAMP" property="createtime" />
+    <result column="createby" jdbcType="BIGINT" property="createby" />
+    <result column="createbyname" jdbcType="VARCHAR" property="createbyname" />
+    <result column="updatetime" jdbcType="TIMESTAMP" property="updatetime" />
+    <result column="updateby" jdbcType="BIGINT" property="updateby" />
+    <result column="holdinventory" jdbcType="INTEGER" property="holdinventory" />
+    <result column="updatebyname" jdbcType="VARCHAR" property="updatebyname" />
+    <result column="validflag" jdbcType="BIT" property="validflag" />
+      <collection property="enterpriseResources"
+                  javaType="java.util.List"
+                  ofType="com.gk.firework.Domain.EnterpriseResource"
+                  column="{ewid=id,tabletype=tabletype}"
+                  select="selectInner">
+      </collection>
+  </resultMap>
+    <select id="selectPages" resultMap="BaseResultMap">
+         select ew.*,
+         #{params.tabletype} tabletype
+        from enterprisewarehouse ew
+        where ew.validflag = 1
+        and ew.enterpriseid = #{params.id}
+        order by ew.createtime desc
+    </select>
+
+  <select id="selectInner" parameterType = "java.util.Map" resultType="com.gk.firework.Domain.EnterpriseResource">
+      select  er.id id, er.url,er.filename,er.tabletype
+      from enterpriseresource er
+      where  er.validflag = 1
+      and er.tabletype= #{tabletype}
+      and belongid = #{ewid}
+    </select>
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/EntryDetailInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/EntryDetailInfoMapper.xml
new file mode 100644
index 0000000..ac8639c
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/EntryDetailInfoMapper.xml
@@ -0,0 +1,354 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.EntryDetailInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.EntryDetailInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="entryorder" property="entryorder" jdbcType="VARCHAR" />
+    <result column="directioncode" property="directioncode" jdbcType="VARCHAR" />
+    <result column="itemcode" property="itemcode" jdbcType="VARCHAR" />
+    <result column="productname" property="productname" jdbcType="VARCHAR" />
+    <result column="boxcode" property="boxcode" jdbcType="VARCHAR" />
+    <result column="num" property="num" jdbcType="INTEGER" />
+    <result column="manufacturer" property="manufacturer" jdbcType="VARCHAR" />
+    <result column="createddate" property="createddate" jdbcType="TIMESTAMP" />
+    <result column="modifieddate" property="modifieddate" jdbcType="TIMESTAMP" />
+    <result column="createdby" property="createdby" jdbcType="VARCHAR" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, entryorder, directioncode, productname, num, boxcode, manufacturer, createddate, modifieddate, createdby
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select
+    <include refid="Base_Column_List" />
+    from entrydetail
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+    <select id="selectDetailPage" resultType="java.util.Map">
+      select
+      ed.id,
+      ed.directioncode,
+      ed.itemcode,
+      ed.productname,
+      case length(ed.directioncode)  when 19 then  concat(ed.num,"挂") else concat(ed.num,"挂/箱") end num,
+      product.type,
+      product.level,
+      product.explosivecontent,
+      product.specification,
+      product.boxnumber
+      from entrydetail as ed
+      left join product as product on product.directioncode = ed.itemcode and product.isdel = 0
+      where ed.entryorder = #{params.code}
+      <if test="params.starttime != null and params.starttime != ''">
+        and ed.createddate &gt;= #{params.starttime}
+      </if>
+      <if test="params.endtime != null and params.endtime != ''">
+        and ed.createddate &lt;= #{params.endtime}
+      </if>
+      order by ed.createddate
+    </select>
+
+  <select id="getEntryNumByCondition" resultType="decimal">
+    select
+    sum(detail.num/product.boxnumber)
+    from entrydetail as detail
+    left join entryorder as entry on entry.`code` = detail.entryorder
+    left join product on detail.itemcode = product.directioncode
+    <where>
+      entry.type = 1
+      and product.isdel = 0
+      and entry.entrydate &gt;= #{condition.beginDate}
+      and entry.entrydate &lt;= #{condition.endDate}
+      and entry.companynumber = #{condition.companyNumber}
+      <if test="condition.itemCode != null">
+        and product.directioncode = #{condition.itemCode}
+      </if>
+    </where>
+  </select>
+  <select id="getReturnNumByCondition" resultType="decimal">
+    select
+    sum(detail.num/product.boxnumber)
+    from entrydetail as detail
+    left join entryorder as entry on entry.`code` = detail.entryorder
+    left join product on detail.itemcode = product.directioncode
+    <where>
+      entry.type = 2
+      and product.isdel = 0
+      and entry.entrydate &gt;= #{condition.beginDate}
+      and entry.entrydate &lt;= #{condition.endDate}
+      and entry.companynumber = #{condition.companyNumber}
+      <if test="condition.itemCode != null">
+        and product.directioncode = #{condition.itemCode}
+      </if>
+    </where>
+  </select>
+  <select id="selectDetailExport" resultType="java.util.Map">
+    select
+      entryorder.code,
+      entryorder.unit,
+      entryorder.transportcert,
+      ed.id,
+      ed.directioncode,
+      ed.itemcode,
+      ed.productname,
+      case length(ed.directioncode)  when 19 then  concat(ed.num,"件") else concat(ed.num,"件/箱") end num,
+      product.type,
+      product.level,
+      product.explosivecontent,
+      product.specification
+      from entrydetail as ed
+      left join entryorder as entryorder on entryorder.code = ed.entryorder
+      left join product as product on product.directioncode = ed.itemcode
+      where ed.entryorder = #{code}
+      and product.isdel = 0
+      order by ed.createddate
+  </select>
+    <select id="selectEnterpriseTypeEntry" resultType="java.util.Map">
+
+        select
+        alldata.*,
+        round(
+        <trim suffixOverrides="+">
+            <foreach collection="list" item="item" index="index">
+                alldata.num_${item} +
+            </foreach>
+        </trim>
+        ,2) totalcol
+
+        from (
+
+        select
+        tmptmptmp.city name,
+        tmptmptmp.enterprisename
+        <foreach collection="list" item="item" index="index">
+            ,MAX(
+            CASE tmptmptmp.type
+            WHEN #{item} THEN
+            round(tmptmptmp.num,2)
+            ELSE
+            0
+            END
+            ) num_${item}
+        </foreach>
+
+        from (
+
+        select
+        tmptmp.city,tmptmp.enterprisename,tmptmp.type,sum(tmptmp.num) num
+        from
+        (
+        SELECT
+        e.city,e.enterprisename,eo.companynumber,p.type,sum(ed.num) /p.
+        boxnumber num
+        FROM
+        entrydetail AS ed
+        LEFT JOIN
+        entryorder AS eo ON eo.`code` = ed.entryorder
+        LEFT JOIN product AS p ON p.directioncode = ed.itemcode
+        LEFT JOIN
+        enterprise AS e ON eo.companynumber = e.enterprisenumber
+        where
+        e.
+        enterprisestatus = 'ON'
+        and p.isdel = 0
+        and e.validflag = 1
+        <if test="params.starttime != null and params.starttime != ''">
+            and eo.createddate &gt;= #{params.starttime}
+        </if>
+        <if test="params.endtime != null and params.endtime != ''">
+            and eo.createddate &lt; #{params.endtime}
+        </if>
+        <if test="params.safetysupervision != null and params.safetysupervision != ''">
+            and e.safetysupervision = #{params.safetysupervision }
+        </if>
+        <if test="params.enterprisename != null and params.enterprisename != ''">
+            and e.enterprisename like concat("%",#{params.enterprisename },"%")
+        </if>
+        <if test="params.province != null and params.province != ''">
+            and e.province = #{params.province }
+        </if>
+        <if test="params.city != null and params.city != ''">
+            and e.city = #{params.city }
+        </if>
+        <if test="params.district != null and params.district != ''">
+            and e.district = #{params.district }
+        </if>
+        GROUP BY
+        eo.companynumber,ed.itemcode
+
+        ) as tmptmp
+        group by tmptmp.companynumber,tmptmp.type
+
+
+
+        ) as tmptmptmp
+        group by tmptmptmp.enterprisename)
+
+        as alldata
+
+
+
+    </select>
+  <select id="selectAllType" resultType="java.util.Map">
+          select
+          lasttmp.*
+          ,
+          round(
+          <trim suffixOverrides="+">
+              <foreach collection="list" item="item" index="index">
+                  ifnull(lasttmp.num_${item},0) +
+              </foreach>
+          </trim>
+          ,2) totalcol
+          from (
+          select
+          '合计' name
+          <foreach collection="list" item="item" index="index">
+              ,MAX(
+              CASE tmptmptmp.type
+              WHEN #{item} THEN
+              round(tmptmptmp.num,2)
+              ELSE
+              0
+              END
+              ) num_${item}
+          </foreach>
+          from (
+
+
+          select
+          tmptmp.type,sum(tmptmp.num) num
+          from
+          (
+          SELECT
+          e.city,eo.companynumber,p.type,sum(ed.num) /p.
+          boxnumber num
+          FROM
+          entrydetail AS ed
+          LEFT JOIN
+          entryorder AS eo ON eo.`code` = ed.entryorder
+          LEFT JOIN product AS p ON p.directioncode = ed.itemcode
+          LEFT JOIN
+          enterprise AS e ON eo.companynumber = e.enterprisenumber
+          where
+          e.
+          enterprisestatus = 'ON'
+          and p.isdel = 0
+          and e.validflag = 1
+          <if test="params.starttime != null and params.starttime != ''">
+              and eo.createddate &gt;= #{params.starttime}
+          </if>
+          <if test="params.endtime != null and params.endtime != ''">
+              and eo.createddate &lt; #{params.endtime}
+          </if>
+          <if test="params.safetysupervision != null and params.safetysupervision != ''">
+              and e.safetysupervision = #{params.safetysupervision }
+          </if>
+          <if test="params.enterprisename != null and params.enterprisename != ''">
+              and e.enterprisename like concat("%",#{params.enterprisename },"%")
+          </if>
+      <if test="params.province != null and params.province != ''">
+          and e.province = #{params.province }
+      </if>
+      <if test="params.city != null and params.city != ''">
+          and e.city = #{params.city }
+      </if>
+      <if test="params.district != null and params.district != ''">
+          and e.district = #{params.district }
+      </if>
+          GROUP BY
+        eo.companynumber,ed.itemcode
+
+          ) as tmptmp
+          group by tmptmp.type
+
+
+          ) as tmptmptmp
+          ) as lasttmp
+
+  </select>
+    <select id="selectCityTypeEntry" resultType="java.util.Map">
+        select
+        citys.name
+        <foreach collection="list" item="item" index="index">
+            ,round(ifnull(num_${item},0),2) num_${item}
+        </foreach>,
+        ifnull(round(
+        <trim suffixOverrides="+">
+            <foreach collection="list" item="item" index="index">
+                alldata.num_${item} +
+            </foreach>
+        </trim>
+        ,2),0) totalcol
+        from (
+        select district.name
+        from district
+        where parentcode =(
+        select district.code
+        from district as district
+        where district.name = #{params.province}
+        and type = 1)
+        and type =2
+        ) as citys
+
+        left join (
+        select
+        tmptmptmp.city
+        <foreach collection="list" item="item" index="index">
+            ,MAX(
+            CASE tmptmptmp.type
+            WHEN #{item} THEN
+            tmptmptmp.num
+            ELSE
+            0
+            END
+            ) num_${item}
+        </foreach>
+
+        from (
+
+        select
+        tmptmp.city,tmptmp.type,sum(tmptmp.num) num
+        from
+        (
+        SELECT
+        e.city,eo.companynumber,p.type,sum(ed.num) /p.
+        boxnumber num
+        FROM
+        entrydetail AS ed
+        LEFT JOIN
+        entryorder AS eo ON eo.`code` = ed.entryorder
+        LEFT JOIN product AS p ON p.directioncode = ed.itemcode
+        LEFT JOIN
+        enterprise AS e ON eo.companynumber = e.enterprisenumber
+        where
+        e.
+        enterprisestatus = 'ON'
+        and p.isdel = 0
+        and e.validflag = 1
+        <if test="params.starttime != null and params.starttime != ''">
+            and eo.createddate &gt;= #{params.starttime}
+        </if>
+        <if test="params.endtime != null and params.endtime != ''">
+            and eo.createddate &lt; #{params.endtime}
+        </if>
+        <if test="params.safetysupervision != null and params.safetysupervision != ''">
+            and e.safetysupervision = #{params.safetysupervision }
+        </if>
+        <if test="params.enterprisename != null and params.enterprisename != ''">
+            and e.enterprisename like concat("%",#{params.enterprisename },"%")
+        </if>
+        GROUP BY
+        eo.companynumber,ed.itemcode
+
+        ) as tmptmp
+        group by tmptmp.city,tmptmp.type
+        ) as tmptmptmp
+        group by tmptmptmp.city
+        ) as alldata
+        on citys.name = alldata.city
+
+    </select>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/EntryOrderInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/EntryOrderInfoMapper.xml
new file mode 100644
index 0000000..2ef07f7
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/EntryOrderInfoMapper.xml
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.EntryOrderInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.EntryOrderInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="code" property="code" jdbcType="VARCHAR" />
+    <result column="createdby" property="createdby" jdbcType="VARCHAR" />
+    <result column="createddate" property="createddate" jdbcType="TIMESTAMP" />
+    <result column="modifiedby" property="modifiedby" jdbcType="VARCHAR" />
+    <result column="modifieddate" property="modifieddate" jdbcType="TIMESTAMP" />
+    <result column="entrydate" property="entrydate" jdbcType="TIMESTAMP" />
+    <result column="num" property="num" jdbcType="INTEGER" />
+    <result column="transportcert" property="transportcert" jdbcType="VARCHAR" />
+    <result column="unit" property="unit" jdbcType="VARCHAR" />
+    <result column="companynumber" property="companynumber" jdbcType="VARCHAR" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, code, createdby, createddate, modifiedby, modifieddate, entrydate, num, transportcert,
+    unit, companynumber
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select
+    <include refid="Base_Column_List" />
+    from entryorder
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+    <select id="selectPages" resultType="com.gk.firework.Domain.Vo.EntryOrderInfoVo">
+      select
+      eo.id,
+      eo.code,
+      eo.createdby,
+      eo.createddate,
+      eo.entrydate,
+      round(sum(eo.num),2) boxnum,
+      eo.transportcert,
+      eo.unit,
+      eo.companynumber,
+      eo.type
+      from
+      (
+          select
+          eo.id,
+          eo.code,
+          eo.createdby,
+          eo.createddate,
+          eo.entrydate,
+          sum(ed.num)/p.boxnumber num,
+          eo.transportcert,
+          eo.unit,
+          eo.companynumber,
+          eo.type
+          from entryorder as eo
+          left join entrydetail as ed on ed.entryorder = eo.code
+          left join product as p on p.directioncode = ed.itemcode and p.isdel = 0
+          <where>
+            <if test="params.starttime != null and params.starttime != ''">
+              and  eo.entrydate &gt;= #{params.starttime}
+            </if>
+            <if test="params.endtime != null and params.endtime != ''">
+              and eo.entrydate &lt; #{params.endtime}
+            </if>
+            <if test="params.transportcert != null and params.transportcert != ''">
+              and eo.transportcert like concat("%",#{params.transportcert},"%")
+            </if>
+            <if test="params.type != null and params.type  != ''">
+              and eo.type = #{params.type}
+            </if>
+            <if test="params.code != null and params.code  != ''">
+              and eo.code  like concat("%",#{params.code},"%")
+            </if>
+          </where>
+          group by  eo.code,ed.itemcode
+      ) as eo
+      left join enterprise as e on e.enterprisenumber = eo.companynumber
+      <where>
+        e.validflag = 1
+        and e.enterprisestatus = 'ON'
+        <choose>
+          <when test="params.enterprisenumber != null and params.enterprisenumber != ''">
+            and eo.companynumber = #{params.enterprisenumber}
+          </when>
+          <otherwise>
+            <if test="params.province != null and params.province != ''">
+              and e.province = #{params.province}
+            </if>
+            <if test="params.city != null and params.city != ''">
+              and e.city = #{params.city}
+            </if>
+            <if test="params.district != null and params.district != ''">
+              and e.district = #{params.district}
+            </if>
+            <if test="params.street != null and params.street != ''">
+              and e.street = #{params.street}
+            </if>
+            <if test="params.committee != null and params.committee != ''">
+              and e.committee = #{params.committee}
+            </if>
+          </otherwise>
+        </choose>
+        <if test="params.filterProvince != null and params.filterProvince  != ''">
+          and e.province = #{params.filterProvince}
+        </if>
+        <if test="params.filterCity != null and  params.filterCity  != ''">
+          and e.city = #{params.filterCity}
+        </if>
+        <if test="params.filterDistrict != null and params.filterDistrict  != ''">
+          and e.district = #{params.filterDistrict}
+        </if>
+        <if test="params.filterStreet != null and params.filterStreet  != ''">
+          and e.street = #{params.filterStreet}
+        </if>
+        <if test="params.filterCommittee != null and params.filterCommittee  != ''">
+          and e.committee = #{params.filterCommittee}
+        </if>
+        <if test="params.enterprisename != null and params.enterprisename != ''">
+          and e.enterprisename like concat("%",#{params.enterprisename},"%")
+        </if>
+        <if test="params.safetysupervision != null and params.safetysupervision != ''">
+          and e.safetysupervision = #{params.safetysupervision}
+        </if>
+
+      </where>
+      group by eo.code
+      order by eo.entrydate desc
+    </select>
+
+  <select id="selectEntryOrderByTimeAndUser" resultMap="BaseResultMap">
+    select
+    <include refid="Base_Column_List"/>
+    from entryorder
+    <where>
+      entrydate = #{datetime}
+      and createdby = #{createdby}
+    </where>
+    limit 1
+  </select>
+
+  <select id="selectEnterpriseEntryNumber" resultType="decimal">
+    SELECT
+    IFNULL(SUM( entrynum ),0)
+    FROM
+    (
+    SELECT
+    SUM( ed.num )/ p.boxnumber AS entrynum
+    FROM
+    entrydetail AS ed
+    LEFT JOIN entryorder AS eo ON eo.`code` = ed.entryorder
+    LEFT JOIN product AS p ON p.directioncode = ed.itemcode and p.isdel = 0
+    <where>
+      eo.companynumber = #{companyNumber}
+      <if test="starttime != null and starttime != ''">
+        and eo.entrydate &gt;= #{starttime}
+      </if>
+      <if test="endtime != null and endtime != ''">
+        and eo.entrydate &lt;= #{endtime}
+      </if>
+    </where>
+    GROUP BY
+    ed.itemcode
+    ) temp
+  </select>
+  <select id="selectCityEntryNumber" resultType="decimal">
+    SELECT
+    IFNULL(SUM( entrynum ),0)
+    FROM
+    (
+    SELECT
+    SUM( ed.num )/ p.boxnumber AS entrynum
+    FROM
+    entrydetail AS ed
+    LEFT JOIN entryorder AS eo ON eo.`code` = ed.entryorder
+    LEFT JOIN product AS p ON p.directioncode = ed.itemcode and p.isdel = 0
+    LEFT JOIN enterprise AS e ON eo.companynumber = e.enterprisenumber
+    <where>
+      e.city = #{city}
+      and e.enterprisestatus = 'ON'
+      and e.validflag = 1
+      <if test="starttime != null and starttime != ''">
+        and eo.entrydate &gt;= #{starttime}
+      </if>
+      <if test="endtime != null and endtime != ''">
+        and eo.entrydate &lt;= #{endtime}
+      </if>
+    </where>
+    GROUP BY
+    ed.itemcode
+    ) temp
+  </select>
+  <select id="selectByCert" resultMap="BaseResultMap">
+    select
+    <include refid="Base_Column_List"/>
+    from entryorder as eo
+    <where>
+      transportcert = #{code}
+    </where>
+  </select>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/HelpDocInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/HelpDocInfoMapper.xml
new file mode 100644
index 0000000..c34017a
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/HelpDocInfoMapper.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.HelpDocInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.HelpDocInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="filetype" property="filetype" jdbcType="VARCHAR" />
+    <result column="filename" property="filename" jdbcType="VARCHAR" />
+    <result column="fileurl" property="fileurl" jdbcType="VARCHAR" />
+    <result column="version" property="version" jdbcType="INTEGER" />
+    <result column="remark" property="remark" jdbcType="VARCHAR" />
+    <result column="createdby" property="createdby" jdbcType="VARCHAR" />
+    <result column="created" property="created" jdbcType="TIMESTAMP" />
+    <result column="updated" property="updated" jdbcType="TIMESTAMP" />
+    <result column="isdel" property="isdel" jdbcType="TINYINT" />
+    <result column="flag" property="flag" jdbcType="TINYINT" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, filetype, filename, fileurl, version, remark, createdby, created, updated, isdel, 
+    flag
+  </sql>
+
+  <select id="selectDataGrid" resultType="com.gk.firework.Domain.HelpDocInfo">
+    select
+    <include refid="Base_Column_List" />
+    from helpdoc
+    <where>
+      1=1
+      and isdel = 0
+      <if test="condition.name != null and condition.name !=''">
+        and filename like concat('%',#{condition.name},'%')
+      </if>
+    </where>
+  </select>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/HiddenDangerCheckContentMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/HiddenDangerCheckContentMapper.xml
new file mode 100644
index 0000000..2483100
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/HiddenDangerCheckContentMapper.xml
@@ -0,0 +1,256 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.HiddenDangerCheckContentMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.HiddenDangerCheckContent" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="checkcontent" property="checkcontent" jdbcType="VARCHAR" />
+    <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
+    <result column="createby" property="createby" jdbcType="VARCHAR" />
+    <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+    <result column="updateby" property="updateby" jdbcType="VARCHAR" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+    <result column="belongid" property="belongid" jdbcType="BIGINT" />
+    <result column="belongname" property="belongname" jdbcType="VARCHAR" />
+    <collection property="criteriaList"
+                ofType="com.gk.firework.Domain.HiddenDangerCheckCriteria" select="get-criteria"
+                column="id">
+
+    </collection>
+  </resultMap>
+
+  <resultMap id="criteria" type="com.gk.firework.Domain.HiddenDangerCheckCriteria" >
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="checkcriteria" property="checkcriteria" jdbcType="VARCHAR" />
+    <result column="basis" property="basis" jdbcType="VARCHAR" />
+    <result column="belongid" property="belongid" jdbcType="VARCHAR" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+    <collection property="typeList"
+                ofType="com.gk.firework.Domain.HiddenDangerCheckType" select="get-type"
+                column="id">
+
+    </collection>
+  </resultMap>
+
+  <resultMap id="type" type="com.gk.firework.Domain.HiddenDangerCheckType" >
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="checktype" property="checktype" jdbcType="VARCHAR" />
+    <result column="belongid" property="belongid" jdbcType="VARCHAR" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+    <collection property="checkResultList"
+                ofType="com.gk.firework.Domain.HiddenDangerCheckResult" select="get-result"
+                column="id">
+    </collection>
+  </resultMap>
+
+
+  <select id="get-criteria"  resultMap="criteria">
+    select
+    id ,
+    checkcriteria,
+    basis,
+    belongid
+    from hiddendangercheckcriteria
+    where belongid = #{id}
+    and validflag = 1
+  </select>
+
+  <select id="get-type"  resultMap="type">
+    select
+    id ,
+    checktype,
+    belongid
+    from hiddendangerchecktype
+    where belongid = #{id}
+    and validflag = 1
+  </select>
+
+  <select id="get-result"  resultType="com.gk.firework.Domain.HiddenDangerCheckResult">
+    select
+    id ,
+    checkresult,
+    isqualified,
+    belongid
+    from hiddendangercheckresult
+    where belongid = #{id}
+    and validflag = 1
+  </select>
+
+  <select id="selectContent" parameterType="java.util.Map" resultMap="BaseResultMap">
+    select
+    id,
+    checkcontent,
+    belongid
+    from hiddendangercheckcontent
+    where belongid= #{menu}
+    and validflag = 1
+  </select>
+
+  <select id="selectRow" parameterType="java.util.Map" resultType="com.gk.firework.Domain.Vo.HiddenDangerTableRow">
+    select
+    hdcct.checkcontent checkcontent,
+    hdcct.belongid parentmenuid,
+    hdcca.checkcriteria ,
+    hdct.id  checktypeid,
+    hdct.checktype ,
+    hdcca.basis ,
+    hdcr1.checkresult checkresult1,
+    hdcr2.checkresult checkresult0,
+    hdcr1.id result1,
+    hdcr2.id result0
+    from hiddendangercheckcontent hdcct
+    left join hiddendangercheckcriteria hdcca on hdcca.belongid = hdcct.id and hdcct.validflag = 1
+    left join hiddendangerchecktype hdct on  hdct.belongid = hdcca.id and hdcca.validflag = 1
+    left join hiddendangercheckresult hdcr1 on hdcr1.belongid =  hdct.id and hdcr1.isqualified = 1 and hdcr1.validflag = 1
+    left join hiddendangercheckresult hdcr2 on hdcr2.belongid =  hdct.id and hdcr2.isqualified = 0 and hdcr2.validflag = 1
+    <if test="level == 1 " >
+    left join  hiddendangermenu hdm on hdm.id = hdcct.belongid
+    </if>
+    where hdcct.validflag = 1
+    <if test="level != null and level != '' and menu != null and menu != ''">
+      <if test="level == 2 ">
+        and hdcct.belongid = #{menu}
+      </if>
+      <if test="level == 1">
+        and hdm.parentid = #{menu}
+      </if>
+    </if>
+
+  </select>
+
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, checkcontent, createtime, createby, updatetime, updateby, validflag, belongid, 
+    belongname
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select 
+    <include refid="Base_Column_List" />
+    from hiddendangercheckcontent
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+
+    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from hiddendangercheckcontent
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.gk.firework.Domain.HiddenDangerCheckContent" >
+    <!--          -->
+    insert into hiddendangercheckcontent (id, checkcontent, createtime, 
+      createby, updatetime, updateby, 
+      validflag, belongid, belongname
+      )
+    values (#{id,jdbcType=BIGINT}, #{checkcontent,jdbcType=VARCHAR}, #{createtime,jdbcType=TIMESTAMP}, 
+      #{createby,jdbcType=VARCHAR}, #{updatetime,jdbcType=TIMESTAMP}, #{updateby,jdbcType=VARCHAR}, 
+      #{validflag,jdbcType=BIT}, #{belongid,jdbcType=BIGINT}, #{belongname,jdbcType=VARCHAR}
+      )
+  </insert>
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.HiddenDangerCheckContent" >
+    <!--          -->
+    insert into hiddendangercheckcontent
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="checkcontent != null" >
+        checkcontent,
+      </if>
+      <if test="createtime != null" >
+        createtime,
+      </if>
+      <if test="createby != null" >
+        createby,
+      </if>
+      <if test="updatetime != null" >
+        updatetime,
+      </if>
+      <if test="updateby != null" >
+        updateby,
+      </if>
+      <if test="validflag != null" >
+        validflag,
+      </if>
+      <if test="belongid != null" >
+        belongid,
+      </if>
+      <if test="belongname != null" >
+        belongname,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="checkcontent != null" >
+        #{checkcontent,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        #{createby,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        #{updateby,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        #{validflag,jdbcType=BIT},
+      </if>
+      <if test="belongid != null" >
+        #{belongid,jdbcType=BIGINT},
+      </if>
+      <if test="belongname != null" >
+        #{belongname,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.HiddenDangerCheckContent" >
+    <!--          -->
+    update hiddendangercheckcontent
+    <set >
+      <if test="checkcontent != null" >
+        checkcontent = #{checkcontent,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        createtime = #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        createby = #{createby,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        updateby = #{updateby,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        validflag = #{validflag,jdbcType=BIT},
+      </if>
+      <if test="belongid != null" >
+        belongid = #{belongid,jdbcType=BIGINT},
+      </if>
+      <if test="belongname != null" >
+        belongname = #{belongname,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.HiddenDangerCheckContent" >
+    <!--          -->
+    update hiddendangercheckcontent
+    set checkcontent = #{checkcontent,jdbcType=VARCHAR},
+      createtime = #{createtime,jdbcType=TIMESTAMP},
+      createby = #{createby,jdbcType=VARCHAR},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      updateby = #{updateby,jdbcType=VARCHAR},
+      validflag = #{validflag,jdbcType=BIT},
+      belongid = #{belongid,jdbcType=BIGINT},
+      belongname = #{belongname,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/HiddenDangerCheckCriteriaMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/HiddenDangerCheckCriteriaMapper.xml
new file mode 100644
index 0000000..f05fd9b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/HiddenDangerCheckCriteriaMapper.xml
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.HiddenDangerCheckCriteriaMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.HiddenDangerCheckCriteria" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="checkcriteria" property="checkcriteria" jdbcType="VARCHAR" />
+    <result column="basis" property="basis" jdbcType="VARCHAR" />
+    <result column="belongid" property="belongid" jdbcType="VARCHAR" />
+    <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
+    <result column="createby" property="createby" jdbcType="VARCHAR" />
+    <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+    <result column="updateby" property="updateby" jdbcType="VARCHAR" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, checkcriteria, basis, belongid, createtime, createby, updatetime, updateby, validflag
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select 
+    <include refid="Base_Column_List" />
+    from hiddendangercheckcriteria
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from hiddendangercheckcriteria
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.gk.firework.Domain.HiddenDangerCheckCriteria" >
+    <!--          -->
+    insert into hiddendangercheckcriteria (id, checkcriteria, basis, 
+      belongid, createtime, createby, 
+      updatetime, updateby, validflag
+      )
+    values (#{id,jdbcType=BIGINT}, #{checkcriteria,jdbcType=VARCHAR}, #{basis,jdbcType=VARCHAR}, 
+      #{belongid,jdbcType=VARCHAR}, #{createtime,jdbcType=TIMESTAMP}, #{createby,jdbcType=VARCHAR}, 
+      #{updatetime,jdbcType=TIMESTAMP}, #{updateby,jdbcType=VARCHAR}, #{validflag,jdbcType=BIT}
+      )
+  </insert>
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.HiddenDangerCheckCriteria" >
+    <!--          -->
+    insert into hiddendangercheckcriteria
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="checkcriteria != null" >
+        checkcriteria,
+      </if>
+      <if test="basis != null" >
+        basis,
+      </if>
+      <if test="belongid != null" >
+        belongid,
+      </if>
+      <if test="createtime != null" >
+        createtime,
+      </if>
+      <if test="createby != null" >
+        createby,
+      </if>
+      <if test="updatetime != null" >
+        updatetime,
+      </if>
+      <if test="updateby != null" >
+        updateby,
+      </if>
+      <if test="validflag != null" >
+        validflag,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="checkcriteria != null" >
+        #{checkcriteria,jdbcType=VARCHAR},
+      </if>
+      <if test="basis != null" >
+        #{basis,jdbcType=VARCHAR},
+      </if>
+      <if test="belongid != null" >
+        #{belongid,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        #{createby,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        #{updateby,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        #{validflag,jdbcType=BIT},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.HiddenDangerCheckCriteria" >
+    <!--          -->
+    update hiddendangercheckcriteria
+    <set >
+      <if test="checkcriteria != null" >
+        checkcriteria = #{checkcriteria,jdbcType=VARCHAR},
+      </if>
+      <if test="basis != null" >
+        basis = #{basis,jdbcType=VARCHAR},
+      </if>
+      <if test="belongid != null" >
+        belongid = #{belongid,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        createtime = #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        createby = #{createby,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        updateby = #{updateby,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        validflag = #{validflag,jdbcType=BIT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.HiddenDangerCheckCriteria" >
+    <!--          -->
+    update hiddendangercheckcriteria
+    set checkcriteria = #{checkcriteria,jdbcType=VARCHAR},
+      basis = #{basis,jdbcType=VARCHAR},
+      belongid = #{belongid,jdbcType=VARCHAR},
+      createtime = #{createtime,jdbcType=TIMESTAMP},
+      createby = #{createby,jdbcType=VARCHAR},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      updateby = #{updateby,jdbcType=VARCHAR},
+      validflag = #{validflag,jdbcType=BIT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/HiddenDangerCheckResultMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/HiddenDangerCheckResultMapper.xml
new file mode 100644
index 0000000..dcd4b49
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/HiddenDangerCheckResultMapper.xml
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.HiddenDangerCheckResultMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.HiddenDangerCheckResult" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="checkresult" property="checkresult" jdbcType="VARCHAR" />
+    <result column="isqualified" property="isqualified" jdbcType="BIT" />
+    <result column="belongid" property="belongid" jdbcType="BIGINT" />
+    <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
+    <result column="createby" property="createby" jdbcType="VARCHAR" />
+    <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+    <result column="updateby" property="updateby" jdbcType="VARCHAR" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, checkresult, isqualified, belongid, createtime, createby, updatetime, updateby, 
+    validflag
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select 
+    <include refid="Base_Column_List" />
+    from hiddendangercheckresult
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from hiddendangercheckresult
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.gk.firework.Domain.HiddenDangerCheckResult" >
+    <!--          -->
+    insert into hiddendangercheckresult (id, checkresult, isqualified, 
+      belongid, createtime, createby, 
+      updatetime, updateby, validflag
+      )
+    values (#{id,jdbcType=BIGINT}, #{checkresult,jdbcType=VARCHAR}, #{isqualified,jdbcType=BIT}, 
+      #{belongid,jdbcType=BIGINT}, #{createtime,jdbcType=TIMESTAMP}, #{createby,jdbcType=VARCHAR}, 
+      #{updatetime,jdbcType=TIMESTAMP}, #{updateby,jdbcType=VARCHAR}, #{validflag,jdbcType=BIT}
+      )
+  </insert>
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.HiddenDangerCheckResult" >
+    <!--          -->
+    insert into hiddendangercheckresult
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="checkresult != null" >
+        checkresult,
+      </if>
+      <if test="isqualified != null" >
+        isqualified,
+      </if>
+      <if test="belongid != null" >
+        belongid,
+      </if>
+      <if test="createtime != null" >
+        createtime,
+      </if>
+      <if test="createby != null" >
+        createby,
+      </if>
+      <if test="updatetime != null" >
+        updatetime,
+      </if>
+      <if test="updateby != null" >
+        updateby,
+      </if>
+      <if test="validflag != null" >
+        validflag,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="checkresult != null" >
+        #{checkresult,jdbcType=VARCHAR},
+      </if>
+      <if test="isqualified != null" >
+        #{isqualified,jdbcType=BIT},
+      </if>
+      <if test="belongid != null" >
+        #{belongid,jdbcType=BIGINT},
+      </if>
+      <if test="createtime != null" >
+        #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        #{createby,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        #{updateby,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        #{validflag,jdbcType=BIT},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.HiddenDangerCheckResult" >
+    <!--          -->
+    update hiddendangercheckresult
+    <set >
+      <if test="checkresult != null" >
+        checkresult = #{checkresult,jdbcType=VARCHAR},
+      </if>
+      <if test="isqualified != null" >
+        isqualified = #{isqualified,jdbcType=BIT},
+      </if>
+      <if test="belongid != null" >
+        belongid = #{belongid,jdbcType=BIGINT},
+      </if>
+      <if test="createtime != null" >
+        createtime = #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        createby = #{createby,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        updateby = #{updateby,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        validflag = #{validflag,jdbcType=BIT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.HiddenDangerCheckResult" >
+    <!--          -->
+    update hiddendangercheckresult
+    set checkresult = #{checkresult,jdbcType=VARCHAR},
+      isqualified = #{isqualified,jdbcType=BIT},
+      belongid = #{belongid,jdbcType=BIGINT},
+      createtime = #{createtime,jdbcType=TIMESTAMP},
+      createby = #{createby,jdbcType=VARCHAR},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      updateby = #{updateby,jdbcType=VARCHAR},
+      validflag = #{validflag,jdbcType=BIT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/HiddenDangerCheckTypeMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/HiddenDangerCheckTypeMapper.xml
new file mode 100644
index 0000000..3c215ec
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/HiddenDangerCheckTypeMapper.xml
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.HiddenDangerCheckTypeMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.HiddenDangerCheckType" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="checktype" property="checktype" jdbcType="VARCHAR" />
+    <result column="belongid" property="belongid" jdbcType="VARCHAR" />
+    <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
+    <result column="createby" property="createby" jdbcType="VARCHAR" />
+    <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+    <result column="updateby" property="updateby" jdbcType="VARCHAR" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, checktype, belongid, createtime, createby, updatetime, updateby, validflag
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select 
+    <include refid="Base_Column_List" />
+    from hiddendangerchecktype
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from hiddendangerchecktype
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.gk.firework.Domain.HiddenDangerCheckType" >
+    <!--          -->
+    insert into hiddendangerchecktype (id, checktype, belongid, 
+      createtime, createby, updatetime, 
+      updateby, validflag)
+    values (#{id,jdbcType=BIGINT}, #{checktype,jdbcType=VARCHAR}, #{belongid,jdbcType=VARCHAR}, 
+      #{createtime,jdbcType=TIMESTAMP}, #{createby,jdbcType=VARCHAR}, #{updatetime,jdbcType=TIMESTAMP}, 
+      #{updateby,jdbcType=VARCHAR}, #{validflag,jdbcType=BIT})
+  </insert>
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.HiddenDangerCheckType" >
+    <!--          -->
+    insert into hiddendangerchecktype
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="checktype != null" >
+        checktype,
+      </if>
+      <if test="belongid != null" >
+        belongid,
+      </if>
+      <if test="createtime != null" >
+        createtime,
+      </if>
+      <if test="createby != null" >
+        createby,
+      </if>
+      <if test="updatetime != null" >
+        updatetime,
+      </if>
+      <if test="updateby != null" >
+        updateby,
+      </if>
+      <if test="validflag != null" >
+        validflag,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="checktype != null" >
+        #{checktype,jdbcType=VARCHAR},
+      </if>
+      <if test="belongid != null" >
+        #{belongid,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        #{createby,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        #{updateby,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        #{validflag,jdbcType=BIT},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.HiddenDangerCheckType" >
+    <!--          -->
+    update hiddendangerchecktype
+    <set >
+      <if test="checktype != null" >
+        checktype = #{checktype,jdbcType=VARCHAR},
+      </if>
+      <if test="belongid != null" >
+        belongid = #{belongid,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        createtime = #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        createby = #{createby,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        updateby = #{updateby,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        validflag = #{validflag,jdbcType=BIT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.HiddenDangerCheckType" >
+    <!--          -->
+    update hiddendangerchecktype
+    set checktype = #{checktype,jdbcType=VARCHAR},
+      belongid = #{belongid,jdbcType=VARCHAR},
+      createtime = #{createtime,jdbcType=TIMESTAMP},
+      createby = #{createby,jdbcType=VARCHAR},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      updateby = #{updateby,jdbcType=VARCHAR},
+      validflag = #{validflag,jdbcType=BIT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/HiddenDangerMenuMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/HiddenDangerMenuMapper.xml
new file mode 100644
index 0000000..f146695
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/HiddenDangerMenuMapper.xml
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.HiddenDangerMenuMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.HiddenDangerMenu" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="name" property="name" jdbcType="VARCHAR" />
+    <result column="parentid" property="parentid" jdbcType="BIGINT" />
+    <result column="level" property="level" jdbcType="INTEGER" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+    <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
+    <result column="createby" property="createby" jdbcType="VARCHAR" />
+    <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+    <result column="updateby" property="updateby" jdbcType="VARCHAR" />
+    <collection property="submenu"
+        ofType="com.gk.firework.Domain.HiddenDangerMenu"
+        column="id"
+        select="getSubMenu"></collection>
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, name, parentid, level, validflag, createtime, createby, updatetime, updateby
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select 
+    <include refid="Base_Column_List" />
+    from hiddendangermenu
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+    <select id="selectMenu" resultMap="BaseResultMap">
+        select
+        id,
+        name,
+        parentid,
+        level
+        from hiddendangermenu
+        where validflag = 1
+        and parentid is null
+    </select>
+
+  <select id="getSubMenu" resultMap="BaseResultMap">
+        select
+        id,
+        name,
+        parentid,
+        level
+        from hiddendangermenu
+        where validflag = 1
+        and parentid = #{id}
+    </select>
+
+    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from hiddendangermenu
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.gk.firework.Domain.HiddenDangerMenu" >
+    <!--          -->
+    insert into hiddendangermenu (id, name, parentid, 
+      level, validflag, createtime, 
+      createby, updatetime, updateby
+      )
+    values (#{id,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR}, #{parentid,jdbcType=BIGINT}, 
+      #{level,jdbcType=INTEGER}, #{validflag,jdbcType=BIT}, #{createtime,jdbcType=TIMESTAMP}, 
+      #{createby,jdbcType=VARCHAR}, #{updatetime,jdbcType=TIMESTAMP}, #{updateby,jdbcType=VARCHAR}
+      )
+  </insert>
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.HiddenDangerMenu" >
+    <!--          -->
+    insert into hiddendangermenu
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="name != null" >
+        name,
+      </if>
+      <if test="parentid != null" >
+        parentid,
+      </if>
+      <if test="level != null" >
+        level,
+      </if>
+      <if test="validflag != null" >
+        validflag,
+      </if>
+      <if test="createtime != null" >
+        createtime,
+      </if>
+      <if test="createby != null" >
+        createby,
+      </if>
+      <if test="updatetime != null" >
+        updatetime,
+      </if>
+      <if test="updateby != null" >
+        updateby,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="name != null" >
+        #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="parentid != null" >
+        #{parentid,jdbcType=BIGINT},
+      </if>
+      <if test="level != null" >
+        #{level,jdbcType=INTEGER},
+      </if>
+      <if test="validflag != null" >
+        #{validflag,jdbcType=BIT},
+      </if>
+      <if test="createtime != null" >
+        #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        #{createby,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        #{updateby,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.HiddenDangerMenu" >
+    <!--          -->
+    update hiddendangermenu
+    <set >
+      <if test="name != null" >
+        name = #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="parentid != null" >
+        parentid = #{parentid,jdbcType=BIGINT},
+      </if>
+      <if test="level != null" >
+        level = #{level,jdbcType=INTEGER},
+      </if>
+      <if test="validflag != null" >
+        validflag = #{validflag,jdbcType=BIT},
+      </if>
+      <if test="createtime != null" >
+        createtime = #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        createby = #{createby,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        updateby = #{updateby,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.HiddenDangerMenu" >
+    <!--          -->
+    update hiddendangermenu
+    set name = #{name,jdbcType=VARCHAR},
+      parentid = #{parentid,jdbcType=BIGINT},
+      level = #{level,jdbcType=INTEGER},
+      validflag = #{validflag,jdbcType=BIT},
+      createtime = #{createtime,jdbcType=TIMESTAMP},
+      createby = #{createby,jdbcType=VARCHAR},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      updateby = #{updateby,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/HiddenDangerReportDetailMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/HiddenDangerReportDetailMapper.xml
new file mode 100644
index 0000000..039ff16
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/HiddenDangerReportDetailMapper.xml
@@ -0,0 +1,261 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.HiddenDangerReportDetailMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.HiddenDangerReportDetail" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="resultid" property="resultid" jdbcType="BIGINT" />
+    <result column="reportcode" property="reportcode" jdbcType="VARCHAR" />
+    <result column="findtime" property="findtime" jdbcType="TIMESTAMP" />
+    <result column="level" property="level" jdbcType="BIT" />
+    <result column="memo" property="memo" jdbcType="VARCHAR" />
+    <result column="rectifystatus" property="rectifystatus" jdbcType="BIT" />
+    <result column="rectifydeadline" property="rectifydeadline" jdbcType="TIMESTAMP" />
+    <result column="rectifycompletedate" property="rectifycompletedate" jdbcType="TIMESTAMP" />
+    <result column="rectifymeasure" property="rectifymeasure" jdbcType="BIT" />
+    <result column="rectifyprincipal" property="rectifyprincipal" jdbcType="VARCHAR" />
+    <result column="url" property="url" jdbcType="VARCHAR" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+    <result column="isqualified" property="isqualified" jdbcType="BIT" />
+    <result column="checktypeid" property="checktypeid" jdbcType="BIGINT" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, resultid, reportcode, findtime, level, memo, rectifystatus, rectifydeadline, 
+    rectifycompletedate, rectifymeasure, rectifyprincipal, url, validflag
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select 
+    <include refid="Base_Column_List" />
+    from hiddendangerreportdetail
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <select id="countOverDueByReportCode" resultType="java.lang.Integer">
+    select  count(0)
+    from hiddendangerreportdetail
+    where reportcode = #{code}
+    and validflag = 1
+    and rectifystatus = 1
+    and rectifydeadline is not null
+    and rectifydeadline &lt; now()
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from hiddendangerreportdetail
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.HiddenDangerReportDetail" >
+    <!--          -->
+    insert into hiddendangerreportdetail
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="resultid != null" >
+        resultid,
+      </if>
+      <if test="reportcode != null" >
+        reportcode,
+      </if>
+      <if test="findtime != null" >
+        findtime,
+      </if>
+      <if test="level != null" >
+        level,
+      </if>
+      <if test="memo != null" >
+        memo,
+      </if>
+      <if test="rectifystatus != null" >
+        rectifystatus,
+      </if>
+      <if test="rectifydeadline != null" >
+        rectifydeadline,
+      </if>
+      <if test="rectifycompletedate != null" >
+        rectifycompletedate,
+      </if>
+      <if test="rectifymeasure != null" >
+        rectifymeasure,
+      </if>
+      <if test="rectifyprincipal != null" >
+        rectifyprincipal,
+      </if>
+      <if test="url != null" >
+        url,
+      </if>
+      <if test="validflag != null" >
+        validflag,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="resultid != null" >
+        #{resultid,jdbcType=BIGINT},
+      </if>
+      <if test="reportcode != null" >
+        #{reportcode,jdbcType=VARCHAR},
+      </if>
+      <if test="findtime != null" >
+        #{findtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="level != null" >
+        #{level,jdbcType=BIT},
+      </if>
+      <if test="memo != null" >
+        #{memo,jdbcType=VARCHAR},
+      </if>
+      <if test="rectifystatus != null" >
+        #{rectifystatus,jdbcType=BIT},
+      </if>
+      <if test="rectifydeadline != null" >
+        #{rectifydeadline,jdbcType=TIMESTAMP},
+      </if>
+      <if test="rectifycompletedate != null" >
+        #{rectifycompletedate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="rectifymeasure != null" >
+        #{rectifymeasure,jdbcType=BIT},
+      </if>
+      <if test="rectifyprincipal != null" >
+        #{rectifyprincipal,jdbcType=VARCHAR},
+      </if>
+      <if test="url != null" >
+        #{url,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        #{validflag,jdbcType=BIT},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.HiddenDangerReportDetail" >
+    <!--          -->
+    update hiddendangerreportdetail
+    <set >
+      <if test="resultid != null" >
+        resultid = #{resultid,jdbcType=BIGINT},
+      </if>
+      <if test="reportcode != null" >
+        reportcode = #{reportcode,jdbcType=VARCHAR},
+      </if>
+      <if test="findtime != null" >
+        findtime = #{findtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="level != null" >
+        level = #{level,jdbcType=BIT},
+      </if>
+      <if test="memo != null" >
+        memo = #{memo,jdbcType=VARCHAR},
+      </if>
+      <if test="rectifystatus != null" >
+        rectifystatus = #{rectifystatus,jdbcType=BIT},
+      </if>
+      <if test="rectifydeadline != null" >
+        rectifydeadline = #{rectifydeadline,jdbcType=TIMESTAMP},
+      </if>
+      <if test="rectifycompletedate != null" >
+        rectifycompletedate = #{rectifycompletedate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="rectifymeasure != null" >
+        rectifymeasure = #{rectifymeasure,jdbcType=BIT},
+      </if>
+      <if test="rectifyprincipal != null" >
+        rectifyprincipal = #{rectifyprincipal,jdbcType=VARCHAR},
+      </if>
+      <if test="url != null" >
+        url = #{url,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        validflag = #{validflag,jdbcType=BIT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.HiddenDangerReportDetail" >
+    <!--          -->
+    update hiddendangerreportdetail
+    set resultid = #{resultid,jdbcType=BIGINT},
+      reportcode = #{reportcode,jdbcType=VARCHAR},
+      findtime = #{findtime,jdbcType=TIMESTAMP},
+      level = #{level,jdbcType=BIT},
+      memo = #{memo,jdbcType=VARCHAR},
+      rectifystatus = #{rectifystatus,jdbcType=BIT},
+      rectifydeadline = #{rectifydeadline,jdbcType=TIMESTAMP},
+      rectifycompletedate = #{rectifycompletedate,jdbcType=TIMESTAMP},
+      rectifymeasure = #{rectifymeasure,jdbcType=BIT},
+      rectifyprincipal = #{rectifyprincipal,jdbcType=VARCHAR},
+      url = #{url,jdbcType=VARCHAR},
+      validflag = #{validflag,jdbcType=BIT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="update2Qualified" parameterType="java.util.List">
+
+    update hiddendangerreportdetail
+    <trim prefix="set" suffixOverrides=",">
+      <trim prefix="findtime =case" suffix="end,">
+        <foreach collection="list" item="item" index="index">
+
+            when id=#{item.id} then null
+        </foreach>
+      </trim>
+      <trim prefix="level =case" suffix="end,">
+        <foreach collection="list" item="item" index="index">
+          when id=#{item.id} then null
+        </foreach>
+      </trim>
+      <trim prefix="memo =case" suffix="end,">
+        <foreach collection="list" item="item" index="index">
+          when id=#{item.id} then null
+        </foreach>
+      </trim>
+      <trim prefix="rectifystatus =case" suffix="end,">
+        <foreach collection="list" item="item" index="index">
+          when id=#{item.id} then null
+        </foreach>
+      </trim>
+      <trim prefix="rectifydeadline =case" suffix="end,">
+        <foreach collection="list" item="item" index="index">
+          when id=#{item.id} then null
+        </foreach>
+      </trim>
+      <trim prefix="rectifycompletedate =case" suffix="end,">
+        <foreach collection="list" item="item" index="index">
+          when id=#{item.id} then null
+        </foreach>
+      </trim>
+      <trim prefix="rectifyprincipal =case" suffix="end,">
+        <foreach collection="list" item="item" index="index">
+          when id=#{item.id} then null
+        </foreach>
+      </trim>
+      <trim prefix="url =case" suffix="end,">
+        <foreach collection="list" item="item" index="index">
+          when id=#{item.id} then null
+        </foreach>
+      </trim>
+      <trim prefix="resultid =case" suffix="end,">
+        <foreach collection="list" item="item" index="index">
+          when id=#{item.id} then #{item.resultid}
+        </foreach>
+      </trim>
+      <trim prefix="isqualified =case" suffix="end,">
+        <foreach collection="list" item="item" index="index">
+          when id=#{item.id} then 1
+        </foreach>
+      </trim>
+      <trim prefix="rectifymeasure =case" suffix="end,">
+        <foreach collection="list" item="item" index="index">
+          when id=#{item.id} then null
+        </foreach>
+      </trim>
+    </trim>
+    where id in
+    <foreach collection="list" index="index" item="item" separator="," open="(" close=")">
+      #{item.id,jdbcType=BIGINT}
+    </foreach>
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/HiddenDangerReportMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/HiddenDangerReportMapper.xml
new file mode 100644
index 0000000..e07b77f
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/HiddenDangerReportMapper.xml
@@ -0,0 +1,525 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.HiddenDangerReportMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.HiddenDangerReport" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="code" property="code" jdbcType="VARCHAR" />
+    <result column="enterprisename" property="enterprisename" jdbcType="VARCHAR" />
+    <result column="enterpriseid" property="enterpriseid" jdbcType="BIGINT" />
+    <result column="cycle" property="cycle" jdbcType="VARCHAR" />
+    <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
+    <result column="createby" property="createby" jdbcType="VARCHAR" />
+    <result column="updateby" property="updateby" jdbcType="VARCHAR" />
+    <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+    <result column="majornum" property="majornum" jdbcType="INTEGER" />
+    <result column="normalnum" property="normalnum" jdbcType="INTEGER" />
+    <result column="totalnum" property="totalnum" jdbcType="INTEGER" />
+    <result column="undealnum" property="undealnum" jdbcType="INTEGER" />
+    <result column="overduenum" property="overduenum" jdbcType="INTEGER" />
+    <result column="viewcount" property="viewcount" jdbcType="INTEGER" />
+    <result column="applyperson" property="applyperson" jdbcType="VARCHAR" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+  </resultMap>
+
+
+  <resultMap id="TableRow" type="com.gk.firework.Domain.Vo.HiddenDangerTableRow" >
+    <result column="parentmenuid" property="parentmenuid" jdbcType="BIGINT" />
+    <result column="checkcontent" property="checkcontent" jdbcType="VARCHAR" />
+    <result column="checkcriteria" property="checkcriteria" jdbcType="VARCHAR" />
+    <result column="basis" property="basis" jdbcType="VARCHAR" />
+    <result column="checktype" property="checktype" jdbcType="VARCHAR" />
+    <result column="checkresult1" property="checkresult1" jdbcType="VARCHAR" />
+    <result column="result1" property="result1" jdbcType="BIGINT" />
+    <result column="qualified" property="qualified" jdbcType="BIT" />
+    <result column="checkresult0" property="checkresult0" jdbcType="VARCHAR" />
+    <result column="unqualified" property="unqualified" jdbcType="BIT" />
+    <result column="id" property="answer.id" jdbcType="BIGINT" />
+    <result column="resultid" property="answer.resultid" jdbcType="BIGINT" />
+    <result column="findtime" property="answer.findtime" jdbcType="TIMESTAMP" />
+    <result column="level" property="answer.level" jdbcType="VARCHAR" />
+    <result column="memo" property="answer.memo" jdbcType="VARCHAR" />
+    <result column="rectifycompletedate" property="answer.rectifycompletedate" jdbcType="TIMESTAMP" />
+    <result column="rectifydeadline" property="answer.rectifydeadline" jdbcType="TIMESTAMP" />
+    <result column="rectifymeasure" property="answer.rectifymeasure" jdbcType="VARCHAR" />
+    <result column="rectifyprincipal" property="answer.rectifyprincipal" jdbcType="VARCHAR" />
+    <result column="rectifystatus" property="answer.rectifystatus" jdbcType="VARCHAR" />
+     <result column="url" property="answer.url" jdbcType="VARCHAR" />
+
+
+  </resultMap>
+
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, code, enterprisename, enterpriseid, cycle, createtime, createby, updateby, updatetime, 
+    majornum, normalnum, totalnum, undealnum, overduenum, viewcount
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select 
+    <include refid="Base_Column_List" />
+    from hiddendangerreport
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <select id="selectReportList" resultType="com.gk.firework.Domain.HiddenDangerReport">
+    select
+    hdr.id,
+    hdr.code,
+    e.enterprisename,
+    hdr.cycle,
+    hdr.createtime,
+    hdr.applyperson,
+    hdr.majornum,
+    hdr.normalnum,
+    hdr.undealnum,
+    hdr.totalnum,
+    hdr.status
+    from hiddendangerreport hdr
+    left join enterprise as e on e.enterprisenumber = hdr.enterprisenumber and e.validflag = 1
+    where hdr.validflag = 1
+    <choose>
+        <when test="params.enterprisenumber != null and params.enterprisenumber !=''">
+            and hdr.enterprisenumber = #{params.enterprisenumber}
+        </when>
+        <otherwise>
+            and hdr.status = #{params.committed}
+          <if test="params.enterprisename != null and params.enterprisename != ''">
+            and e.enterprisename like concat("%",#{params.enterprisename},"%")
+          </if>
+          <if test="params.safetysupervision != null and params.safetysupervision != ''">
+            and e.safetysupervision = #{params.safetysupervision}
+          </if>
+          <if test="params.province != null and params.province != ''">
+            and e.province = #{params.province}
+          </if>
+          <if test="params.city != null and params.city != ''">
+            and e.city = #{params.city}
+          </if>
+          <if test="params.district != null and params.district != ''">
+            and e.district = #{params.district}
+          </if>
+          <if test="params.street != null and params.street != ''">
+            and e.street = #{params.street}
+          </if>
+          <if test="params.committee != null and params.committee != ''">
+            and e.committee = #{params.committee}
+          </if>
+        </otherwise>
+    </choose>
+    <if test="params.starttime != null and params.starttime != ''">
+      and hdr.createtime &gt;= #{params.starttime}
+    </if>
+    <if test="params.endtime != null and params.endtime != ''">
+      and hdr.createtime &lt; #{params.endtime}
+    </if>
+    <if test="params.cycle != null and params.cycle != ''">
+      and hdr.cycle = #{params.cycle}
+    </if>
+    <if test="params.range != null and params.range != ''">
+      <if test="params.range == 1">
+        and hdr.normalnum = 0
+        and hdr.majornum = 0
+      </if>
+      <if test="params.range == 2">
+        and hdr.normalnum >0
+        and hdr.majornum = 0
+      </if>
+      <if test="params.range == 3">
+        and hdr.majornum >0
+        and hdr.normalnum = 0
+      </if>
+      <if test="params.range == 4">
+        and hdr.undealnum >0
+      </if>
+    </if>
+    <if test="params.filterProvince != null and params.filterProvince  != ''">
+      and e.province = #{params.filterProvince}
+    </if>
+    <if test="params.filterCity != null and  params.filterCity  != ''">
+      and e.city = #{params.filterCity}
+    </if>
+    <if test="params.filterDistrict != null and params.filterDistrict  != ''">
+      and e.district = #{params.filterDistrict}
+    </if>
+    <if test="params.filterStreet != null and params.filterStreet  != ''">
+      and e.street = #{params.filterStreet}
+    </if>
+    <if test="params.filterCommittee != null and params.filterCommittee  != ''">
+      and e.committee = #{params.filterCommittee}
+    </if>
+    order by hdr.createtime desc
+
+  </select>
+  <select id="selectReport" resultMap="TableRow">
+  select
+		hdcct.checkcontent checkcontent ,
+		hdcct.belongid parentmenuid,
+		hdcca.checkcriteria checkcriteria,
+		hdcca.id criteriaid,
+		hdcca.basis basis,
+		hdcr1.checkresult checkresult1,
+		hdcr1.id result1,
+		hdcr2.checkresult checkresult0,
+		hdcr2.id result0,
+		hdct.checktype checktype,
+		hdct.id checktypeid,
+	    hdr.code,
+	    hdrd.id id,
+	    hdrd.resultid resultid,
+	    hdrd.findtime findtime,
+	    hdrd.memo memo,
+	    hdrd.rectifycompletedate rectifycompletedate,
+	    hdrd.rectifydeadline rectifydeadline,
+	    hdrd.level level,
+	    hdrd.rectifymeasure rectifymeasure,
+	    hdrd.rectifystatus rectifystatus,
+	    hdrd.rectifyprincipal rectifyprincipal,
+	    hdrd.url url,
+	    case hdrd.isqualified when 0 then 1 else 0 end unqualified,
+		case hdrd.isqualified when 1 then 1 else 0 end qualified
+        from hiddendangercheckcontent hdcct
+        left join hiddendangercheckcriteria hdcca on hdcca.belongid =  hdcct.id and  hdcca.validflag = 1
+        left join hiddendangerchecktype  hdct on hdct.belongid =  hdcca.id and  hdct.validflag = 1
+        left join hiddendangerreportdetail hdrd on hdrd.checktypeid = hdct.id and hdrd.validflag = 1 and hdrd.reportcode =  #{code}
+        left join hiddendangercheckresult hdcr1 on hdcr1.belongid =  hdct.id and hdcr1.isqualified = 1 and hdcr1.validflag = 1
+        left join hiddendangercheckresult hdcr2 on hdcr2.belongid =  hdct.id and hdcr2.isqualified = 0 and hdcr2.validflag = 1
+        left join hiddendangerreport hdr on hdr.code = hdrd.reportcode and hdr.validflag = 1
+		order by hdct.id
+  </select>
+  <select id="viewReport"  resultMap="TableRow">
+		SELECT
+		hdcct.checkcontent checkcontent ,
+		hdcct.belongid parentmenuid,
+		hdcca.checkcriteria checkcriteria,
+		hdcca.id criteriaid,
+		hdcca.basis basis,
+		hdcr1.checkresult checkresult1,
+		hdcr1.id result1,
+		hdcr2.checkresult checkresult0,
+		hdcr2.id result0,
+		hdct.checktype checktype,
+		hdct.id checktypeid,
+	    hdrd.reportcode code,
+	    hdrd.id id,
+	    hdrd.resultid resultid,
+	    hdrd.findtime findtime,
+	    hdrd.memo memo,
+	    hdrd.rectifycompletedate rectifycompletedate,
+	    hdrd.rectifydeadline rectifydeadline,
+	    hdrd.level level,
+	    hdrd.rectifymeasure rectifymeasure,
+	    hdrd.rectifystatus rectifystatus,
+	    hdrd.rectifyprincipal rectifyprincipal,
+	    hdrd.url url,
+	    case hdrd.isqualified when 0 then 1 else 0 end unqualified,
+		case hdrd.isqualified when 1 then 1 else 0 end qualified
+		from hiddendangerreportdetail hdrd
+		left join hiddendangerchecktype  hdct on hdrd.checktypeid =  hdct.id
+		left join hiddendangercheckcriteria hdcca on hdcca.id = hdct.belongid
+		left join hiddendangercheckcontent hdcct on  hdcct.id = hdcca.belongid
+		left join hiddendangercheckresult hdcr1 on hdcr1.belongid =  hdct.id and hdcr1.isqualified = 1 and hdcr1.validflag = 1
+        left join hiddendangercheckresult hdcr2 on hdcr2.belongid =  hdct.id and hdcr2.isqualified = 0 and hdcr2.validflag = 1
+		where hdrd.validflag = 1
+		and hdrd.reportcode = #{code}
+  </select>
+    <select id="getReportByCode" resultType="com.gk.firework.Domain.HiddenDangerReport">
+        select
+        id,
+        code,
+        enterprisename,
+        cycle,
+        createtime,
+        applyperson,
+        majornum,
+        normalnum,
+        undealnum,
+        totalnum,
+        status
+        from hiddendangerreport
+        where validflag = 1
+        and code = #{code}
+    </select>
+  <select id="getReportList" resultType="java.util.Map">
+    select
+        id,
+        code,
+        createtime,
+        applyperson,
+        majornum,
+        normalnum,
+        undealnum,
+        totalnum
+        from hiddendangerreport
+        where validflag = 1
+        and enterprisenumber = #{enterprisenumber}
+        and createtime > #{starttime}
+        order by createtime desc
+  </select>
+    <select id="selectExportReport" resultType="java.util.Map">
+      select
+      hdr.id,
+      hdr.code,
+      e.enterprisename,
+      hdr.cycle,
+      hdr.createtime,
+      hdr.applyperson,
+      hdr.majornum,
+      hdr.normalnum,
+      hdr.undealnum,
+      hdr.totalnum,
+      hdr.status
+      from hiddendangerreport hdr
+      left join enterprise as e on e.enterprisenumber = hdr.enterprisenumber and e.validflag = 1
+      where hdr.validflag = 1
+      <choose>
+        <when test="params.enterprisenumber != null and params.enterprisenumber !=''">
+          and hdr.enterprisenumber = #{params.enterprisenumber}
+        </when>
+        <otherwise>
+          and hdr.status = #{params.committed}
+          <if test="params.enterprisename != null and params.enterprisename != ''">
+            and e.enterprisename like concat("%",#{params.enterprisename},"%")
+          </if>
+          <if test="params.safetysupervision != null and params.safetysupervision != ''">
+            and e.safetysupervision = #{params.safetysupervision}
+          </if>
+          <if test="params.province != null and params.province != ''">
+            and e.province = #{params.province}
+          </if>
+          <if test="params.city != null and params.city != ''">
+            and e.city = #{params.city}
+          </if>
+          <if test="params.district != null and params.district != ''">
+            and e.district = #{params.district}
+          </if>
+          <if test="params.street != null and params.street != ''">
+            and e.street = #{params.street}
+          </if>
+          <if test="params.committee != null and params.committee != ''">
+            and e.committee = #{params.committee}
+          </if>
+        </otherwise>
+      </choose>
+      <if test="params.starttime != null and params.starttime != ''">
+        and hdr.createtime &gt; #{params.starttime}
+      </if>
+      <if test="params.endtime != null and params.endtime != ''">
+        and hdr.createtime &lt; #{params.endtime}
+      </if>
+      <if test="params.cycle != null and params.cycle != ''">
+        and hdr.cycle = #{params.cycle}
+      </if>
+      <if test="params.range != null and params.range != ''">
+        <if test="params.range == 1">
+          and hdr.normalnum = 0
+          and hdr.majornum = 0
+        </if>
+        <if test="params.range == 2">
+          and hdr.normalnum >0
+          and hdr.majornum = 0
+        </if>
+        <if test="params.range == 3">
+          and hdr.majornum >0
+          and hdr.normalnum = 0
+        </if>
+        <if test="params.range == 4">
+          and hdr.undealnum >0
+        </if>
+      </if>
+      <if test="params.filterProvince != null and params.filterProvince  != ''">
+        and e.province = #{params.filterProvince}
+      </if>
+      <if test="params.filterCity != null and  params.filterCity  != ''">
+        and e.city = #{params.filterCity}
+      </if>
+      <if test="params.filterDistrict != null and params.filterDistrict  != ''">
+        and e.district = #{params.filterDistrict}
+      </if>
+      <if test="params.filterStreet != null and params.filterStreet  != ''">
+        and e.street = #{params.filterStreet}
+      </if>
+      <if test="params.filterCommittee != null and params.filterCommittee  != ''">
+        and e.committee = #{params.filterCommittee}
+      </if>
+      order by hdr.createtime desc
+
+    </select>
+
+    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from hiddendangerreport
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.HiddenDangerReport" >
+    <!--          -->
+    insert into hiddendangerreport
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="code != null" >
+        code,
+      </if>
+      <if test="enterprisename != null" >
+        enterprisename,
+      </if>
+      <if test="enterpriseid != null" >
+        enterpriseid,
+      </if>
+      <if test="cycle != null" >
+        cycle,
+      </if>
+      <if test="createtime != null" >
+        createtime,
+      </if>
+      <if test="createby != null" >
+        createby,
+      </if>
+      <if test="updateby != null" >
+        updateby,
+      </if>
+      <if test="updatetime != null" >
+        updatetime,
+      </if>
+      <if test="majornum != null" >
+        majornum,
+      </if>
+      <if test="normalnum != null" >
+        normalnum,
+      </if>
+      <if test="totalnum != null" >
+        totalnum,
+      </if>
+      <if test="undealnum != null" >
+        undealnum,
+      </if>
+      <if test="overduenum != null" >
+        overduenum,
+      </if>
+      <if test="viewcount != null" >
+        viewcount,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="code != null" >
+        #{code,jdbcType=VARCHAR},
+      </if>
+      <if test="enterprisename != null" >
+        #{enterprisename,jdbcType=VARCHAR},
+      </if>
+      <if test="enterpriseid != null" >
+        #{enterpriseid,jdbcType=BIGINT},
+      </if>
+      <if test="cycle != null" >
+        #{cycle,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        #{createby,jdbcType=VARCHAR},
+      </if>
+      <if test="updateby != null" >
+        #{updateby,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="majornum != null" >
+        #{majornum,jdbcType=INTEGER},
+      </if>
+      <if test="normalnum != null" >
+        #{normalnum,jdbcType=INTEGER},
+      </if>
+      <if test="totalnum != null" >
+        #{totalnum,jdbcType=INTEGER},
+      </if>
+      <if test="undealnum != null" >
+        #{undealnum,jdbcType=INTEGER},
+      </if>
+      <if test="overduenum != null" >
+        #{overduenum,jdbcType=INTEGER},
+      </if>
+      <if test="viewcount != null" >
+        #{viewcount,jdbcType=INTEGER},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.HiddenDangerReport" >
+    <!--          -->
+    update hiddendangerreport
+    <set >
+      <if test="code != null" >
+        code = #{code,jdbcType=VARCHAR},
+      </if>
+      <if test="enterprisename != null" >
+        enterprisename = #{enterprisename,jdbcType=VARCHAR},
+      </if>
+      <if test="enterpriseid != null" >
+        enterpriseid = #{enterpriseid,jdbcType=BIGINT},
+      </if>
+      <if test="cycle != null" >
+        cycle = #{cycle,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        createtime = #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        createby = #{createby,jdbcType=VARCHAR},
+      </if>
+      <if test="updateby != null" >
+        updateby = #{updateby,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="majornum != null" >
+        majornum = #{majornum,jdbcType=INTEGER},
+      </if>
+      <if test="normalnum != null" >
+        normalnum = #{normalnum,jdbcType=INTEGER},
+      </if>
+      <if test="totalnum != null" >
+        totalnum = #{totalnum,jdbcType=INTEGER},
+      </if>
+      <if test="undealnum != null" >
+        undealnum = #{undealnum,jdbcType=INTEGER},
+      </if>
+      <if test="overduenum != null" >
+        overduenum = #{overduenum,jdbcType=INTEGER},
+      </if>
+      <if test="viewcount != null" >
+        viewcount = #{viewcount,jdbcType=INTEGER},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.HiddenDangerReport" >
+    <!--          -->
+    update hiddendangerreport
+    set code = #{code,jdbcType=VARCHAR},
+      enterprisename = #{enterprisename,jdbcType=VARCHAR},
+      enterpriseid = #{enterpriseid,jdbcType=BIGINT},
+      cycle = #{cycle,jdbcType=VARCHAR},
+      createtime = #{createtime,jdbcType=TIMESTAMP},
+      createby = #{createby,jdbcType=VARCHAR},
+      updateby = #{updateby,jdbcType=VARCHAR},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      majornum = #{majornum,jdbcType=INTEGER},
+      normalnum = #{normalnum,jdbcType=INTEGER},
+      totalnum = #{totalnum,jdbcType=INTEGER},
+      undealnum = #{undealnum,jdbcType=INTEGER},
+      overduenum = #{overduenum,jdbcType=INTEGER},
+      viewcount = #{viewcount,jdbcType=INTEGER}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateStatusByCode">
+    update hiddendangerreport
+    set status = #{status}
+    where code = #{code}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/HistoryStockMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/HistoryStockMapper.xml
new file mode 100644
index 0000000..f603056
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/HistoryStockMapper.xml
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.HistoryStockMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.HistoryStock" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="owner" property="owner" jdbcType="BIGINT" />
+    <result column="enterprisename" property="enterprisename" jdbcType="VARCHAR" />
+    <result column="enterprisenumber" property="enterprisenumber" jdbcType="VARCHAR" />
+    <result column="safetysupervision" property="safetysupervision" jdbcType="VARCHAR" />
+    <result column="province" property="province" jdbcType="VARCHAR" />
+    <result column="city" property="city" jdbcType="VARCHAR" />
+    <result column="district" property="district" jdbcType="VARCHAR" />
+    <result column="stocknum" property="stocknum" jdbcType="DECIMAL" />
+    <result column="firecracker" property="firecracker" jdbcType="DECIMAL" />
+    <result column="spray" property="spray" jdbcType="DECIMAL" />
+    <result column="rotation" property="rotation" jdbcType="DECIMAL" />
+    <result column="bead" property="bead" jdbcType="DECIMAL" />
+    <result column="toy" property="toy" jdbcType="DECIMAL" />
+    <result column="combined" property="combined" jdbcType="DECIMAL" />
+    <result column="updateat" property="updateat" jdbcType="TIMESTAMP" />
+    <result column="flag" property="flag" jdbcType="TINYINT" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, owner, enterprisename, enterprisenumber, safetysupervision, province, city, district,
+    stocknum, firecracker, spray, rotation, bead, toy, combined, updateat,
+    flag
+  </sql>
+  <insert id="insertDayHistoryStock">
+    insert into historystock
+    (owner, enterprisename, enterprisenumber, safetysupervision, province, city, district,
+    stocknum, firecracker, spray, rotation, bead, toy, combined, updateat,flag)
+    select
+    owner, enterprisename, enterprisenumber, safetysupervision, province, city, district,
+    stocknum, firecracker, spray, rotation, bead, toy, combined, updateat,flag
+    from staticstock
+  </insert>
+
+    <select id="selectPages" resultType="java.util.Map">
+        select
+        owner, enterprisename, enterprisenumber, safetysupervision,
+        province, city, district,
+        stocknum, firecracker, spray, rotation, bead, toy, combined,
+        updateat,flag
+        from historystock
+        <where>
+            <if test="params.province != null and params.province != ''">
+                and province = #{params.province}
+            </if>
+            <if test="params.city != null and params.city != ''">
+                and city = #{params.city}
+            </if>
+            <if test="params.district != null and params.district != ''">
+                and district = #{params.district}
+            </if>
+            <if test="params.specificDate != null and params.specificDate != ''">
+               and  datediff ( updateat , #{params.specificDate} ) = 0
+            </if>
+            <if test="params.enterprisename != null and params.enterprisename != ''">
+                and  enterprisename like concat("%",#{params.enterprisename},"%")
+            </if>
+            <if test="params.safetysupervision != null and params.safetysupervision != ''">
+                and  safetysupervision = #{params.safetysupervision}
+            </if>
+        </where>
+
+    </select>
+    <select id="selectCityStock" resultType="java.util.Map">
+        select
+        city,
+        sum(stocknum) stocknum,
+        sum(firecracker) firecracker,
+        sum(spray) spray,
+        sum(rotation) rotation,
+        sum(bead) bead,
+        sum(toy) toy,
+        sum(combined) combined,
+        updateat
+        from staticstock
+        <where>
+            <if test="params.province != null and params.province != ''">
+                and province = #{params.province}
+            </if>
+            <if test="params.city != null and params.city != ''">
+                and city = #{params.city}
+            </if>
+            <if test="params.district != null and params.district != ''">
+                and district = #{params.district}
+            </if>
+            <if test="params.specificDate != null and params.specificDate != ''">
+                and  datediff ( updateat , #{params.specificDate} ) = 0
+            </if>
+            <if test="params.safetysupervision != null and params.safetysupervision != ''">
+                and  safetysupervision = #{params.safetysupervision}
+            </if>
+            <if test="params.enterprisename != null and params.enterprisename != ''">
+                and  enterprisename like concat("%",#{params.enterprisename},"%")
+            </if>
+        </where>
+        group by city
+    </select>
+    <select id="selectAllCityStock" resultType="java.util.Map">
+        select
+        "合计" city,
+        sum(stocknum) stocknum,
+        sum(firecracker) firecracker,
+        sum(spray) spray,
+        sum(rotation) rotation,
+        sum(bead) bead,
+        sum(toy) toy,
+        sum(combined) combined
+        from staticstock
+        <where>
+            <if test="params.province != null and params.province != ''">
+                and province = #{params.province}
+            </if>
+            <if test="params.city != null and params.city != ''">
+                and city = #{params.city}
+            </if>
+            <if test="params.district != null and params.district != ''">
+                and district = #{params.district}
+            </if>
+            <if test="params.specificDate != null and params.specificDate != ''">
+                and  datediff ( updateat , #{params.specificDate} ) = 0
+            </if>
+            <if test="params.safetysupervision != null and params.safetysupervision != ''">
+                and  safetysupervision = #{params.safetysupervision}
+            </if>
+            <if test="params.enterprisename != null and params.enterprisename != ''">
+                and  enterprisename like concat("%",#{params.enterprisename},"%")
+            </if>
+        </where>
+    </select>
+    <select id="selectDayHistoryStockTotal" resultType="java.util.Map">
+        select
+        "合计" enterprisename,
+        "合计" city,
+        sum(stocknum) stocknum,
+        sum(firecracker) firecracker,
+        sum(spray) spray,
+        sum(rotation) rotation,
+        sum(bead) bead,
+        sum(toy) toy,
+        sum(combined) combined
+        from historystock
+        <where>
+            <if test="params.province != null and params.province != ''">
+                and  province = #{params.province}
+            </if>
+            <if test="params.city != null and params.city != ''">
+                and  city = #{params.city}
+            </if>
+            <if test="params.district != null and params.district != ''">
+                and  district = #{params.district}
+            </if>
+            <if test="params.specificDate != null and params.specificDate != ''">
+                and  datediff ( updateat , #{params.specificDate} ) = 0
+            </if>
+            <if test="params.enterprisename != null and params.enterprisename != ''">
+                and  enterprisename like concat("%",#{params.enterprisename},"%")
+            </if>
+            <if test="params.safetysupervision != null and params.safetysupervision != ''">
+                and  safetysupervision = #{params.safetysupervision}
+            </if>
+        </where>
+    </select>
+    <select id="selectHistoryCityStock" resultType="java.util.Map">
+        select
+        city,
+        sum(stocknum) stocknum,
+        sum(firecracker) firecracker,
+        sum(spray) spray,
+        sum(rotation) rotation,
+        sum(bead) bead,
+        sum(toy) toy,
+        sum(combined) combined
+        from historystock
+        <where>
+            <if test="params.province != null and params.province != ''">
+                and province = #{params.province}
+            </if>
+            <if test="params.city != null and params.city != ''">
+                and city = #{params.city}
+            </if>
+            <if test="params.district != null and params.district != ''">
+                and district = #{params.district}
+            </if>
+            <if test="params.specificDate != null and params.specificDate != ''">
+                and  datediff ( updateat , #{params.specificDate} ) = 0
+            </if>
+            <if test="params.safetysupervision != null and params.safetysupervision != ''">
+                and   safetysupervision = #{params.safetysupervision}
+            </if>
+            <if test="params.enterprisename != null and params.enterprisename != ''">
+                and  enterprisename like concat("%",#{params.enterprisename},"%")
+            </if>
+        </where>
+        group by city
+    </select>
+
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/LicenseInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/LicenseInfoMapper.xml
new file mode 100644
index 0000000..9b5af24
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/LicenseInfoMapper.xml
@@ -0,0 +1,233 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.LicenseInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.LicenseInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="sn" property="sn" jdbcType="INTEGER" />
+    <result column="licensecode" property="licensecode" jdbcType="VARCHAR" />
+    <result column="type" property="type" jdbcType="TINYINT" />
+    <result column="name" property="name" jdbcType="VARCHAR" />
+    <result column="code" property="code" jdbcType="VARCHAR" />
+    <result column="mainpersonname" property="mainpersonname" jdbcType="VARCHAR" />
+    <result column="mainpersonidcardnum" property="mainpersonidcardnum" jdbcType="VARCHAR" />
+    <result column="mainpersontel" property="mainpersontel" jdbcType="VARCHAR" />
+    <result column="safetypersonname" property="safetypersonname" jdbcType="VARCHAR" />
+    <result column="safetypersonidcardnum" property="safetypersonidcardnum" jdbcType="VARCHAR" />
+    <result column="safetypersontel" property="safetypersontel" jdbcType="VARCHAR" />
+    <result column="province" property="province" jdbcType="VARCHAR" />
+    <result column="city" property="city" jdbcType="VARCHAR" />
+    <result column="district" property="district" jdbcType="VARCHAR" />
+    <result column="address" property="address" jdbcType="VARCHAR" />
+    <result column="licensetype" property="licensetype" jdbcType="TINYINT" />
+    <result column="dealingtype" property="dealingtype" jdbcType="TINYINT" />
+    <result column="dealingarea" property="dealingarea" jdbcType="DECIMAL" />
+    <result column="savearea" property="savearea" jdbcType="DECIMAL" />
+    <result column="reservebox" property="reservebox" jdbcType="DECIMAL" />
+    <result column="reservekg" property="reservekg" jdbcType="DECIMAL" />
+    <result column="effectdate" property="effectdate" jdbcType="DATE" />
+    <result column="noeffectdate" property="noeffectdate" jdbcType="DATE" />
+    <result column="delaydate" property="delaydate" jdbcType="DATE" />
+    <result column="issuingunit" property="issuingunit" jdbcType="VARCHAR" />
+    <result column="issuingdate" property="issuingdate" jdbcType="DATE" />
+    <result column="remark" property="remark" jdbcType="VARCHAR" />
+    <result column="dealingrange" property="dealingrange" jdbcType="VARCHAR" />
+    <result column="flag" property="flag" jdbcType="TINYINT" />
+    <result column="createdby" property="createdby" jdbcType="VARCHAR" />
+    <result column="createdat" property="createdat" jdbcType="TIMESTAMP" />
+    <result column="modifiedby" property="modifiedby" jdbcType="VARCHAR" />
+    <result column="modifiedat" property="modifiedat" jdbcType="TIMESTAMP" />
+    <result column="reviewer" property="reviewer" jdbcType="VARCHAR" />
+    <result column="reviewat" property="reviewat" jdbcType="TIMESTAMP" />
+    <result column="reviewstatus" property="reviewstatus" jdbcType="TINYINT" />
+    <result column="reviewnote" property="reviewnote" jdbcType="VARCHAR" />
+    <result column="granttype" property="granttype" jdbcType="TINYINT" />
+    <result column="status" property="status" jdbcType="TINYINT" />
+    <result column="printstatus" property="printstatus" jdbcType="TINYINT" />
+    <result column="storageprovince" property="storageprovince" jdbcType="VARCHAR" />
+    <result column="storagecity" property="storagecity" jdbcType="VARCHAR" />
+    <result column="storagedistrict" property="storagedistrict" jdbcType="VARCHAR" />
+    <result column="storageaddress" property="storageaddress" jdbcType="VARCHAR" />
+    <result column="economictype" property="economictype" jdbcType="VARCHAR" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, sn, licensecode, type, name, code, mainpersonname, mainpersonidcardnum, mainpersontel,
+    safetypersonname, safetypersonidcardnum, safetypersontel, province, city, district,
+    address, licensetype, dealingtype, dealingarea, savearea, reservebox, reservekg,
+    effectdate, noeffectdate, delaydate, issuingunit, issuingdate, remark, dealingrange, flag, createdby,
+    createdat, modifiedby, modifiedat, reviewer, reviewat, reviewstatus, reviewnote,
+    granttype, status, printstatus, storageprovince, storagecity, storagedistrict, storageaddress, economictype
+  </sql>
+
+  <select id="selectLicenseDataGrid" resultType="com.gk.firework.Domain.Vo.LicenseVo">
+    select
+    license.*,
+    enterprise.enterprisenumber
+    from
+    license
+    LEFT JOIN enterprise on enterprise.enterprisename = license.`name`
+    <where>
+      1=1
+      and license.flag = 0
+      and enterprise.validflag = 1
+      and enterprise.enterprisestatus = 'ON'
+      <if test="condition.name != null and condition.name != ''">
+        and license.`name` like concat('%',#{condition.name},'%')
+      </if>
+
+      <if test="condition.type != null and condition.type != ''">
+        and license.`type` = #{condition.type}
+      </if>
+
+      <if test="condition.effectdate != null and condition.effectdate != ''">
+        and license.effectdate &gt; #{condition.effectdate}
+      </if>
+      <if test="condition.noeffectdate != null and condition.noeffectdate != ''">
+        and license.noeffectdate &lt; #{condition.noeffectdate}
+      </if>
+
+      <if test="condition.status != null and condition.status != ''">
+        and license.`status` = #{condition.status}
+      </if>
+
+      <if test="condition.province != null and condition.province != ''">
+        and license.province = #{condition.province}
+      </if>
+      <if test="condition.city != null and condition.city != ''">
+        and license.city= #{condition.city}
+      </if>
+      <if test="condition.district != null and condition.district != ''">
+        and license.district = #{condition.district}
+      </if>
+
+      <if test="condition.issuingunit != null and condition.issuingunit != ''">
+        and license.issuingunit like concat('%',#{condition.issuingunit},'%')
+      </if>
+
+      <if test="condition.reviewer != null and condition.reviewer != ''">
+        and license.reviewer like concat('%',#{condition.reviewer},'%')
+      </if>
+
+        <if test="condition.filterProvince != null and condition.filterProvince != ''">
+            and license.province = #{condition.filterProvince}
+        </if>
+        <if test="condition.filterCity != null and condition.filterCity != ''">
+            and license.city = #{condition.filterCity}
+        </if>
+        <if test="condition.filterDistrict != null and condition.filterDistrict != ''">
+            and license.district = #{condition.filterDistrict}
+        </if>
+        <if test="condition.reviewstatus != null">
+            and license.reviewstatus = #{condition.reviewstatus}
+        </if>
+        <if test="condition.starttime1 != null and condition.starttime1 != ''">
+            and license.createdat &gt;=  #{condition.starttime1}
+        </if>
+        <if test="condition.endtime1 != null and condition.endtime1 != ''">
+            and license.createdat &lt;=  #{condition.endtime1}
+        </if>
+        <if test="condition.starttime2 != null and condition.starttime2 != ''">
+            and license.issuingdate &gt;=  #{condition.starttime2}
+        </if>
+        <if test="condition.endtime2 != null and condition.endtime2 != ''">
+            and license.issuingdate &lt;=  #{condition.endtime2}
+        </if>
+        <if test="condition.validstatus != null and condition.validstatus != ''">
+            and license.validstatus =  #{condition.validstatus}
+        </if>
+        <if test="condition.licensestatus != null ">
+            and license.licensestatus =  #{condition.licensestatus}
+        </if>
+
+    </where>
+  </select>
+    <select id="selectLicenseStatisticPage" resultType="java.util.Map">
+      select
+      citys.name,
+      IFNULL(reviewedData.reviewed,0) reviewed,
+      IFNULL(expiredData.expired,0) expired,
+      IFNULL(pendingData.pending,0)	pending
+
+      from (
+
+            select *
+            from district
+            where parentcode =(
+            select district.code
+            from district as  district
+            where district.name = '新疆维吾尔自治区'
+            and type = 1)
+            and type =2
+
+      )   as citys
+
+      left join (
+
+              select e.city ,count(0) reviewed from
+              license as l ,enterprise as e
+              where
+              e.enterprisename = l.name
+              and l.reviewstatus = 2
+              and e.validflag = 1
+              and e.province = '新疆维吾尔自治区'
+              <if test="params.starttime != null and params.starttime != ''">
+                and l.reviewat &gt;= #{params.starttime}
+              </if>
+              <if test="params.endtime != null and params.endtime != ''">
+                and l.reviewat &lt;= #{params.endtime}
+              </if>
+              group by e.city
+
+      ) as reviewedData
+
+      on citys.name = reviewedData.city
+
+      left join (
+
+            select  e.city  , count(0) expired
+            from
+            enterprise as e
+            where e.province = '新疆维吾尔自治区'
+            and e.validendtime &lt; now()
+            group by e.city
+
+      ) as expiredData
+
+
+      on citys.name = expiredData.city
+
+      left join (
+
+              select e.city ,count(0) pending from
+              license as l ,enterprise as e
+              where
+              e.enterprisename = l.name
+              and l.reviewstatus = 1
+              and e.validflag = 1
+              and e.province = '新疆维吾尔自治区'
+              <if test="params.starttime != null and params.starttime != ''">
+                and l.modifiedat &gt;= #{params.starttime}
+              </if>
+              <if test="params.endtime != null and params.endtime != ''">
+                and l.modifiedat &lt;= #{params.endtime}
+              </if>
+              group by e.city
+
+      ) as pendingData
+
+      on citys.name  =  pendingData.city
+
+
+      <where>
+       <if test="params.city != null and params.city != ''">
+            citys.name = #{params.city}
+       </if>
+       <if test="params.filterCity != null and params.filterCity != ''">
+         citys.name like concat("%",#{params.filterCity},"%")
+       </if>
+     </where>
+
+
+    </select>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/LicenseStorageMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/LicenseStorageMapper.xml
new file mode 100644
index 0000000..aaab58e
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/LicenseStorageMapper.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.LicenseStorageMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.LicenseStorage" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <id column="licensecode" property="licensecode" jdbcType="VARCHAR" />
+    <result column="area" property="area" jdbcType="INTEGER" />
+    <result column="storagenum" property="storagenum" jdbcType="INTEGER" />
+    <result column="storagearea" property="storagearea" jdbcType="DECIMAL" />
+    <result column="powder" property="powder" jdbcType="DECIMAL" />
+    <result column="firststoragenum" property="firststoragenum" jdbcType="INTEGER" />
+    <result column="firststoragearea" property="firststoragearea" jdbcType="DECIMAL" />
+    <result column="firstpowder" property="firstpowder" jdbcType="DECIMAL" />
+    <result column="thirdstoragenum" property="thirdstoragenum" jdbcType="INTEGER" />
+    <result column="thirdstoragearea" property="thirdstoragearea" jdbcType="DECIMAL" />
+    <result column="thirdpowder" property="thirdpowder" jdbcType="DECIMAL" />
+    <result column="type" property="type" jdbcType="TINYINT" />
+    <result column="flag" property="flag" jdbcType="TINYINT" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, licensecode, area, storagenum, storagearea, powder, firststoragenum, firststoragearea, firstpowder,
+    thirdstoragenum, thirdstoragearea, thirdpowder, type, flag
+  </sql>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/PatrolDetailInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/PatrolDetailInfoMapper.xml
new file mode 100644
index 0000000..187608f
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/PatrolDetailInfoMapper.xml
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.PatrolDetailInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.PatrolDetailInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="orderid" property="orderid" jdbcType="BIGINT" />
+    <result column="content" property="content" jdbcType="VARCHAR" />
+    <result column="standard" property="standard" jdbcType="VARCHAR" />
+    <result column="choose" property="choose" jdbcType="VARCHAR" />
+    <result column="reason" property="reason" jdbcType="VARCHAR" />
+    <result column="beforepath" property="beforepath" jdbcType="VARCHAR" />
+    <result column="afterpath" property="afterpath" jdbcType="VARCHAR" />
+    <result column="ismend" property="ismend" jdbcType="TINYINT" />
+    <result column="createdby" property="createdby" jdbcType="VARCHAR" />
+    <result column="createddate" property="createddate" jdbcType="TIMESTAMP" />
+    <result column="modifiedby" property="modifiedby" jdbcType="VARCHAR" />
+    <result column="modifieddate" property="modifieddate" jdbcType="TIMESTAMP" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, orderid, content, standard,choose, reason, beforepath, afterpath, ismend, createdby,
+    createddate, modifiedby, modifieddate
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select
+    <include refid="Base_Column_List" />
+    from patroldetail
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <select id="selectDataGrid" resultType="com.gk.firework.Domain.PatrolDetailInfo">
+    select
+    <include refid="Base_Column_List" />
+    from patroldetail
+    <where>
+      1=1
+      <if test="condition.orderid != null">
+        and orderid = #{condition.orderid}
+      </if>
+      <if test="condition.ismend != null">
+        and ismend = #{condition.ismend}
+      </if>
+    </where>
+  </select>
+  <select id="selectIsNotMend" resultType="java.lang.Integer">
+    SELECT COUNT(1)
+    from patroldetail
+    where
+    ismend = 0
+    and orderid = #{orderid}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from patroldetail
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.PatrolDetailInfo" >
+    <!--          -->
+    update patroldetail
+    <set >
+      <if test="orderid != null" >
+        orderid = #{orderid,jdbcType=BIGINT},
+      </if>
+      <if test="content != null" >
+        content = #{content,jdbcType=VARCHAR},
+      </if>
+      <if test="standard != null" >
+        standard = #{standard,jdbcType=VARCHAR},
+      </if>
+      <if test="choose != null" >
+        choose = #{choose,jdbcType=VARCHAR},
+      </if>
+      <if test="reason != null" >
+        reason = #{reason,jdbcType=VARCHAR},
+      </if>
+      <if test="beforepath != null" >
+        beforepath = #{beforepath,jdbcType=VARCHAR},
+      </if>
+      <if test="afterpath != null" >
+        afterpath = #{afterpath,jdbcType=VARCHAR},
+      </if>
+      <if test="ismend != null" >
+        ismend = #{ismend,jdbcType=TINYINT},
+      </if>
+      <if test="createdby != null" >
+        createdby = #{createdby,jdbcType=VARCHAR},
+      </if>
+      <if test="createddate != null" >
+        createddate = #{createddate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="modifiedby != null" >
+        modifiedby = #{modifiedby,jdbcType=VARCHAR},
+      </if>
+      <if test="modifieddate != null" >
+        modifieddate = #{modifieddate,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.PatrolDetailInfo" >
+    <!--          -->
+    update patroldetail
+    set orderid = #{orderid,jdbcType=BIGINT},
+      content = #{content,jdbcType=VARCHAR},
+      standard = #{standard,jdbcType=VARCHAR},
+      choose = #{choose,jdbcType=VARCHAR},
+      reason = #{reason,jdbcType=VARCHAR},
+      beforepath = #{beforepath,jdbcType=VARCHAR},
+      afterpath = #{afterpath,jdbcType=VARCHAR},
+      ismend = #{ismend,jdbcType=TINYINT},
+      createdby = #{createdby,jdbcType=VARCHAR},
+      createddate = #{createddate,jdbcType=TIMESTAMP},
+      modifiedby = #{modifiedby,jdbcType=VARCHAR},
+      modifieddate = #{modifieddate,jdbcType=TIMESTAMP}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/PatrolOrderInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/PatrolOrderInfoMapper.xml
new file mode 100644
index 0000000..f7cf224
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/PatrolOrderInfoMapper.xml
@@ -0,0 +1,160 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.PatrolOrderInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.PatrolOrderInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="userid" property="userid" jdbcType="BIGINT" />
+    <result column="companyid" property="companyid" jdbcType="BIGINT" />
+    <result column="ismend" property="ismend" jdbcType="TINYINT" />
+    <result column="createdby" property="createdby" jdbcType="VARCHAR" />
+    <result column="createddate" property="createddate" jdbcType="TIMESTAMP" />
+    <result column="modifiedby" property="modifiedby" jdbcType="VARCHAR" />
+    <result column="modifieddate" property="modifieddate" jdbcType="TIMESTAMP" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, userid, companyid, ismend, createdby, createddate, modifiedby, modifieddate
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select
+    <include refid="Base_Column_List" />
+    from patrolorder
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <select id="selectDataGrid" resultType="com.gk.firework.Domain.Vo.PatrolOrderVo">
+    SELECT
+	  patrolorder.id,
+      patrolorder.ismend,
+      patrolorder.createdby,
+      patrolorder.createddate,
+      patrolorder.modifiedby,
+      patrolorder.modifieddate,
+      `user`.username as checkname,
+      enterprise.enterprisename,
+      enterprise.safetysupervision,
+      enterprise.officeaddress,
+      enterprise.officephone,
+      mainprincipal.`name` as mainperson
+    FROM
+    patrolorder
+    LEFT JOIN `user` on `user`.id = patrolorder.userid
+    LEFT JOIN enterprise on enterprise.id = patrolorder.companyid
+    LEFT JOIN enterprisestaff as mainprincipal ON enterprise.id = mainprincipal.belongid and mainprincipal.type = '主要负责人'
+    <where>
+      1=1
+      and `user`.isdel = 0
+      and enterprise.validflag = 1
+      <if test="condition.starttime != null">
+        and patrolorder.modifieddate &gt;= #{condition.starttime}
+      </if>
+      <if test="condition.endtime != null">
+        and patrolorder.modifieddate &lt;= #{condition.endtime}
+      </if>
+      <if test="condition.ismend != null">
+        and patrolorder.ismend = #{condition.ismend}
+      </if>
+      <if test="condition.enterprisename != null and condition.enterprisename != ''">
+        and enterprise.enterprisename like CONCAT('%',#{condition.enterprisename},'%')
+      </if>
+      <if test="condition.enterprisetype != null and condition.enterprisetype != ''">
+        and enterprise.enterprisetype = #{condition.enterprisetype}
+      </if>
+      <if test="condition.province != null and condition.province != ''">
+        and enterprise.province = #{condition.province}
+      </if>
+      <if test="condition.city != null and condition.city != ''">
+        and enterprise.city = #{condition.city}
+      </if>
+      <if test="condition.area != null and condition.area != ''">
+        and enterprise.district = #{condition.area}
+      </if>
+      <if test="condition.town != null and condition.town != ''">
+        and enterprise.street = #{condition.town}
+      </if>
+      <if test="condition.community != null and condition.community != ''">
+        and enterprise.committee = #{condition.community}
+      </if>
+      <if test="condition.checkname != null and condition.checkname != ''">
+        and `user`.username LIKE CONCAT('%',#{condition.checkname},'%')
+      </if>
+    </where>
+  </select>
+  <select id="selectListByEnterprise" resultType="com.gk.firework.Domain.Vo.PatrolOrderVo">
+    SELECT
+    patrolorder.id,
+    patrolorder.ismend,
+    patrolorder.createdby,
+    patrolorder.createddate,
+    patrolorder.modifiedby,
+    patrolorder.modifieddate,
+    `user`.username as checkname,
+    enterprise.enterprisename,
+    enterprise.safetysupervision,
+    enterprise.officeaddress,
+    enterprise.officephone,
+    mainprincipal.`name` as mainperson
+    FROM
+    patrolorder
+    LEFT JOIN `user` on `user`.id = patrolorder.userid
+    LEFT JOIN enterprise on enterprise.id = patrolorder.companyid
+    LEFT JOIN enterprisestaff as mainprincipal ON enterprise.id = mainprincipal.belongid and mainprincipal.type = '主要负责人'
+    <where>
+      1=1
+      and `user`.isdel = 0
+      and enterprise.validflag = 1
+      <if test="enterprisename != null and enterprisename != ''">
+        and enterprise.enterprisename like CONCAT('%',#{enterprisename},'%')
+      </if>
+      <if test="username != null and username != ''">
+        and `user`.username LIKE CONCAT('%',#{username},'%')
+      </if>
+    </where>
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from patrolorder
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.PatrolOrderInfo" >
+    <!--          -->
+    update patrolorder
+    <set >
+      <if test="userid != null" >
+        userid = #{userid,jdbcType=BIGINT},
+      </if>
+      <if test="companyid != null" >
+        companyid = #{companyid,jdbcType=BIGINT},
+      </if>
+      <if test="ismend != null" >
+        ismend = #{ismend,jdbcType=TINYINT},
+      </if>
+      <if test="createdby != null" >
+        createdby = #{createdby,jdbcType=VARCHAR},
+      </if>
+      <if test="createddate != null" >
+        createddate = #{createddate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="modifiedby != null" >
+        modifiedby = #{modifiedby,jdbcType=VARCHAR},
+      </if>
+      <if test="modifieddate != null" >
+        modifieddate = #{modifieddate,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.PatrolOrderInfo" >
+    <!--          -->
+    update patrolorder
+    set userid = #{userid,jdbcType=BIGINT},
+      companyid = #{companyid,jdbcType=BIGINT},
+      ismend = #{ismend,jdbcType=TINYINT},
+      createdby = #{createdby,jdbcType=VARCHAR},
+      createddate = #{createddate,jdbcType=TIMESTAMP},
+      modifiedby = #{modifiedby,jdbcType=VARCHAR},
+      modifieddate = #{modifieddate,jdbcType=TIMESTAMP}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/PermissionInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/PermissionInfoMapper.xml
new file mode 100644
index 0000000..778f9a7
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/PermissionInfoMapper.xml
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gk.firework.Mapper.PermissionInfoMapper">
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.PermissionInfo">
+    <!--          -->
+    <id column="id" jdbcType="INTEGER" property="id" />
+    <result column="name" jdbcType="VARCHAR" property="name" />
+    <result column="level" jdbcType="INTEGER" property="level" />
+    <result column="title" jdbcType="VARCHAR" property="title" />
+    <result column="path" jdbcType="VARCHAR" property="path" />
+    <result column="component" jdbcType="VARCHAR" property="component" />
+    <result column="icon" jdbcType="VARCHAR" property="icon" />
+    <result column="buttontype" jdbcType="VARCHAR" property="buttontype" />
+    <result column="status" jdbcType="INTEGER" property="status" />
+    <result column="description" jdbcType="VARCHAR" property="description" />
+    <result column="sortorder" jdbcType="DOUBLE" property="sortorder" />
+    <result column="type" jdbcType="INTEGER" property="type" />
+    <result column="expand" jdbcType="BIT" property="expand" />
+    <result column="checked" jdbcType="BIT" property="checked" />
+    <result column="selected" jdbcType="BIT" property="selected" />
+    <result column="createdby" jdbcType="VARCHAR" property="createdby" />
+    <result column="createddate" jdbcType="TIMESTAMP" property="createddate" />
+    <result column="lastmodifiedby" jdbcType="VARCHAR" property="lastmodifiedby" />
+    <result column="lastmodifieddate" jdbcType="TIMESTAMP" property="lastmodifieddate" />
+    <result column="parentid" jdbcType="INTEGER" property="parentid" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--          -->
+    id, name, level, title, path, component, icon, buttontype, status, description, sortorder,
+    type, expand, checked, selected, createdby, createddate, lastmodifiedby, lastmodifieddate,
+    parentid
+  </sql>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
+    <!--          -->
+    select
+    <include refid="Base_Column_List" />
+    from permission
+    where id = #{id,jdbcType=INTEGER}
+  </select>
+  <select id="selectAll" resultType="com.gk.firework.Domain.PermissionInfo">
+    select
+    <include refid="Base_Column_List" />
+    from permission
+    where `status` = 1
+    order by sortorder asc
+  </select>
+  <select id="selectByUserId" resultType="com.gk.firework.Domain.PermissionInfo">
+    SELECT
+    <include refid="Base_Column_List" />
+    FROM
+	permission
+    WHERE
+	id IN (
+		SELECT DISTINCT
+			rolepermissions.permissionid
+		FROM
+			rolepermissions
+		WHERE
+			roleid IN (
+				SELECT
+					userroles.roleid
+				FROM
+					userroles
+				LEFT JOIN `user` ON `user`.id = userroles.userid
+				WHERE
+					`user`.id = #{userId}
+			)
+	)
+	and `status` = 1
+    ORDER BY `level`,sortorder ASC
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
+    <!--          -->
+    delete from permission
+    where id = #{id,jdbcType=INTEGER}
+  </delete>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.PermissionInfo">
+    <!--          -->
+    update permission
+    <set>
+      <if test="name != null">
+        name = #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="level != null">
+        level = #{level,jdbcType=INTEGER},
+      </if>
+      <if test="title != null">
+        title = #{title,jdbcType=VARCHAR},
+      </if>
+      <if test="path != null">
+        path = #{path,jdbcType=VARCHAR},
+      </if>
+      <if test="component != null">
+        component = #{component,jdbcType=VARCHAR},
+      </if>
+      <if test="icon != null">
+        icon = #{icon,jdbcType=VARCHAR},
+      </if>
+      <if test="buttontype != null">
+        buttonType = #{buttontype,jdbcType=VARCHAR},
+      </if>
+      <if test="status != null">
+        status = #{status,jdbcType=INTEGER},
+      </if>
+      <if test="description != null">
+        description = #{description,jdbcType=VARCHAR},
+      </if>
+      <if test="sortorder != null">
+        sortorder = #{sortorder,jdbcType=DOUBLE},
+      </if>
+      <if test="type != null">
+        type = #{type,jdbcType=INTEGER},
+      </if>
+      <if test="expand != null">
+        expand = #{expand,jdbcType=BIT},
+      </if>
+      <if test="checked != null">
+        checked = #{checked,jdbcType=BIT},
+      </if>
+      <if test="selected != null">
+        selected = #{selected,jdbcType=BIT},
+      </if>
+      <if test="createdby != null">
+        createdby = #{createdby,jdbcType=VARCHAR},
+      </if>
+      <if test="createddate != null">
+        createddate = #{createddate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="lastmodifiedby != null">
+        lastmodifiedby = #{lastmodifiedby,jdbcType=VARCHAR},
+      </if>
+      <if test="lastmodifieddate != null">
+        lastmodifieddate = #{lastmodifieddate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="parentid != null">
+        parentid = #{parentid,jdbcType=INTEGER},
+      </if>
+    </set>
+    where id = #{id,jdbcType=INTEGER}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.PermissionInfo">
+    <!--          -->
+    update permission
+    set name = #{name,jdbcType=VARCHAR},
+      level = #{level,jdbcType=INTEGER},
+      title = #{title,jdbcType=VARCHAR},
+      path = #{path,jdbcType=VARCHAR},
+      component = #{component,jdbcType=VARCHAR},
+      icon = #{icon,jdbcType=VARCHAR},
+      buttonType = #{buttontype,jdbcType=VARCHAR},
+      status = #{status,jdbcType=INTEGER},
+      description = #{description,jdbcType=VARCHAR},
+      sortorder = #{sortorder,jdbcType=DOUBLE},
+      type = #{type,jdbcType=INTEGER},
+      expand = #{expand,jdbcType=BIT},
+      checked = #{checked,jdbcType=BIT},
+      selected = #{selected,jdbcType=BIT},
+      createdby = #{createdby,jdbcType=VARCHAR},
+      createddate = #{createddate,jdbcType=TIMESTAMP},
+      lastmodifiedby = #{lastmodifiedby,jdbcType=VARCHAR},
+      lastmodifieddate = #{lastmodifieddate,jdbcType=TIMESTAMP},
+      parentid = #{parentid,jdbcType=INTEGER}
+    where id = #{id,jdbcType=INTEGER}
+  </update>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/ProductCategoryMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/ProductCategoryMapper.xml
new file mode 100644
index 0000000..02a5910
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/ProductCategoryMapper.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.ProductCategoryMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.ProductCategory" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="type" property="type" jdbcType="TINYINT" />
+    <result column="code" property="code" jdbcType="VARCHAR" />
+    <result column="name" property="name" jdbcType="VARCHAR" />
+    <result column="parentname" property="parentname" jdbcType="VARCHAR" />
+    <result column="content" property="content" jdbcType="VARCHAR" />
+    <result column="remark" property="remark" jdbcType="VARCHAR" />
+    <result column="flag" property="flag" jdbcType="TINYINT" />
+    <result column="level" property="level" jdbcType="VARCHAR" />
+    <result column="bitcode" property="bitcode" jdbcType="VARCHAR" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, type, code, name, parentname, content, remark, flag, `level`
+  </sql>
+    <select id="countOne" resultType="java.lang.Integer">
+      select count(0)
+      from productcategory as pc1,productcategory as pc2
+      where pc1.name = pc2.parentname
+      and pc1.name = #{type}
+      and pc2.name = #{secondaryType}
+      and pc2.level like  concat("%",#{level},"%")
+    </select>
+
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/ProductCodeInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/ProductCodeInfoMapper.xml
new file mode 100644
index 0000000..4f9dc80
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/ProductCodeInfoMapper.xml
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.ProductCodeInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.ProductCodeInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="ordercode" property="ordercode" jdbcType="VARCHAR" />
+    <result column="originalcode" property="originalcode" jdbcType="VARCHAR" />
+    <result column="itemname" property="itemname" jdbcType="VARCHAR" />
+    <result column="manufacturer" property="manufacturer" jdbcType="VARCHAR" />
+    <result column="explosivecontent" property="explosivecontent" jdbcType="VARCHAR" />
+    <result column="boxnumber" property="boxnumber" jdbcType="INTEGER" />
+    <result column="type" property="type" jdbcType="VARCHAR" />
+    <result column="level" property="level" jdbcType="VARCHAR" />
+    <result column="createdby" property="createdby" jdbcType="VARCHAR" />
+    <result column="createddate" property="createddate" jdbcType="TIMESTAMP" />
+    <result column="price" property="price" jdbcType="DECIMAL" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, ordercode, originalcode, itemname, manufacturer, explosivecontent, boxnumber,
+    type, level,createdby, createddate,price
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select
+    <include refid="Base_Column_List" />
+    from productcode
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <select id="selectByFourteen" resultType="com.gk.firework.Domain.ProductCodeInfo">
+    select
+    <include refid="Base_Column_List" />
+    from productcode
+    where
+    originalcode like concat(#{fourteen},'%')
+    and createddate &gt;= #{date}
+    order by createddate desc
+    limit 1
+  </select>
+  <select id="selectByOrderCode" resultType="com.gk.firework.Domain.ProductCodeInfo">
+    select
+    <include refid="Base_Column_List" />
+    from productcode
+    where ordercode = #{ordercode}
+    and isdel = 0
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from productcode
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.gk.firework.Domain.ProductCodeInfo" >
+    <!--          -->
+    insert into productcode (id, ordercode, originalcode,
+      itemname, manufacturer, explosivecontent,
+      boxnumber,type, level, createdby, createddate,price,isdel
+      )
+    values (#{id,jdbcType=BIGINT}, #{ordercode,jdbcType=VARCHAR}, #{originalcode,jdbcType=VARCHAR},
+      #{itemname,jdbcType=VARCHAR}, #{manufacturer,jdbcType=VARCHAR}, #{explosivecontent,jdbcType=VARCHAR},
+      #{boxnumber,jdbcType=INTEGER}, #{type,jdbcType=VARCHAR},#{level,jdbcType=VARCHAR},
+    #{createdby,jdbcType=VARCHAR}, #{createddate,jdbcType=TIMESTAMP}, #{price,jdbcType=DECIMAL},0
+      )
+  </insert>
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.ProductCodeInfo">
+    <!--          -->
+    insert into productcode
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="ordercode != null" >
+        ordercode,
+      </if>
+      <if test="originalcode != null" >
+        originalcode,
+      </if>
+      <if test="itemname != null" >
+        itemname,
+      </if>
+      <if test="manufacturer != null" >
+        manufacturer,
+      </if>
+      <if test="explosivecontent != null" >
+        explosivecontent,
+      </if>
+      <if test="boxnumber != null" >
+        boxnumber,
+      </if>
+      <if test="type != null">
+        type,
+      </if>
+      <if test="level != null">
+        level,
+      </if>
+      <if test="createdby != null" >
+        createdby,
+      </if>
+      <if test="createddate != null" >
+        createddate,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="ordercode != null" >
+        #{ordercode,jdbcType=VARCHAR},
+      </if>
+      <if test="originalcode != null" >
+        #{originalcode,jdbcType=VARCHAR},
+      </if>
+      <if test="itemname != null" >
+        #{itemname,jdbcType=VARCHAR},
+      </if>
+      <if test="manufacturer != null" >
+        #{manufacturer,jdbcType=VARCHAR},
+      </if>
+      <if test="explosivecontent != null" >
+        #{explosivecontent,jdbcType=VARCHAR},
+      </if>
+      <if test="boxnumber != null" >
+        #{boxnumber,jdbcType=INTEGER},
+      </if>
+      <if test="type != null">
+        #{type,jdbcType=VARCHAR},
+      </if>
+      <if test="level != null">
+        #{level,jdbcType=VARCHAR},
+      </if>
+      <if test="createdby != null" >
+        #{createdby,jdbcType=VARCHAR},
+      </if>
+      <if test="createddate != null" >
+        #{createddate,jdbcType=TIMESTAMP},
+      </if>
+    </trim>
+  </insert>
+  <insert id="insertBatch" parameterType="java.util.List">
+    insert into productcode(id, ordercode, originalcode,
+      itemname, manufacturer, explosivecontent,
+      boxnumber,type, level, createdby,createddate,price,isdel
+      )
+    values
+    <foreach collection="list" item="item" index="index" separator=",">
+      (#{item.id,jdbcType=BIGINT}, #{item.ordercode,jdbcType=VARCHAR}, #{item.originalcode,jdbcType=VARCHAR},
+      #{item.itemname,jdbcType=VARCHAR}, #{item.manufacturer,jdbcType=VARCHAR}, #{item.explosivecontent,jdbcType=VARCHAR},
+      #{item.boxnumber,jdbcType=INTEGER}, #{item.type,jdbcType=VARCHAR},#{item.level,jdbcType=VARCHAR},
+      #{item.createdby,jdbcType=VARCHAR}, #{item.createddate,jdbcType=TIMESTAMP},
+      #{item.price,jdbcType=DECIMAL},0
+      )
+    </foreach>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.ProductCodeInfo" >
+    <!--          -->
+    update productcode
+    <set >
+      <if test="ordercode != null" >
+        ordercode = #{ordercode,jdbcType=VARCHAR},
+      </if>
+      <if test="originalcode != null" >
+        originalcode = #{originalcode,jdbcType=VARCHAR},
+      </if>
+      <if test="itemname != null" >
+        itemname = #{itemname,jdbcType=VARCHAR},
+      </if>
+      <if test="manufacturer != null" >
+        manufacturer = #{manufacturer,jdbcType=VARCHAR},
+      </if>
+      <if test="explosivecontent != null" >
+        explosivecontent = #{explosivecontent,jdbcType=VARCHAR},
+      </if>
+      <if test="boxnumber != null" >
+        boxnumber = #{boxnumber,jdbcType=INTEGER},
+      </if>
+      <if test="type != null">
+        type = #{type,jdbcType=VARCHAR},
+      </if>
+      <if test="level != null">
+        level = #{level,jdbcType=VARCHAR},
+      </if>
+      <if test="createdby != null" >
+        createdby = #{createdby,jdbcType=VARCHAR},
+      </if>
+      <if test="createddate != null" >
+        createddate = #{createddate,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.ProductCodeInfo" >
+    <!--          -->
+    update productcode
+    set ordercode = #{ordercode,jdbcType=VARCHAR},
+      originalcode = #{originalcode,jdbcType=VARCHAR},
+      itemname = #{itemname,jdbcType=VARCHAR},
+      manufacturer = #{manufacturer,jdbcType=VARCHAR},
+      explosivecontent = #{explosivecontent,jdbcType=VARCHAR},
+      boxnumber = #{boxnumber,jdbcType=INTEGER},
+      type = #{type,jdbcType=VARCHAR},
+      level = #{level,jdbcType=VARCHAR},
+      createdby = #{createdby,jdbcType=VARCHAR},
+      createddate = #{createddate,jdbcType=TIMESTAMP}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/ProductInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/ProductInfoMapper.xml
new file mode 100644
index 0000000..fa78012
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/ProductInfoMapper.xml
@@ -0,0 +1,287 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.ProductInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.ProductInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="name" property="name" jdbcType="VARCHAR" />
+    <result column="directioncode" property="directionCode" jdbcType="VARCHAR" />
+    <result column="purchaseprice" property="purchasePrice" jdbcType="DECIMAL" />
+    <result column="saleprice" property="salePrice" jdbcType="DECIMAL" />
+    <result column="manufacturer" property="manufacturer" jdbcType="VARCHAR" />
+    <result column="specification" property="specification" jdbcType="VARCHAR" />
+    <result column="explosivecontent" property="explosiveContent" jdbcType="DECIMAL" />
+    <result column="type" property="type" jdbcType="VARCHAR" />
+    <result column="secondarytype" property="secondaryType" jdbcType="VARCHAR" />
+    <result column="level" property="level" jdbcType="VARCHAR" />
+    <result column="productdate" property="productDate" jdbcType="TIMESTAMP" />
+    <result column="boxnumber" property="boxNumber" jdbcType="INTEGER" />
+    <result column="packing" property="packing" jdbcType="VARCHAR" />
+    <result column="companynumber" property="companyNumber" jdbcType="VARCHAR" />
+    <result column="isdel" property="isDel" jdbcType="TINYINT" />
+    <result column="isold" property="isOld" jdbcType="TINYINT" />
+  </resultMap>
+  <resultMap id="ProductVoResultMap" type="com.gk.firework.Domain.Vo.ProductVo"/>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, name, directioncode, purchaseprice, saleprice, manufacturer, specification, explosivecontent,
+    type, secondarytype, level, productdate, boxnumber, packing,companynumber, isold
+  </sql>
+    <update id="deleteByEnterpriseName" parameterType="java.lang.String">
+    update product
+    set
+    isdel = 1,
+    modifiedby = #{name},
+    modifieddate = now()
+    where manufacturer = #{enterpriseName}
+    </update>
+
+    <select id="selectProductInfos" resultMap="BaseResultMap">
+    select
+    <include refid="Base_Column_List"/>
+    from
+    product
+    <where>
+      1=1
+      and isdel = 0
+      <if test="name != null and name != ''">
+        and `name` like concat('%',#{name},'%')
+      </if>
+
+      <if test="directionCode != null and directionCode != ''">
+        and directioncode like concat('%',#{directionCode},'%')
+      </if>
+
+      <if test="manufacturer != null and manufacturer != ''">
+        and manufacturer like concat('%',#{manufacturer},'%')
+      </if>
+      <if test="type != null and type != ''">
+        and `type` = #{condition.type}
+      </if>
+      <if test="secondaryType != null and secondaryType != ''">
+        and `secondarytype` = #{condition.secondaryType}
+      </if>
+    </where>
+  </select>
+
+  <select id="selectProductDataGrid" resultMap="BaseResultMap">
+    select
+    product.id,
+    product.NAME,
+    product.directioncode,
+    product.purchaseprice,
+    <if test="condition.companynumber != null and condition.companynumber !=''">
+      IFNULL(productprice.price,0) as saleprice,
+    </if>
+    product.manufacturer,
+    product.specification,
+    product.explosivecontent,
+    product.type,
+    product.secondarytype,
+    product.LEVEL,
+    product.productdate,
+    product.boxnumber,
+    product.packing,
+    product.companynumber
+    from
+    product
+    <if test="condition.companynumber != null and condition.companynumber !=''">
+      LEFT JOIN productprice ON productprice.companynumber = #{condition.companynumber}
+      AND productprice.itemcode = product.directioncode
+    </if>
+    <where>
+      1=1
+      and isdel = 0
+      <if test="condition.name != null and condition.name != ''">
+        and `name` like concat('%',#{condition.name},'%')
+      </if>
+
+      <if test="condition.directionCode != null and condition.directionCode != ''">
+        and directioncode like concat('%',#{condition.directionCode},'%')
+      </if>
+
+      <if test="condition.manufacturer != null and condition.manufacturer != ''">
+        and manufacturer like concat('%',#{condition.manufacturer},'%')
+      </if>
+
+      <if test="condition.type != null and condition.type != ''">
+        and `type` = #{condition.type}
+      </if>
+      <if test="condition.secondaryType != null and condition.secondaryType != ''">
+        and secondarytype = #{condition.secondaryType}
+      </if>
+      <if test="condition.isOld != null and condition.isOld != ''">
+        and isold = #{condition.isOld}
+      </if>
+    </where>
+  </select>
+
+  <select id="selectProductsByDirectionCode" resultMap="BaseResultMap">
+    select
+    product.id,
+    product.NAME,
+    product.directioncode,
+    product.purchaseprice,
+    <if test="companyNumber != null and companyNumber !=''">
+      IFNULL(productprice.price,0) as saleprice,
+    </if>
+    product.manufacturer,
+    product.specification,
+    product.explosivecontent,
+    product.type,
+    product.secondarytype,
+    product.LEVEL,
+    product.productdate,
+    product.boxnumber,
+    product.packing,
+    product.companynumber
+    from product
+    <if test="companyNumber != null and companyNumber !=''">
+      LEFT JOIN productprice ON productprice.companynumber = #{companyNumber}
+      AND productprice.itemcode = product.directioncode
+    </if>
+    <where>
+      directioncode = '${directionCode}'
+      and isdel = 0
+    </where>
+  </select>
+
+  <select id="selectProductByDirectionCode" resultMap="BaseResultMap">
+    select
+    <include refid="Base_Column_List"/>
+    from product
+    <where>
+      directioncode = '${directionCode}'
+      and isdel = 0
+    </where>
+    limit 1
+  </select>
+  <select id="selectProductVoByDirectionCode" resultMap="ProductVoResultMap">
+    select
+    <include refid="Base_Column_List"/>
+    from product
+    <where>
+      directioncode = '${directionCode}'
+      and isdel = 0
+    </where>
+  </select>
+  <select id="getSliceByDirectionCode" resultType="integer">
+    select
+    divideflag
+    from enterprise
+    left join product
+    on product.companynumber = enterprise.enterprisenumber
+    <where>
+      product.isdel = 0
+      and product.`directioncode` = #{directionCode}
+    </where>
+  </select>
+  <select id="selectProductInfo" resultType="com.gk.firework.Domain.ProductInfo">
+    select
+    product.id,
+    product.NAME,
+    product.directioncode,
+    product.purchaseprice,
+    <if test="companynumber != null and companynumber !=''">
+      IFNULL(productprice.price,0) as saleprice,
+    </if>
+    product.manufacturer,
+    product.specification,
+    product.explosivecontent,
+    product.type,
+    product.secondarytype,
+    product.LEVEL,
+    product.productdate,
+    product.boxnumber,
+    product.packing,
+    product.companynumber
+    from
+    product
+    <if test="companynumber != null and companynumber !=''">
+      LEFT JOIN productprice ON productprice.companynumber = #{companynumber}
+      AND productprice.itemcode = product.directioncode
+    </if>
+    <where>
+      1=1
+      and isdel = 0
+      <if test="name != null and name != ''">
+        and `name` like concat('%',#{name},'%')
+      </if>
+
+      <if test="directionCode != null and directionCode != ''">
+        and directioncode like concat('%',#{directionCode},'%')
+      </if>
+
+      <if test="manufacturer != null and manufacturer != ''">
+        and manufacturer like concat('%',#{manufacturer},'%')
+      </if>
+
+      <if test="type != null and type != ''">
+        and `type` = #{type}
+      </if>
+      <if test="secondaryType != null and secondaryType != ''">
+        and secondarytype = #{secondaryType}
+      </if>
+    </where>
+  </select>
+
+  <select id="getAllProductCodes" resultType="string">
+    select
+    directioncode
+    from product
+    <where>
+      isdel = 0
+    </where>
+  </select>
+    <select id="selectTypes" resultType="java.lang.String">
+      select type
+      from product
+      where type is not null
+      group by type
+    </select>
+  <select id="selectDoByDirections" resultType="com.gk.firework.Domain.DO.ProductDO">
+
+  select
+  product.id,
+  product.name,
+  product.directioncode,
+  product.purchaseprice,
+  product.saleprice,
+  product.manufacturer,
+  product.specification,
+  product.explosivecontent,
+  product.type,
+  product.saleprice,
+  product.manufacturer,
+  product.specification,
+  product.explosivecontent,
+  product.secondarytype,
+  product.level,
+  product.productdate,
+  product.boxnumber,
+  product.packing,
+  product.isdel,
+  product.createdby,
+  product.modifiedby,
+  product.createddate,
+  product.modifieddate,
+  product.companynumber,
+  product.isold,
+  concat('_slice',enterprise.divideflag) slice
+  from enterprise as enterprise
+  inner join product as product
+  on product.companynumber = enterprise.enterprisenumber
+  where
+  product.isdel = 0
+  and product.`directioncode`
+  in
+  <foreach collection="list" item="item" open="(" close=")">
+        #{item}
+  </foreach>
+
+
+
+
+
+  </select>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/ProductLocusInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/ProductLocusInfoMapper.xml
new file mode 100644
index 0000000..ab9da00
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/ProductLocusInfoMapper.xml
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.ProductLocusInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.ProductLocusInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="directioncode" property="directioncode" jdbcType="VARCHAR" />
+    <result column="createddate" property="createddate" jdbcType="TIMESTAMP" />
+    <result column="modifieddate" property="modifieddate" jdbcType="TIMESTAMP" />
+    <result column="content" property="content" jdbcType="VARCHAR" />
+    <result column="customerid" property="customerid" jdbcType="BIGINT" />
+    <result column="type" property="type" jdbcType="TINYINT" />
+    <result column="boxcode" property="boxcode" jdbcType="VARCHAR" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, directioncode, createddate, modifieddate, content, customerid, type, boxcode
+  </sql>
+
+  <insert id="insertProductLocus"  >
+    insert into productlocus${slice}
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="productLocusInfo.id != null" >
+        id,
+      </if>
+      <if test="productLocusInfo.directioncode != null" >
+        directioncode,
+      </if>
+      <if test="productLocusInfo.createddate != null" >
+        createddate,
+      </if>
+      <if test="productLocusInfo.modifieddate != null" >
+        modifieddate,
+      </if>
+      <if test="productLocusInfo.content != null" >
+        content,
+      </if>
+      <if test="productLocusInfo.customerid != null" >
+        customerid,
+      </if>
+      <if test="productLocusInfo.type != null" >
+        `type`,
+      </if>
+      <if test="productLocusInfo.boxcode != null" >
+        `boxcode`,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="productLocusInfo.id != null" >
+        #{productLocusInfo.id,jdbcType=BIGINT},
+      </if>
+      <if test="productLocusInfo.directioncode != null" >
+        #{productLocusInfo.directioncode,jdbcType=VARCHAR},
+      </if>
+      <if test="productLocusInfo.createddate != null" >
+        #{productLocusInfo.createddate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="productLocusInfo.modifieddate != null" >
+        #{productLocusInfo.modifieddate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="productLocusInfo.content != null" >
+        #{productLocusInfo.content,jdbcType=VARCHAR},
+      </if>
+      <if test="productLocusInfo.customerid != null" >
+        #{productLocusInfo.customerid,jdbcType=BIGINT},
+      </if>
+      <if test="productLocusInfo.type != null" >
+        #{productLocusInfo.type,jdbcType=TINYINT},
+      </if>
+      <if test="productLocusInfo.boxcode != null" >
+        #{productLocusInfo.boxcode,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+    <insert id="insertBatch">
+
+        <foreach collection="list" item="item" separator=";">
+            insert into
+            productlocus${item.slice}
+            <trim prefix="(" suffix=") values" suffixOverrides=",">
+              directioncode,
+              createddate,
+              modifieddate,
+              content,
+              customerid,
+              `type`,
+              `boxcode`,
+            </trim>
+            <trim prefix="(" suffix=")" suffixOverrides=",">
+                #{item.directioncode},
+                #{item.createddate},
+                #{item.modifieddate},
+                #{item.content},
+                #{item.customerid},
+                #{item.type},
+                #{item.boxcode},
+
+            </trim>
+
+        </foreach>
+
+    </insert>
+    <select id="selectLists" resultType="com.gk.firework.Domain.Vo.ProductLocusVo">
+      select
+      pl.id,
+      pl.directioncode,
+      pl.modifieddate,
+      pl.createddate,
+      pl.content,
+      pl.type,
+      case pl.type when 1 then '入库' when 2 then '退货入库'  when 3 then '出库' when 4 then '销售' when 5 then '退库'
+      when 6 then '生成电子标签' when 7 then '补打' when 8 then '电子标签回退'
+      end typename,
+      pl.boxcode,
+      cu.idcardnum ,
+      INSERT ( cu.idcardnum, 7, 6, '******' ) idCardNumber
+      from productlocus${slice} as pl
+      left join customer as cu on cu.id = pl.customerid
+      where pl.directioncode = #{directionCode}
+    </select>
+  <select id="selectFlowByCodes" resultType="com.gk.firework.Domain.Vo.ProductLocusVo">
+      select
+      pl.id,
+      pl.directioncode,
+      pl.modifieddate,
+      pl.createddate,
+      pl.content,
+      pl.type,
+      pl.customerid,
+      case pl.type when 1 then '入库' when 2 then '退货入库'  when 3 then '出库' when 4 then '销售' when 5 then '退库'
+      when 6 then '生成电子标签' when 7 then '补打' when 8 then '电子标签回退'
+      end typename,
+      pl.boxcode,
+      cu.idcardnum ,
+      INSERT ( cu.idcardnum, 7, 6, '******' ) idCardNumber
+      from productlocus${slice} as pl
+      left join customer as cu on cu.id = pl.customerid
+      where directioncode in
+      <foreach collection="codes" index="index" item="item" open="("
+               separator="," close=")">
+        #{item}
+      </foreach>
+  </select>
+
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/ProductPriceInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/ProductPriceInfoMapper.xml
new file mode 100644
index 0000000..cdf4f3b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/ProductPriceInfoMapper.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.ProductPriceInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.ProductPriceInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="companynumber" property="companynumber" jdbcType="VARCHAR" />
+    <result column="itemcode" property="itemcode" jdbcType="VARCHAR" />
+    <result column="price" property="price" jdbcType="DECIMAL" />
+    <result column="updated" property="updated" jdbcType="TIMESTAMP" />
+    <result column="updator" property="updator" jdbcType="VARCHAR" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, companynumber, itemcode, price, updated, updator
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select
+    <include refid="Base_Column_List" />
+    from productprice
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <select id="selectByCode" resultType="com.gk.firework.Domain.ProductPriceInfo">
+    select
+      *
+    from productprice
+    where companynumber = #{companynumber}
+    and itemcode = #{directionCode}
+  </select>
+  <select id="selectByCodes" resultType="com.gk.firework.Domain.ProductPriceInfo">
+    select
+    *
+    from productprice
+    where companynumber = #{companynumber}
+    and itemcode in
+    <foreach collection="list" item="item" open="(" close=")">
+      #{item}
+    </foreach>
+
+
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from productprice
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.ProductPriceInfo" >
+    <!--          -->
+    update productprice
+    <set >
+      <if test="companynumber != null" >
+        companynumber = #{companynumber,jdbcType=VARCHAR},
+      </if>
+      <if test="itemcode != null" >
+        itemcode = #{itemcode,jdbcType=VARCHAR},
+      </if>
+      <if test="price != null" >
+        price = #{price,jdbcType=DECIMAL},
+      </if>
+      <if test="updated != null" >
+        updated = #{updated,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updator != null" >
+        updator = #{updator,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.ProductPriceInfo" >
+    <!--          -->
+    update productprice
+    set companynumber = #{companynumber,jdbcType=VARCHAR},
+      itemcode = #{itemcode,jdbcType=VARCHAR},
+      price = #{price,jdbcType=DECIMAL},
+      updated = #{updated,jdbcType=TIMESTAMP},
+      updator = #{updator,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/ProductThresholdInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/ProductThresholdInfoMapper.xml
new file mode 100644
index 0000000..dc4628b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/ProductThresholdInfoMapper.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.ProductThresholdInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.ProductThresholdInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="productid" property="productid" jdbcType="BIGINT" />
+    <result column="itemcode" property="itemcode" jdbcType="VARCHAR" />
+    <result column="explosivecontent" property="explosivecontent" jdbcType="DECIMAL" />
+    <result column="level" property="level" jdbcType="VARCHAR" />
+    <result column="boxnumber" property="boxnumber" jdbcType="INTEGER" />
+    <result column="createdby" property="createdby" jdbcType="VARCHAR" />
+    <result column="createdat" property="createdat" jdbcType="TIMESTAMP" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, productid, itemcode, explosivecontent, level, boxnumber, createdby, createdat
+  </sql>
+
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/RegisterInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/RegisterInfoMapper.xml
new file mode 100644
index 0000000..90afa34
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/RegisterInfoMapper.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.RegisterInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.RegisterInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="enterprisename" property="enterprisename" jdbcType="VARCHAR" />
+    <result column="enterprisenumber" property="enterprisenumber" jdbcType="VARCHAR" />
+    <result column="password" property="password" jdbcType="VARCHAR" />
+    <result column="type" property="type" jdbcType="VARCHAR" />
+    <result column="businessrange" property="businessrange" jdbcType="VARCHAR" />
+    <result column="licensestart" property="licensestart" jdbcType="DATE" />
+    <result column="licenseend" property="licenseend" jdbcType="DATE" />
+    <result column="legalperson" property="legalperson" jdbcType="VARCHAR" />
+    <result column="legalpersonphone" property="legalpersonphone" jdbcType="VARCHAR" />
+    <result column="createdby" property="createdby" jdbcType="VARCHAR" />
+    <result column="createdat" property="createdat" jdbcType="TIMESTAMP" />
+    <result column="flag" property="flag" jdbcType="TINYINT" />
+    <result column="isdel" property="isdel" jdbcType="TINYINT" />
+    <result column="remark" property="remark" jdbcType="VARCHAR" />
+    <result column="issms" property="issms" jdbcType="TINYINT" />
+    <result column="smstimes" property="smstimes" jdbcType="INTEGER" />
+    <result column="smsat" property="smsat" jdbcType="TIMESTAMP" />
+    <result column="reviewer" property="reviewer" jdbcType="VARCHAR" />
+    <result column="reviewresult" property="reviewresult" jdbcType="TINYINT" />
+    <result column="reviewat" property="reviewat" jdbcType="TIMESTAMP" />
+    <result column="reviewcontent" property="reviewcontent" jdbcType="VARCHAR" />
+    <result column="isagreement" property="isagreement" jdbcType="TINYINT" />
+    <result column="province" property="province" jdbcType="VARCHAR" />
+    <result column="city" property="city" jdbcType="VARCHAR" />
+    <result column="district" property="district" jdbcType="VARCHAR" />
+    <result column="street" property="street" jdbcType="VARCHAR" />
+    <result column="committee" property="committee" jdbcType="VARCHAR" />
+    <result column="address" property="address" jdbcType="VARCHAR" />
+    <result column="legalpersonstart" property="legalpersonstart" jdbcType="DATE" />
+    <result column="legalpersonend" property="legalpersonend" jdbcType="DATE" />
+    <result column="qualificationstart" property="qualificationstart" jdbcType="DATE" />
+    <result column="qualificationend" property="qualificationend" jdbcType="DATE" />
+    <result column="escortstart" property="escortstart" jdbcType="DATE" />
+    <result column="escortend" property="escortend" jdbcType="DATE" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, enterprisename, enterprisenumber, password, type, businessrange, licensestart, 
+    licenseend, legalperson, legalpersonphone, createdby, createdat, flag, isdel, remark, 
+    issms, smstimes, smsat, reviewer, reviewresult, reviewat, reviewcontent, isagreement,
+    province, city, district, street, committee, address, legalpersonstart, legalpersonend,
+    qualificationstart, qualificationend, escortstart, escortend
+  </sql>
+  <select id="selectDataGrid" resultType="com.gk.firework.Domain.Vo.RegisterVo">
+    SELECT
+    <include refid="Base_Column_List"/>
+    FROM
+    register
+    <where>
+      1=1
+      and isdel = 0
+      <if test="condition.name != null and condition.name != ''">
+        and enterprisename like concat('%',#{condition.name},'%')
+      </if>
+
+      <if test="condition.type != null and condition.type != ''">
+        and `type` = #{condition.type}
+      </if>
+      <if test="condition.reviewResult != null and condition.reviewResult != ''">
+        and reviewresult = #{condition.reviewResult}
+      </if>
+    </where>
+  </select>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/RoleInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/RoleInfoMapper.xml
new file mode 100644
index 0000000..e48e9bf
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/RoleInfoMapper.xml
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.RoleInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.RoleInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="name" property="name" jdbcType="VARCHAR" />
+    <result column="createdby" property="createdby" jdbcType="VARCHAR" />
+    <result column="createddate" property="createddate" jdbcType="TIMESTAMP" />
+    <result column="lastmodifiedby" property="lastmodifiedby" jdbcType="VARCHAR" />
+    <result column="lastmodifieddate" property="lastmodifieddate" jdbcType="TIMESTAMP" />
+    <result column="description" property="description" jdbcType="VARCHAR" />
+    <result column="code" property="code" jdbcType="VARCHAR" />
+    <result column="btnaccess" property="btnaccess" jdbcType="VARCHAR" />
+    <result column="isdel" property="isdel" jdbcType="TINYINT" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, name, createdby, createddate, lastmodifiedby, lastmodifieddate, description,
+    code, btnaccess,isdel
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select
+    <include refid="Base_Column_List" />
+    from role
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <select id="selectRoleByUser" resultType="com.gk.firework.Domain.RoleInfo">
+    SELECT
+    role.id,
+    role.`name`
+    from role
+    LEFT JOIN userroles on userroles.roleid = role.id
+    where
+    userroles.userid = #{id,jdbcType=BIGINT}
+  </select>
+  <select id="selectList" resultType="com.gk.firework.Domain.RoleInfo">
+    select
+    <include refid="Base_Column_List" />
+    from role
+    <where>
+        1=1
+        and isdel = 0
+      <if test="name != null and name !=''">
+       and name = #{name}
+      </if>
+    </where>
+  </select>
+  <select id="selectExistRole" resultType="com.gk.firework.Domain.RoleInfo">
+    select
+    <include refid="Base_Column_List" />
+    from role
+    <where>
+      1=1
+      <if test="name != null and name !=''">
+        and name = #{name}
+      </if>
+      <if test="id != null">
+        and id != #{id}
+      </if>
+    </where>
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from role
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.RoleInfo" >
+    <!--          -->
+    update role
+    <set >
+      <if test="name != null" >
+        name = #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="createdby != null" >
+        createdby = #{createdby,jdbcType=VARCHAR},
+      </if>
+      <if test="createddate != null" >
+        createddate = #{createddate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="lastmodifiedby != null" >
+        lastmodifiedby = #{lastmodifiedby,jdbcType=VARCHAR},
+      </if>
+      <if test="lastmodifieddate != null" >
+        lastmodifieddate = #{lastmodifieddate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="description != null" >
+        description = #{description,jdbcType=VARCHAR},
+      </if>
+      <if test="code != null" >
+        code = #{code,jdbcType=VARCHAR},
+      </if>
+      <if test="btnaccess != null" >
+        btnaccess = #{btnaccess,jdbcType=VARCHAR},
+      </if>
+      <if test="isdel != null">
+        isdel = #{isdel,jdbcType=TINYINT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.RoleInfo" >
+    <!--          -->
+    update role
+    set name = #{name,jdbcType=VARCHAR},
+      createdby = #{createdby,jdbcType=VARCHAR},
+      createddate = #{createddate,jdbcType=TIMESTAMP},
+      lastmodifiedby = #{lastmodifiedby,jdbcType=VARCHAR},
+      lastmodifieddate = #{lastmodifieddate,jdbcType=TIMESTAMP},
+      description = #{description,jdbcType=VARCHAR},
+      code = #{code,jdbcType=VARCHAR},
+      btnaccess = #{btnaccess,jdbcType=VARCHAR},
+      isdel = #{isdel,jdbcType=TINYINT},
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/RolePermissionsInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/RolePermissionsInfoMapper.xml
new file mode 100644
index 0000000..d90da61
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/RolePermissionsInfoMapper.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.RolePermissionsInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.RolePermissionsInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="roleid" property="roleid" jdbcType="BIGINT" />
+    <result column="permissionid" property="permissionid" jdbcType="BIGINT" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, roleid, permissionid
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select
+    <include refid="Base_Column_List" />
+    from rolepermissions
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <select id="selectMenuList" resultType="com.gk.firework.Domain.Vo.Menu">
+    select permissionid as id
+    from  rolepermissions
+    where roleid = #{roleId,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from rolepermissions
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <delete id="delRolePermissionByRoleId">
+    delete from rolepermissions
+    where roleid = #{roleid,jdbcType=BIGINT}
+  </delete>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.RolePermissionsInfo" >
+    <!--          -->
+    update rolepermissions
+    <set >
+      <if test="roleid != null" >
+        roleid = #{roleid,jdbcType=BIGINT},
+      </if>
+      <if test="permissionid != null" >
+        permissionid = #{permissionid,jdbcType=BIGINT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.RolePermissionsInfo" >
+    <!--          -->
+    update rolepermissions
+    set roleid = #{roleid,jdbcType=BIGINT},
+      permissionid = #{permissionid,jdbcType=BIGINT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/SaleOrderDetailInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/SaleOrderDetailInfoMapper.xml
new file mode 100644
index 0000000..7a71a74
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/SaleOrderDetailInfoMapper.xml
@@ -0,0 +1,1533 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.SaleOrderDetailInfoMapper">
+    <resultMap id="BaseResultMap" type="com.gk.firework.Domain.SaleOrderDetailInfo">
+        <!--          -->
+        <id column="id" property="id" jdbcType="BIGINT"/>
+        <result column="ordercode" property="ordercode" jdbcType="VARCHAR"/>
+        <result column="itemcode" property="itemcode" jdbcType="VARCHAR"/>
+        <result column="itemname" property="itemname" jdbcType="VARCHAR"/>
+        <result column="directioncode" property="directioncode" jdbcType="VARCHAR"/>
+        <result column="createdat" property="createdat" jdbcType="TIMESTAMP"/>
+        <result column="createdby" property="createdby" jdbcType="VARCHAR"/>
+        <result column="price" property="price" jdbcType="DECIMAL"/>
+        <result column="specification" property="specification" jdbcType="VARCHAR"/>
+    </resultMap>
+
+    <resultMap id="SaleDetailVo" type="com.gk.firework.Domain.Vo.SaleDetailVo">
+        <!--          -->
+        <id column="id" property="id" jdbcType="BIGINT"/>
+        <result column="ordercode" property="ordercode" jdbcType="VARCHAR"/>
+        <result column="itemcode" property="itemcode" jdbcType="VARCHAR"/>
+        <result column="itemname" property="itemname" jdbcType="VARCHAR"/>
+        <result column="directioncode" property="directioncode" jdbcType="VARCHAR"/>
+        <result column="createdat" property="createdat" jdbcType="TIMESTAMP"/>
+        <result column="createdby" property="createdby" jdbcType="VARCHAR"/>
+        <result column="price" property="price" jdbcType="DECIMAL"/>
+        <result column="specification" property="specification" jdbcType="VARCHAR"/>
+        <result column="returnflag" property="returnflag" jdbcType="TINYINT"/>
+        <association property="product" javaType="com.gk.firework.Domain.ProductInfo">
+            <id column="id" property="id" jdbcType="BIGINT" />
+            <result column="name" property="name" jdbcType="VARCHAR" />
+            <result column="directioncode" property="directionCode" jdbcType="VARCHAR" />
+            <result column="purchaseprice" property="purchasePrice" jdbcType="DECIMAL" />
+            <result column="saleprice" property="salePrice" jdbcType="DECIMAL" />
+            <result column="manufacturer" property="manufacturer" jdbcType="VARCHAR" />
+            <result column="specification" property="specification" jdbcType="VARCHAR" />
+            <result column="explosivecontent" property="explosiveContent" jdbcType="DECIMAL" />
+            <result column="type" property="type" jdbcType="VARCHAR" />
+            <result column="secondarytype" property="secondaryType" jdbcType="VARCHAR" />
+            <result column="level" property="level" jdbcType="VARCHAR" />
+            <result column="productdate" property="productDate" jdbcType="TIMESTAMP" />
+            <result column="boxnumber" property="boxNumber" jdbcType="INTEGER" />
+            <result column="packing" property="packing" jdbcType="VARCHAR" />
+            <result column="companynumber" property="companyNumber" jdbcType="VARCHAR" />
+        </association>
+        <association property="saleOrderInfo" javaType="com.gk.firework.Domain.SaleOrderInfo">
+            <id column="id" property="id" jdbcType="BIGINT"/>
+            <result column="code" property="code" jdbcType="VARCHAR"/>
+            <result column="createdat" property="createdat" jdbcType="TIMESTAMP"/>
+            <result column="createdby" property="createdby" jdbcType="VARCHAR"/>
+            <result column="customer" property="customer" jdbcType="BIGINT"/>
+            <result column="idcardnum" property="idcardnum" jdbcType="VARCHAR"/>
+            <result column="salesperson" property="salesperson" jdbcType="VARCHAR"/>
+            <result column="shop" property="shop" jdbcType="VARCHAR"/>
+            <result column="boxnum" property="boxnum" jdbcType="DECIMAL"/>
+            <result column="totalprice" property="totalprice" jdbcType="DECIMAL"/>
+            <result column="pay" property="pay" jdbcType="DECIMAL"/>
+            <result column="change" property="change" jdbcType="DECIMAL"/>
+            <result column="type" property="type" jdbcType="TINYINT"/>
+            <result column="returnflag" property="returnflag" jdbcType="TINYINT"/>
+        </association>
+    </resultMap>
+    <sql id="Base_Column_List">
+        <!--          -->
+        id, ordercode, itemcode, itemname, directioncode, createdat, createdby, price, specification, returnflag
+    </sql>
+    <insert id="saveBatchOrderDetailInfo">
+
+        insert
+        into saleorderdetail
+        <trim prefix="(" suffix=") values" suffixOverrides=",">
+           ordercode,
+           itemcode,
+           itemname,
+           directioncode,
+           createdat,
+           createdby,
+           price,
+           specification,
+           returnflag,
+        </trim>
+        <foreach collection="list" item="item" separator=",">
+            <trim prefix="(" suffix=")" suffixOverrides=",">
+                #{item.ordercode},
+                #{item.itemcode},
+                #{item.itemname},
+                #{item.directioncode},
+                #{item.createdat},
+                #{item.createdby},
+                #{item.price},
+                #{item.specification},
+                #{item.returnflag},
+            </trim>
+        </foreach>
+
+
+    </insert>
+
+    <select id="selectDetailByIdCardNum" resultMap="BaseResultMap">
+        select
+        detail.directioncode,
+        detail.itemname,
+        saleorder.createdat,
+        detail.price,
+        detail.specification,
+        customer.idcardnum
+        from saleorderdetail as detail
+        left join saleorder as saleorder on saleorder.`code` = detail.ordercode
+        LEFT JOIN customer as customer ON saleorder.customer = customer.id
+        <where>
+            customer.idcardnum = #{idCardNum}
+        </where>
+    </select>
+    <select id="selectDetailByIdCardNumAndDire" resultMap="BaseResultMap">
+        select
+        detail.directioncode,
+        detail.itemname,
+        saleorder.createdat,
+        detail.price,
+        detail.specification,
+        customer.idcardnum
+        from saleorderdetail as detail
+        left join saleorder as saleorder on saleorder.`code` = detail.ordercode
+        LEFT JOIN customer as customer ON saleorder.customer = customer.id
+        <where>
+            customer.idcardnum = #{idCardNum}
+            and detail.returnflag = 0
+            <if test="directionCode != null and directionCode != ''">
+                and detail.directioncode = #{directionCode}
+            </if>
+        </where>
+    </select>
+
+    <select id="selectOrderByDirectionAndCustomer" resultMap="BaseResultMap">
+        select
+        detail.id,
+        detail.ordercode,
+        detail.itemcode,
+        detail.itemname,
+        detail.directioncode,
+        detail.createdat,
+        detail.createdby,
+        detail.price,
+        detail.specification,
+        detail.returnflag
+        from saleorder as saleorder
+        left join saleorderdetail as detail on detail.ordercode = saleorder.code
+        <where>
+            detail.directioncode = #{directionCode}
+            and customer = #{customer}
+        </where>
+
+    </select>
+    <select id="selectDetailDataGridByIdCardNum" resultMap="BaseResultMap">
+        select
+        detail.directioncode,
+        detail.itemname,
+        saleorder.createdat,
+        detail.price,
+        detail.specification,
+        customer.idcardnum
+        from saleorderdetail as detail
+        left join saleorder as saleorder on saleorder.`code` = detail.ordercode
+        LEFT JOIN customer as customer ON saleorder.customer = customer.id
+        <where>
+            customer.idcardnum = #{condition.idCardNum}
+            and detail.returnflag = 0
+            <if test="condition.directionCode != null and condition.directionCode != ''">
+                and detail.directioncode = #{condition.directionCode}
+            </if>
+        </where>
+    </select>
+    <select id="selectByCustomId" resultType="com.gk.firework.Domain.Vo.SaleDetailVo">
+        select
+        detail.directioncode,
+        detail.itemname,
+        detail.createdat,
+        detail.price,
+        detail.specification,
+        detail.createdby,
+        saleorder.shop
+        from saleorderdetail as detail
+        left join saleorder as saleorder on saleorder.`code` = detail.ordercode
+        LEFT JOIN customer as customer ON saleorder.customer = customer.id
+        <where>
+            1=1
+            <if test="condition.customid != null">
+                and saleorder.customer = #{condition.customid}
+            </if>
+            <if test="condition.starttime != null">
+                and detail.createdat &gt;= #{condition.starttime}
+            </if>
+            <if test="condition.endtime != null">
+                and detail.createdat &lt;= #{condition.endtime}
+            </if>
+        </where>
+    </select>
+
+    <select id="getSaleNumByCondition" resultType="decimal">
+        select sum(num) from (
+        select
+        (count(1)/product.boxnumber)as num
+        from
+        saleorderdetail as detail
+        left join saleorder as sale on sale.`code` = detail.ordercode
+        left join product on detail.itemcode = product.directioncode and product.isdel = 0
+        <where>
+            sale.createdat &gt;= #{condition.beginDate}
+            and sale.createdat &lt;= #{condition.endDate}
+            and sale.companynumber = #{condition.companyNumber}
+            <if test="condition.itemCode != null">
+                and product.directioncode = #{condition.itemCode}
+            </if>
+        </where>
+        group by sale.companynumber,
+                 product.directioncode
+        )temp
+    </select>
+
+    <select id="getSaleDataInDays" resultType="java.util.Map">
+
+        select
+        days.day,
+        ifnull(info.salenum,0) salenum
+        from
+        <foreach collection="days" item="item" open="(" close=")" separator="union all">
+            SELECT date_sub(curdate(), interval #{item} day) as day
+        </foreach>
+        as days
+        left join (
+            select
+            date_format(detail.createdat,"%Y-%m-%d") saledate,
+            count(0) salenum
+            from
+            saleorderdetail as detail
+            <where>
+                <if test="starttime !=null">
+                   and  detail.createdat &gt; #{starttime}
+                </if>
+                <if test="endtime !=null">
+                   and  detail.createdat &lt; #{endtime}
+                </if>
+            </where>
+            group by DATE_FORMAT(detail.createdat,"%Y-%m-%d")
+        ) as info on info.saledate = days.day
+        order by days.day
+    </select>
+
+    <select id="getSaleDataAreaInDays" resultType="java.util.Map">
+        select
+        count(0) salenum,
+        e.city
+        from saleorder as saleorder
+        LEFT JOIN saleorderdetail as detail on detail.ordercode = saleorder.code
+        left join enterprise as e on e.enterprisenumber = saleorder.companynumber and e.validflag =1
+        <where>
+            e.province = #{params.province}
+            <if test="starttime !=null">
+                and  detail.createdat &gt; #{starttime}
+            </if>
+            <if test="endtime !=null">
+                and  detail.createdat &lt; #{endtime}
+            </if>
+        </where>
+        group by e.city
+
+    </select>
+    <select id="getSaleDataProductTypeInDays" resultType="java.util.Map">
+        select
+        count(0) salenum,
+        product.type producttype
+        from saleorderdetail as detail
+        left join product as product on product.directioncode = detail.itemcode and  product.isdel = 0
+        <if test="starttime !=null">
+            and  detail.createdat &gt; #{starttime}
+        </if>
+        <if test="endtime !=null">
+            and  detail.createdat &lt; #{endtime}
+        </if>
+        group by product.type
+    </select>
+    <select id="getSaleDataInYear" resultType="java.util.Map">
+        select  months.month, count(detail.month) as salenum
+        from
+        (select 1 as month union all
+        select 2 union all
+        select 3 union all
+        select 4 union all
+        select 5 union all
+        select 6 union all
+        select 7 union all
+        select 8 union all
+        select 9 union all
+        select 10 union all
+        select 11 union all
+        select 12) as months
+        left join
+        (SELECT
+            month(detail.createdat) as month
+            from saleorderdetail as detail
+            left join saleorder as so on so.code = detail.ordercode
+            left join enterprise as e on e.enterprisenumber = so.companynumber
+            where year(detail.createdat) = #{year}
+            <if test="province != null and province != ''">
+                and e.province = #{province}
+            </if>
+            <if test="city != null and city != ''">
+                and e.city = #{city}
+            </if>
+            ) as detail on months.month = detail.month
+        group by months.month
+        order by months.month
+    </select>
+    <select id="getInboundInYear" resultType="java.util.Map">
+        select months.month,
+        ifnull(detail.num,0) num
+        from (
+            select 1 as month union all
+                    select 2 union all
+                    select 3 union all
+                    select 4 union all
+                    select 5 union all
+                    select 6 union all
+                    select 7 union all
+                    select 8 union all
+                    select 9 union all
+                    select 10 union all
+                    select 11 union all
+                    select 12) as months
+         left join (
+                    select
+                    month(entryorder.entrydate) month,
+                    sum(entryorder.num) num
+                    from entryorder as entryorder
+                    left join enterprise as e on e.enterprisenumber = entryorder.companynumber
+                    where year(entryorder.entrydate) = #{year}
+                    <if test="province != null and province != ''">
+                        and e.province = #{province}
+                    </if>
+                    <if test="city != null and city != ''">
+                        and e.city = #{city}
+                    </if>
+                    group by month(entryorder.entrydate) ) as detail  on  months.month = detail.month
+        order by months.month
+
+    </select>
+    <select id="getSaleNumThisDay" resultType="java.lang.Integer">
+        select count(0)
+        from saleorderdetail as detail
+        left join saleorder as so on so.code = detail.ordercode
+        where
+        so.createdat BETWEEN CONCAT(CURDATE(),' 00:00:00') AND CONCAT(CURDATE(),' 23:59:59')
+    </select>
+    <select id="getSaleNumThisYear" resultType="java.lang.Integer">
+        select count(0)
+        from saleorderdetail as detail
+        left join saleorder as so on so.code = detail.ordercode
+        where
+        so.createdat &gt; STR_TO_DATE(CONCAT(year(now()),'-01-01 ','00:00:00'),'%Y-%m-%d %H:%i:%s')
+        and so.createdat &lt; now()
+    </select>
+    <select id="getPurchasersNum" resultType="java.lang.Integer">
+        select count(0)
+        from (
+            select so.customer
+            from saleorder as so
+            where so.createdat &gt; STR_TO_DATE(CONCAT(year(now()),'-01-01 ','00:00:00'),'%Y-%m-%d %H:%i:%s')
+            and so.createdat &lt; now()
+            group by so.customer)
+        as tmp
+    </select>
+    <select id="selectCityInAndOut" resultType="java.util.Map">
+
+        select
+        indata.name,
+        indata.innum,
+        saledata.salenum,
+        deliverydata.outnum,
+        ifnull(salesdata.sales,0)/10000 sales
+        from
+        (
+                select
+                citys.name,round(sum(if(citysale.num is null,0,num)),2) salenum
+                from (
+
+                        select *
+                        from district
+                        where parentcode =(
+                        select district.code
+                        from district as  district
+                        where district.name = #{params.province}
+                        and type = 1)
+                        and type =2
+
+                    ) as citys
+                left join (
+
+                SELECT
+                e.city,sod.itemcode ,count( 1 ) /p.boxnumber num
+                FROM
+                saleorderdetail AS sod
+                LEFT JOIN saleorder AS so ON so.`code` = sod.ordercode
+                LEFT JOIN product AS p ON p.directioncode = sod.itemcode and p.isdel = 0
+                LEFT JOIN enterprise AS e ON so.companynumber = e.enterprisenumber
+                where
+                e.enterprisestatus = 'ON'
+                and e.validflag = 1
+                <if test="params.starttime != null and params.starttime != ''">
+                    and sod.createdat &gt;= #{params.starttime}
+                </if>
+                <if test="params.endtime != null and params.endtime != ''">
+                    and sod.createdat &lt; #{params.endtime}
+                </if>
+                <if test="params.safetysupervision != null and params.safetysupervision != ''">
+                    and e.safetysupervision = #{params.safetysupervision }
+                </if>
+                GROUP BY
+                so.companynumber,sod.itemcode
+
+        ) as citysale
+        on citys.name = citysale.city
+        group by citys.name
+        )
+        as saledata
+        left join (
+
+                select
+                citys.name,round(sum(if(cityentry.entrynum is null,0,cityentry.entrynum)),2) innum
+                from (
+
+                            select *
+                            from district
+                            where parentcode =(
+                            select district.code
+                            from district as  district
+                            where district.name =  #{params.province}
+                            and type = 1)
+                            and type =2
+
+                ) as citys
+                left join (
+                select
+                e.city,SUM( ed.num )/ p.boxnumber AS entrynum
+                FROM
+                entrydetail AS ed
+                LEFT JOIN entryorder AS eo ON eo.`code` = ed.entryorder
+                LEFT JOIN product AS p ON p.directioncode = ed.itemcode and p.isdel = 0
+                LEFT JOIN enterprise AS e ON eo.companynumber = e.enterprisenumber
+                where
+                e.enterprisestatus = 'ON'
+                and e.validflag = 1
+                <if test="params.starttime != null and params.starttime != ''">
+                    and eo.createddate &gt;= #{params.starttime}
+                </if>
+                <if test="params.endtime != null and params.endtime != ''">
+                    and eo.createddate &lt; #{params.endtime}
+                </if>
+                <if test="params.safetysupervision != null and params.safetysupervision != ''">
+                    and e.safetysupervision = #{params.safetysupervision }
+                </if>
+                GROUP BY
+                eo.companynumber,ed.itemcode
+
+        )
+        as cityentry
+
+        on citys.name =  cityentry.city
+        group by citys.name)
+
+        as indata on indata.name = saledata.name
+
+        left join (
+
+        select
+
+        citys.name,round(ifnull(sum(citydelivery.deliverynum),0),2) as outnum
+
+        from    (
+
+            select *
+            from district
+            where parentcode =(
+            select district.code
+            from district as  district
+            where district.name =  #{params.province}
+            and type = 1)
+            and type =2
+
+
+        ) as citys
+
+        left join (
+
+         select e.city,sum(detail.num)/product.boxnumber as deliverynum
+         from deliverydetail as detail
+         left join deliveryorder as deliveryorder on deliveryorder.ordercode =  detail.deliverycode
+         left join product as product ON detail.itemcode = product.directioncode and product.isdel = 0
+         left join enterprise as e on e.enterprisenumber = deliveryorder.companynumber
+         where
+           e.enterprisestatus = 'ON'
+           and e.validflag = 1
+        <if test="params.starttime != null and params.starttime != ''">
+            and detail.createat &gt;= #{params.starttime}
+        </if>
+        <if test="params.endtime != null and params.endtime != ''">
+            and detail.createat &lt; #{params.endtime}
+        </if>
+        <if test="params.safetysupervision != null and params.safetysupervision != ''">
+            and e.safetysupervision = #{params.safetysupervision }
+        </if>
+        group by
+        deliveryorder.companynumber,detail.itemcode
+        ) as citydelivery on citydelivery.city = citys.name
+        group by citys.name
+        ) as deliverydata on deliverydata.name = indata.name
+
+        left join
+
+     (
+          select e.city,sum(saleorder.totalprice)  sales
+          from saleorder as saleorder
+          left join enterprise as e on e.enterprisenumber = saleorder.companynumber
+          where
+            e.enterprisestatus = 'ON'
+            and e.validflag = 1
+            <if test="params.starttime != null and params.starttime != ''">
+                and saleorder.createdat &gt;= #{params.starttime}
+            </if>
+            <if test="params.endtime != null and params.endtime != ''">
+                and saleorder.createdat &lt; #{params.endtime}
+            </if>
+            <if test="params.safetysupervision != null and params.safetysupervision != ''">
+                and e.safetysupervision = #{params.safetysupervision }
+            </if>
+            group by e.city
+        ) as salesdata on salesdata.city = indata.name
+
+
+
+	order by indata.innum desc,saledata.salenum desc
+
+    </select>
+    <select id="getGenderSale" resultType="java.util.Map">
+        select
+        genders.gender,
+        ifnull(saleinfo.sum,0) sum
+        from (
+            select '男' as gender
+            union
+            select '女'
+        )   as genders
+        left join (
+            select  case customer.gender when 1 then '男' else '女' end gender,count(0) sum
+            from saleorder as so
+            left join saleorderdetail as detail on  so.code = detail.ordercode
+            left join customer as customer on customer.id = so.customer
+            left join enterprise as e on e.enterprisenumber = so.companynumber
+            left join product as product on product.directioncode = detail.itemcode and product.isdel = 0
+            <where>
+                e.validflag = 1
+                and e.enterprisestatus = 'ON'
+                and customer.gender != 0
+                <if test="params.enterprisename != null and params.enterprisename != ''">
+                    and e.enterprisename like concat("%",#{params.enterprisename},"%")
+                </if>
+                <if test="params.productname != null and params.productname != ''">
+                    and detail.itemname like concat("%",#{params.productname},"%")
+                </if>
+                <if test="params.producttype != null and params.producttype != ''">
+                    and product.type = #{params.producttype}
+                </if>
+                <if test="params.secondarytype != null and params.secondarytype != ''">
+                    and product.secondarytype = #{params.secondarytype}
+                </if>
+                <if test="params.province != null and params.province != ''">
+                    and e.province = #{params.province}
+                </if>
+                <if test="params.city != null and params.city != ''">
+                    and e.city = #{params.city}
+                </if>
+                <if test="params.district != null and params.district != ''">
+                    and e.district = #{params.district}
+                </if>
+                <if test="params.street!= null and params.street != ''">
+                    and e.street = #{params.street}
+                </if>
+                <if test="params.committee != null and params.committee != ''">
+                    and e.committee = #{params.committee}
+                </if>
+                <if test="params.starttime != null and params.starttime != ''">
+                    and detail.createdat &gt;= #{params.starttime}
+                </if>
+                <if test="params.endtime != null and params.endtime != ''">
+                    and detail.createdat &lt; #{params.endtime}
+                </if>
+            </where>
+            group by customer.gender)  as saleinfo on saleinfo.gender = genders.gender
+    </select>
+    <select id="getRaceSale" resultType="java.util.Map">
+        select
+        customer.nation,
+        count(0) sum
+        from saleorder as so
+        left join saleorderdetail as detail on  so.code = detail.ordercode
+        left join customer as customer on customer.id = so.customer
+        left join enterprise as e on e.enterprisenumber = so.companynumber
+        left join product as product on product.directioncode = detail.itemcode and product.isdel = 0
+        where 1 = 1
+        and e.validflag = 1
+        and e.enterprisestatus = 'ON'
+        <choose>
+            <when test="params.enterprisenumber != null and params.enterprisenumber !=''">
+                and e.enterprisenumber = #{params.enterprisenumber}
+            </when>
+            <otherwise>
+                <if test="params.province != null and params.province != ''">
+                    and e.province = #{params.province}
+                </if>
+                <if test="params.city != null and params.city != ''">
+                    and e.city = #{params.city}
+                </if>
+                <if test="params.district != null and params.district != ''">
+                    and e.district = #{params.district}
+                </if>
+                <if test="params.street != null and params.street != ''">
+                    and e.street = #{params.street}
+                </if>
+                <if test="params.committee != null and params.committee != ''">
+                    and e.committee = #{params.committee}
+                </if>
+            </otherwise>
+        </choose>
+        <if test="params.enterprisename != null and params.enterprisename != ''">
+            and e.enterprisename like concat("%",#{params.enterprisename},"%")
+        </if>
+        <if test="params.productname != null and params.productname != ''">
+            and detail.itemname like concat("%",#{params.productname},"%")
+        </if>
+        <if test="params.producttype != null and params.producttype != ''">
+            and product.type = #{params.producttype}
+        </if>
+        <if test="params.secondarytype != null and params.secondarytype != ''">
+            and product.secondarytype = #{params.secondarytype}
+        </if>
+        <if test="params.provinceFilter != null and params.provinceFilter != ''">
+            and e.province = #{params.province}
+        </if>
+        <if test="params.cityFilter != null and params.cityFilter != ''">
+            and e.city = #{params.city}
+        </if>
+        <if test="params.districtFilter != null and params.districtFilter != ''">
+            and e.district = #{params.district}
+        </if>
+        <if test="params.streetFilter!= null and params.streetFilter != ''">
+            and e.street = #{params.street}
+        </if>
+        <if test="params.committeeFilter != null and params.committeeFilter != ''">
+            and e.committee = #{params.committee}
+        </if>
+        <if test="params.starttime != null and params.starttime != ''">
+            and detail.createdat &gt;= #{params.starttime}
+        </if>
+        <if test="params.endtime != null and params.endtime != ''">
+            and detail.createdat &lt; #{params.endtime}
+        </if>
+        group by customer.nation
+    </select>
+    <select id="getSaleInfoByGeneration" resultType="java.lang.Integer">
+
+        select  count(0)
+         from saleorder as so
+        left join saleorderdetail as detail on  so.code = detail.ordercode
+        left join customer as customer on customer.id = so.customer
+        left join enterprise as e on e.enterprisenumber = so.companynumber
+        left join product as product on product.directioncode = detail.itemcode and product.isdel = 0
+        where  1 = 1
+        and e.validflag = 1
+        and e.enterprisestatus = 'ON'
+        <choose>
+            <when test="params.enterprisenumber != null and params.enterprisenumber !=''">
+                and e.enterprisenumber = #{params.enterprisenumber}
+            </when>
+            <otherwise>
+                <if test="params.province != null and params.province != ''">
+                    and e.province = #{params.province}
+                </if>
+                <if test="params.city != null and params.city != ''">
+                    and e.city = #{params.city}
+                </if>
+                <if test="params.district != null and params.district != ''">
+                    and e.district = #{params.district}
+                </if>
+                <if test="params.street != null and params.street != ''">
+                    and e.street = #{params.street}
+                </if>
+                <if test="params.committee != null and params.committee != ''">
+                    and e.committee = #{params.committee}
+                </if>
+            </otherwise>
+        </choose>
+        and (YEAR (now()) - YEAR (substring(customer.idcardnum, 7, 8))) &gt;= #{params.head}
+        <if test="params.tail != null and params.tail != ''">
+        and (YEAR (now()) - YEAR (substring(customer.idcardnum, 7, 8))) &lt; #{params.tail}
+        </if>
+        <if test="params.enterprisename != null and params.enterprisename != ''">
+            and e.enterprisename like concat("%",#{params.enterprisename},"%")
+        </if>
+        <if test="params.productname != null and params.productname != ''">
+            and detail.itemname like concat("%",#{params.productname},"%")
+        </if>
+        <if test="params.producttype != null and params.producttype != ''">
+            and product.type = #{params.producttype}
+        </if>
+        <if test="params.secondarytype != null and params.secondarytype != ''">
+            and product.secondarytype = #{params.secondarytype}
+        </if>
+        <if test="params.provinceFilter != null and params.provinceFilter != ''">
+            and e.province = #{params.province}
+        </if>
+        <if test="params.cityFilter != null and params.cityFilter != ''">
+            and e.city = #{params.city}
+        </if>
+        <if test="params.districtFilter != null and params.districtFilter != ''">
+            and e.district = #{params.district}
+        </if>
+        <if test="params.streetFilter!= null and params.streetFilter != ''">
+            and e.street = #{params.street}
+        </if>
+        <if test="params.committeeFilter != null and params.committeeFilter != ''">
+            and e.committee = #{params.committee}
+        </if>
+        <if test="params.starttime != null and params.starttime != ''">
+            and detail.createdat &gt;= #{params.starttime}
+        </if>
+        <if test="params.endtime != null and params.endtime != ''">
+            and detail.createdat &lt; #{params.endtime}
+        </if>
+
+
+    </select>
+    <select id="selectOneByDirectionCode" resultMap="SaleDetailVo">
+        select detail.*,so.*,product.*
+        from saleorderdetail as detail
+        left join saleorder as so on so.code = detail.ordercode
+        left join product as product on product.directioncode = detail.itemcode and product.isdel = 0
+        where detail.directioncode = #{directionCode}
+        and detail.returnflag = 0
+    </select>
+    <select id="selectOrderByDirectionReturnflag" resultType="com.gk.firework.Domain.SaleOrderDetailInfo">
+        select
+        detail.id,
+        detail.ordercode,
+        detail.itemcode,
+        detail.itemname,
+        detail.directioncode,
+        detail.createdat,
+        detail.createdby,
+        detail.price,
+        detail.specification,
+        detail.returnflag
+        from saleorder as saleorder
+        left join saleorderdetail as detail on detail.ordercode = saleorder.code
+        <where>
+            detail.directioncode = #{directionCode}
+            and detail.returnflag = #{returnflag}
+            <if test="datetime != null">
+                and saleorder.createdat &lt;#{datetime}
+            </if>
+        </where>
+        group by createdat asc
+        limit 1
+    </select>
+    <select id="selectSaleNumInfo" resultType="com.gk.firework.Domain.Vo.SaleNumVo">
+        select
+        ifnull(round(count(0)/product.boxnumber,2),0 )num,
+        detail.itemcode,
+        product.*,
+        enterprise.enterprisenumber,
+        enterprise.enterprisename
+        from saleorderdetail as detail
+        left join saleorder as saleorder on saleorder.code = detail.ordercode
+        left join product as product on product.directioncode = detail.itemcode and product.isdel = 0
+        left join enterprise as enterprise on enterprise.enterprisenumber = saleorder.companynumber
+        <where>
+            <if test="params.enterprisename != null and params.enterprisename != '' ">
+                and enterprise.enterprisename = #{params.enterprisename}
+            </if>
+            <if test="params.enterprisenumber != null and params.enterprisenumber != '' ">
+                and saleorder.companynumber = #{params.enterprisename}
+            </if>
+            <if test="params.starttime != null and params.starttime != '' ">
+                and detail.createdat &gt;= #{params.starttime}
+            </if>
+            <if test="params.endtime != null and params.endtime != '' ">
+                and detail.createdat &lt;= #{params.endtime}
+            </if>
+        </where>
+        group by detail.itemcode
+    </select>
+    <select id="selectSaleNumInfoDetail" resultType="com.gk.firework.Domain.SaleOrderDetailInfo">
+
+        select detail.*
+        from saleorderdetail as detail
+        left join saleorder as saleorder on saleorder.code= detail.ordercode
+        left join enterprise as enterprise on enterprise.enterprisenumber = saleorder.companynumber
+        <where>
+            <if test="params.enterprisename != null and params.enterprisename != '' ">
+                and enterprise.enterprisename = #{params.enterprisename}
+            </if>
+            <if test="params.enterprisenumber != null and params.enterprisenumber != '' ">
+                and saleorder.companynumber = #{params.enterprisename}
+            </if>
+            <if test="params.starttime != null and params.starttime != '' ">
+                and detail.createdat &gt;= #{params.starttime}
+            </if>
+            <if test="params.endtime != null and params.endtime != '' ">
+                and detail.createdat &lt;= #{params.endtime}
+            </if>
+            <if test="params.itemcode != null and params.itemcode != '' ">
+                and detail.itemcode = #{params.itemcode}
+            </if>
+        </where>
+        order by detail.createdat desc
+    </select>
+    <select id="selectCityInAndOutDetail" resultType="java.util.Map">
+
+        select
+        e.enterprisename,
+        round(ifnull(saledata.salenum ,0),2)   salenum,
+        round(ifnull(entrydata.entrynum,0),2)  innum,
+        round(ifnull(deliverydata.deliverynum ,0),2) outnum,
+        ifnull(saleInfo.sales/10000,0)  sales
+        from (
+            select
+            enterprisename,enterprisenumber
+            from enterprise  as e
+            where  e.validflag = 1
+            and e.enterprisestatus = 'ON'
+            and e.city = #{params.city}
+            <if test="params.safetysupervision != null and params.safetysupervision != ''">
+                and e.safetysupervision = #{params.safetysupervision }
+            </if>
+        ) as e
+        left join (
+
+
+        select
+        saledata.enterprisename,sum(saledata.num) salenum
+        from(
+
+        SELECT
+            e.enterprisename,so.companynumber ,sod.itemcode ,count( 1 ) /p.boxnumber num
+            FROM
+            saleorderdetail AS sod
+            LEFT JOIN saleorder AS so ON so.`code` = sod.ordercode
+            LEFT JOIN product AS p ON p.directioncode = sod.itemcode and p.isdel = 0
+            LEFT JOIN enterprise AS e ON so.companynumber = e.enterprisenumber
+            where
+            e.enterprisestatus = 'ON'
+            and e.validflag = 1
+            and city = #{params.city}
+            <if test="params.starttime != null and params.starttime != ''">
+                and sod.createdat &gt;= #{params.starttime}
+            </if>
+            <if test="params.endtime != null and params.endtime != ''">
+                and sod.createdat &lt; #{params.endtime}
+            </if>
+            <if test="params.safetysupervision != null and params.safetysupervision != ''">
+                and e.safetysupervision = #{params.safetysupervision }
+            </if>
+            GROUP BY
+            so.companynumber ,sod.itemcode
+            ) as saledata
+            group by saledata.companynumber
+        ) as saledata on saledata.enterprisename = e.enterprisename
+
+        left join (
+
+        select
+        entrydata.enterprisename , sum(entrydata.entrynum) entrynum
+        from (
+        select
+        e.enterprisename,eo.companynumber,ed.itemcode,SUM( ed.num )/ p.boxnumber AS entrynum
+        FROM
+        entrydetail AS ed
+        LEFT JOIN entryorder AS eo ON eo.`code` = ed.entryorder
+        LEFT JOIN product AS p ON p.directioncode = ed.itemcode and p.isdel = 0
+        LEFT JOIN enterprise AS e ON eo.companynumber = e.enterprisenumber
+        where
+        e.enterprisestatus = 'ON'
+        and e.validflag = 1
+        and city = #{params.city}
+        <if test="params.starttime != null and params.starttime != ''">
+            and eo.createddate &gt;= #{params.starttime}
+        </if>
+        <if test="params.endtime != null and params.endtime != ''">
+            and eo.createddate &lt; #{params.endtime}
+        </if>
+        <if test="params.safetysupervision != null and params.safetysupervision != ''">
+            and e.safetysupervision = #{params.safetysupervision }
+        </if>
+        GROUP BY
+        eo.companynumber,ed.itemcode
+        ) as entrydata
+        group by entrydata.companynumber
+        ) as entrydata  on entrydata.enterprisename = e.enterprisename
+
+        left join (
+
+        select
+        deliverydata.enterprisename,sum(deliverydata.deliverynum) deliverynum
+        from (
+        select e.enterprisename,deliveryorder.companynumber,detail.itemcode,sum(detail.num)/product.boxnumber as deliverynum
+        from deliverydetail as detail
+        left join deliveryorder as deliveryorder on deliveryorder.ordercode =  detail.deliverycode
+        left join product as product ON detail.itemcode = product.directioncode and product.isdel = 0
+        left join enterprise as e on e.enterprisenumber = deliveryorder.companynumber
+        where
+        e.enterprisestatus = 'ON'
+        and e.validflag = 1
+        and e.city = #{params.city}
+        <if test="params.starttime != null and params.starttime != ''">
+            and detail.createat &gt;= #{params.starttime}
+        </if>
+        <if test="params.endtime != null and params.endtime != ''">
+            and detail.createat &lt; #{params.endtime}
+        </if>
+        <if test="params.safetysupervision != null and params.safetysupervision != ''">
+            and e.safetysupervision = #{params.safetysupervision }
+        </if>
+        group by
+        deliveryorder.companynumber,detail.itemcode
+        ) as deliverydata
+        group by deliverydata.companynumber
+        )  as  deliverydata on deliverydata.enterprisename = e.enterprisename
+
+        left join (
+
+        select e.enterprisename,sum(saleorder.totalprice)  sales
+        from saleorder as saleorder
+        left join enterprise as e on e.enterprisenumber = saleorder.companynumber
+        where
+        e.enterprisestatus = 'ON'
+        and e.validflag = 1
+        and e.city = #{params.city}
+        <if test="params.starttime != null and params.starttime != ''">
+            and saleorder.createdat &gt;= #{params.starttime}
+        </if>
+        <if test="params.endtime != null and params.endtime != ''">
+            and saleorder.createdat &lt; #{params.endtime}
+        </if>
+        <if test="params.safetysupervision != null and params.safetysupervision != ''">
+            and e.safetysupervision = #{params.safetysupervision }
+        </if>
+        group by saleorder.companynumber
+
+        )  as saleInfo on saleInfo.enterprisename = e.enterprisename
+
+
+
+    </select>
+    <select id="selectCityTypeSale" resultType="java.util.Map">
+            select
+            citys.name,
+            ifnull(allperson.num,0) personnum
+            <foreach collection="list" item="item" index="index">
+                ,round(ifnull(num_${item},0),2) num_${item}
+            </foreach>,
+            round(
+            <trim suffixOverrides="+">
+                <foreach collection="list" item="item" index="index">
+                    ifnull(alldata.num_${item},0) +
+                </foreach>
+            </trim>
+            ,2) totalcol
+            from (
+                select district.name
+                from district
+                where parentcode =(
+                select district.code
+                from district as district
+                where district.name = #{params.province}
+                and type = 1)
+                and type =2
+            ) as citys
+
+            left join (
+                    select
+                    tmptmptmp.city
+                    <foreach collection="list" item="item" index="index">
+                        ,MAX(
+                        CASE tmptmptmp.type
+                        WHEN #{item} THEN
+                        tmptmptmp.num
+                        ELSE
+                        0
+                        END
+                        ) num_${item}
+                    </foreach>
+
+                    from (
+
+                    select
+                    tmptmp.city,tmptmp.type,sum(tmptmp.num) num
+                    from
+                    (
+                    SELECT
+                    e.city,so.companynumber,p.type,count( 1 ) /p.
+                    boxnumber num
+                    FROM
+                    saleorderdetail AS sod
+                    LEFT JOIN
+                    saleorder AS so ON so.`code` = sod.ordercode
+                    LEFT JOIN product AS p ON p.directioncode = sod.itemcode
+                    LEFT JOIN
+                    enterprise AS e ON so.companynumber = e.enterprisenumber
+                    where
+                    e.
+                    enterprisestatus = 'ON'
+                    and e.validflag=1
+                    and p.isdel = 0
+                    and e.validflag = 1
+                    <if test="params.starttime != null and params.starttime != ''">
+                        and so.createdat &gt;= #{params.starttime}
+                    </if>
+                    <if test="params.endtime != null and params.endtime != ''">
+                        and so.createdat &lt; #{params.endtime}
+                    </if>
+                    <if test="params.safetysupervision != null and params.safetysupervision != ''">
+                        and e.safetysupervision = #{params.safetysupervision }
+                    </if>
+                    <if test="params.enterprisename != null and params.enterprisename != ''">
+                        and e.enterprisename like concat("%",#{params.enterprisename },"%")
+                    </if>
+                    GROUP BY
+                    so.companynumber,sod.itemcode
+
+                    ) as tmptmp
+                    group by tmptmp.city,tmptmp.type
+
+                    ) as tmptmptmp
+                    group by tmptmptmp.city
+            ) as alldata
+            on citys.name = alldata.city
+            left join (
+
+                select cc.city,count(0) num
+                from (
+                select e.city,so.customer
+                from saleorder as so
+                left join enterprise AS e ON so.companynumber = e.enterprisenumber
+                where
+                e.enterprisestatus = 'ON'
+                AND e.validflag = 1
+                <if test="params.starttime != null and params.starttime != ''">
+                    and so.createdat &gt;= #{params.starttime}
+                </if>
+                <if test="params.endtime != null and params.endtime != ''">
+                    and so.createdat &lt; #{params.endtime}
+                </if>
+                <if test="params.safetysupervision != null and params.safetysupervision != ''">
+                    and e.safetysupervision = #{params.safetysupervision }
+                </if>
+                <if test="params.enterprisename != null and params.enterprisename != ''">
+                    and e.enterprisename like concat("%",#{params.enterprisename },"%")
+                </if>
+                group by so.customer
+                ) as cc
+                group by cc.city
+
+        ) as allperson on citys.name = allperson.city
+    </select>
+    <select id="selectEnterpriseTypeSale" resultType="java.util.Map">
+        select
+        alldata.*,
+        ifnull(allperson.personnum,0) personnum,
+        round(
+        <trim suffixOverrides="+">
+            <foreach collection="list" item="item" index="index">
+                alldata.num_${item} +
+            </foreach>
+        </trim>
+        ,2) totalcol
+
+        from (
+
+        select
+        tmptmptmp.city name,
+        tmptmptmp.enterprisename
+        <foreach collection="list" item="item" index="index">
+            ,MAX(
+            CASE tmptmptmp.type
+            WHEN #{item} THEN
+            round(tmptmptmp.num,2)
+            ELSE
+            0
+            END
+            ) num_${item}
+        </foreach>
+
+        from (
+
+        select
+        tmptmp.city,tmptmp.enterprisename,tmptmp.type,sum(tmptmp.num) num
+        from
+        (
+        SELECT
+        e.city,e.enterprisename,so.companynumber,p.type,count( 1 ) /p.
+        boxnumber num
+        FROM
+        saleorderdetail AS sod
+        LEFT JOIN
+        saleorder AS so ON so.`code` = sod.ordercode
+        LEFT JOIN product AS p ON p.directioncode = sod.itemcode
+        LEFT JOIN
+        enterprise AS e ON so.companynumber = e.enterprisenumber
+        where
+        e.enterprisestatus = 'ON'
+        and e.validflag=1
+        and p.isdel = 0
+        and e.validflag = 1
+        <if test="params.starttime != null and params.starttime != ''">
+            and so.createdat &gt;= #{params.starttime}
+        </if>
+        <if test="params.endtime != null and params.endtime != ''">
+            and so.createdat &lt; #{params.endtime}
+        </if>
+        <if test="params.safetysupervision != null and params.safetysupervision != ''">
+            and e.safetysupervision = #{params.safetysupervision }
+        </if>
+        <if test="params.enterprisename != null and params.enterprisename != ''">
+            and e.enterprisename like concat("%",#{params.enterprisename },"%")
+        </if>
+        <if test="params.province != null and params.province != ''">
+            and e.province = #{params.province }
+        </if>
+        <if test="params.city != null and params.city != ''">
+            and e.city = #{params.city }
+        </if>
+        <if test="params.district != null and params.district != ''">
+            and e.district = #{params.district }
+        </if>
+        GROUP BY
+        so.companynumber,sod.itemcode
+
+        ) as tmptmp
+        group by tmptmp.companynumber,tmptmp.type
+        ) as tmptmptmp
+        group by tmptmptmp.enterprisename)
+        as alldata
+        left join (
+
+            select cc.enterprisename,count(0) personnum
+            from (
+            select e.city,e.enterprisename,so.customer
+            from saleorder as so
+            left join enterprise AS e ON so.companynumber = e.enterprisenumber
+            where
+            e.enterprisestatus = 'ON'
+            AND e.validflag = 1
+            <if test="params.starttime != null and params.starttime != ''">
+                and so.createdat &gt;= #{params.starttime}
+            </if>
+            <if test="params.endtime != null and params.endtime != ''">
+                and so.createdat &lt; #{params.endtime}
+            </if>
+            <if test="params.safetysupervision != null and params.safetysupervision != ''">
+                and e.safetysupervision = #{params.safetysupervision }
+            </if>
+            <if test="params.enterprisename != null and params.enterprisename != ''">
+                and e.enterprisename like concat("%",#{params.enterprisename },"%")
+            </if>
+            <if test="params.province != null and params.province != ''">
+                and e.province = #{params.province }
+            </if>
+            <if test="params.city != null and params.city != ''">
+                and e.city = #{params.city }
+            </if>
+            <if test="params.district != null and params.district != ''">
+                and e.district = #{params.district }
+            </if>
+            group by so.companynumber,so.customer
+            ) as cc
+            group by cc.enterprisename
+        ) as allperson
+        on allperson.enterprisename = alldata.enterprisename
+    </select>
+    <select id="selectAllType" resultType="java.util.Map">
+        select
+        lasttmp.*,
+        othertmp.personnum,
+        round(
+        <trim suffixOverrides="+">
+            <foreach collection="list" item="item" index="index">
+                ifnull(lasttmp.num_${item},0) +
+            </foreach>
+        </trim>
+        ,2) totalcol
+        from (
+        select
+        '合计' name
+        <foreach collection="list" item="item" index="index">
+            ,MAX(
+            CASE tmptmptmp.type
+            WHEN #{item} THEN
+            round(tmptmptmp.num,2)
+            ELSE
+            0
+            END
+            ) num_${item}
+        </foreach>
+        from (
+
+
+        select
+        tmptmp.type,sum(tmptmp.num) num
+        from
+        (
+        SELECT
+        e.city,so.companynumber,p.type,count( 1 ) /p.
+        boxnumber num
+        FROM
+        saleorderdetail AS sod
+        LEFT JOIN
+        saleorder AS so ON so.`code` = sod.ordercode
+        LEFT JOIN product AS p ON p.directioncode = sod.itemcode
+        LEFT JOIN
+        enterprise AS e ON so.companynumber = e.enterprisenumber
+        where
+        e.enterprisestatus = 'ON'
+        and e.validflag=1
+        and p.isdel = 0
+        and e.validflag = 1
+        <if test="params.starttime != null and params.starttime != ''">
+            and so.createdat &gt;= #{params.starttime}
+        </if>
+        <if test="params.endtime != null and params.endtime != ''">
+            and so.createdat &lt; #{params.endtime}
+        </if>
+        <if test="params.safetysupervision != null and params.safetysupervision != ''">
+            and e.safetysupervision = #{params.safetysupervision }
+        </if>
+        <if test="params.enterprisename != null and params.enterprisename != ''">
+            and e.enterprisename like concat("%",#{params.enterprisename },"%")
+        </if>
+        <if test="params.province != null and params.province != ''">
+            and e.province = #{params.province }
+        </if>
+        <if test="params.city != null and params.city != ''">
+            and e.city = #{params.city }
+        </if>
+        <if test="params.district != null and params.district != ''">
+            and e.district = #{params.district }
+        </if>
+        GROUP BY
+        so.companynumber,sod.itemcode
+
+        ) as tmptmp
+        group by tmptmp.type
+
+
+        ) as tmptmptmp
+        ) as lasttmp
+        left join
+        (
+        select  '合计' name,sum(1) personnum
+        from (
+        select
+        count(0) num
+        from saleorder  as so
+        left join enterprise AS e ON so.companynumber = e.enterprisenumber
+        WHERE
+        e.enterprisestatus = 'ON'
+        AND e.validflag = 1
+        <if test="params.starttime != null and params.starttime != ''">
+            and so.createdat &gt;= #{params.starttime}
+        </if>
+        <if test="params.endtime != null and params.endtime != ''">
+            and so.createdat &lt; #{params.endtime}
+        </if>
+        <if test="params.safetysupervision != null and params.safetysupervision != ''">
+            and e.safetysupervision = #{params.safetysupervision }
+        </if>
+        <if test="params.enterprisename != null and params.enterprisename != ''">
+            and e.enterprisename like concat("%",#{params.enterprisename },"%")
+        </if>
+        <if test="params.province != null and params.province != ''">
+            and e.province = #{params.province }
+        </if>
+        <if test="params.city != null and params.city != ''">
+            and e.city = #{params.city }
+        </if>
+        <if test="params.district != null and params.district != ''">
+            and e.district = #{params.district }
+        </if>
+        group by so.customer
+        )  as cc
+
+        ) as othertmp
+        on othertmp.name = lasttmp.name
+
+
+    </select>
+    <select id="selectDistrictTypeSale" resultType="java.util.Map">
+        select
+        citys.name,
+        ifnull(allperson.num,0) personnum
+        <foreach collection="list" item="item" index="index">
+            ,round(ifnull(num_${item},0),2) num_${item}
+        </foreach>,
+        round(
+        <trim suffixOverrides="+">
+            <foreach collection="list" item="item" index="index">
+                ifnull(alldata.num_${item},0)  +
+            </foreach>
+        </trim>
+        ,2) totalcol
+        from (
+        select district.name
+        from district
+        where parentcode =(
+        select district.code
+        from district as district
+        where district.name = #{params.city}
+        and type = 2)
+        and type =3
+        ) as citys
+
+        left join (
+        select
+        tmptmptmp.district
+        <foreach collection="list" item="item" index="index">
+            ,MAX(
+            CASE tmptmptmp.type
+            WHEN #{item} THEN
+            tmptmptmp.num
+            ELSE
+            0
+            END
+            ) num_${item}
+        </foreach>
+
+        from (
+
+        select
+        tmptmp.district,tmptmp.type,sum(tmptmp.num) num
+        from
+        (
+        SELECT
+        e.district,so.companynumber,p.type,count( 1 ) /p.
+        boxnumber num
+        FROM
+        saleorderdetail AS sod
+        LEFT JOIN
+        saleorder AS so ON so.`code` = sod.ordercode
+        LEFT JOIN product AS p ON p.directioncode = sod.itemcode
+        LEFT JOIN
+        enterprise AS e ON so.companynumber = e.enterprisenumber
+        where
+        e.
+        enterprisestatus = 'ON'
+        and e.validflag=1
+        and p.isdel = 0
+        and e.validflag = 1
+        <if test="params.starttime != null and params.starttime != ''">
+            and so.createdat &gt;= #{params.starttime}
+        </if>
+        <if test="params.endtime != null and params.endtime != ''">
+            and so.createdat &lt; #{params.endtime}
+        </if>
+        <if test="params.safetysupervision != null and params.safetysupervision != ''">
+            and e.safetysupervision = #{params.safetysupervision }
+        </if>
+        <if test="params.enterprisename != null and params.enterprisename != ''">
+            and e.enterprisename like concat("%",#{params.enterprisename },"%")
+        </if>
+        GROUP BY
+        so.companynumber,sod.itemcode
+
+        ) as tmptmp
+        group by tmptmp.district,tmptmp.type
+
+        ) as tmptmptmp
+        group by tmptmptmp.district
+        ) as alldata
+        on citys.name = alldata.district
+        left join (
+
+        select cc.district,count(0) num
+        from (
+        select e.district,so.customer
+        from saleorder as so
+        left join enterprise AS e ON so.companynumber = e.enterprisenumber
+        where
+        e.enterprisestatus = 'ON'
+        AND e.validflag = 1
+        <if test="params.starttime != null and params.starttime != ''">
+            and so.createdat &gt;= #{params.starttime}
+        </if>
+        <if test="params.endtime != null and params.endtime != ''">
+            and so.createdat &lt; #{params.endtime}
+        </if>
+        <if test="params.safetysupervision != null and params.safetysupervision != ''">
+            and e.safetysupervision = #{params.safetysupervision }
+        </if>
+        <if test="params.enterprisename != null and params.enterprisename != ''">
+            and e.enterprisename like concat("%",#{params.enterprisename },"%")
+        </if>
+        group by so.customer
+        ) as cc
+        group by cc.district
+
+        ) as allperson on citys.name = allperson.district
+    </select>
+    <select id="selectAllDistrictType" resultType="java.util.Map">
+        select
+        lasttmp.*,
+        othertmp.personnum,
+        round(
+        <trim suffixOverrides="+">
+            <foreach collection="list" item="item" index="index">
+                ifnull(lasttmp.num_${item},0) +
+            </foreach>
+        </trim>
+        ,2) totalcol
+        from (
+        select
+        '合计' name
+        <foreach collection="list" item="item" index="index">
+            ,MAX(
+            CASE tmptmptmp.type
+            WHEN #{item} THEN
+            round(tmptmptmp.num,2)
+            ELSE
+            0
+            END
+            ) num_${item}
+        </foreach>
+        from (
+        select
+        tmptmp.type,sum(tmptmp.num) num
+        from
+        (
+        SELECT
+        e.city,so.companynumber,p.type,count( 1 ) /p.
+        boxnumber num
+        FROM
+        saleorderdetail AS sod
+        LEFT JOIN
+        saleorder AS so ON so.`code` = sod.ordercode
+        LEFT JOIN product AS p ON p.directioncode = sod.itemcode
+        LEFT JOIN
+        enterprise AS e ON so.companynumber = e.enterprisenumber
+        where
+        e.enterprisestatus = 'ON'
+        and e.validflag=1
+        and p.isdel = 0
+        and e.validflag = 1
+        <if test="params.starttime != null and params.starttime != ''">
+            and so.createdat &gt;= #{params.starttime}
+        </if>
+        <if test="params.endtime != null and params.endtime != ''">
+            and so.createdat &lt; #{params.endtime}
+        </if>
+        <if test="params.safetysupervision != null and params.safetysupervision != ''">
+            and e.safetysupervision = #{params.safetysupervision }
+        </if>
+        <if test="params.enterprisename != null and params.enterprisename != ''">
+            and e.enterprisename like concat("%",#{params.enterprisename },"%")
+        </if>
+        <if test="params.province != null and params.province != ''">
+            and e.province = #{params.province }
+        </if>
+        <if test="params.city != null and params.city != ''">
+            and e.city = #{params.city }
+        </if>
+        <if test="params.district != null and params.district != ''">
+            and e.district = #{params.district }
+        </if>
+        GROUP BY
+        so.companynumber,sod.itemcode
+        ) as tmptmp
+        group by tmptmp.type
+        ) as tmptmptmp
+        ) as lasttmp
+        left join
+        (
+        select  '合计' name,sum(1) personnum
+        from (
+        select
+        e.city,
+        e.district,
+        count(0) num
+        from saleorder  as so
+        left join enterprise AS e ON so.companynumber = e.enterprisenumber
+        WHERE
+        e.enterprisestatus = 'ON'
+        AND e.validflag = 1
+        <if test="params.starttime != null and params.starttime != ''">
+            and so.createdat &gt;= #{params.starttime}
+        </if>
+        <if test="params.endtime != null and params.endtime != ''">
+            and so.createdat &lt; #{params.endtime}
+        </if>
+        <if test="params.safetysupervision != null and params.safetysupervision != ''">
+            and e.safetysupervision = #{params.safetysupervision }
+        </if>
+        <if test="params.enterprisename != null and params.enterprisename != ''">
+            and e.enterprisename like concat("%",#{params.enterprisename },"%")
+        </if>
+        <if test="params.province != null and params.province != ''">
+            and e.province = #{params.province }
+        </if>
+        <if test="params.city != null and params.city != ''">
+            and e.city = #{params.city }
+        </if>
+        <if test="params.district != null and params.district != ''">
+            and e.district = #{params.district }
+        </if>
+        group by so.customer
+        )  as cc
+        <where>
+            1=1
+            <if test="params.city != null and params.city != ''">
+                and cc.city = #{params.city }
+            </if>
+        </where>
+        GROUP BY
+        cc.city
+        ) as othertmp
+        on othertmp.name = lasttmp.name
+    </select>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/SaleOrderInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/SaleOrderInfoMapper.xml
new file mode 100644
index 0000000..335b90e
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/SaleOrderInfoMapper.xml
@@ -0,0 +1,1112 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.SaleOrderInfoMapper">
+    <resultMap id="BaseResultMap" type="com.gk.firework.Domain.SaleOrderInfo">
+        <!--          -->
+        <id column="id" property="id" jdbcType="BIGINT"/>
+        <result column="code" property="code" jdbcType="VARCHAR"/>
+        <result column="createdat" property="createdat" jdbcType="TIMESTAMP"/>
+        <result column="createdby" property="createdby" jdbcType="VARCHAR"/>
+        <result column="customer" property="customer" jdbcType="BIGINT"/>
+        <result column="idcardnum" property="idcardnum" jdbcType="VARCHAR"/>
+        <result column="salesperson" property="salesperson" jdbcType="VARCHAR"/>
+        <result column="shop" property="shop" jdbcType="VARCHAR"/>
+        <result column="boxnum" property="boxnum" jdbcType="DECIMAL"/>
+        <result column="totalprice" property="totalprice" jdbcType="DECIMAL"/>
+        <result column="pay" property="pay" jdbcType="DECIMAL"/>
+        <result column="change" property="change" jdbcType="DECIMAL"/>
+        <result column="type" property="type" jdbcType="TINYINT"/>
+        <result column="returnflag" property="returnflag" jdbcType="TINYINT"/>
+        <result column="isupload" property="isupload" jdbcType="TINYINT"/>
+        <result column="uploadat" property="uploadat" jdbcType="TIMESTAMP"/>
+        <result column="returncode" property="returncode" jdbcType="VARCHAR"/>
+    </resultMap>
+
+    <resultMap id="OrderInfo" type="com.gk.firework.Domain.SaleOrderInfo">
+        <!--          -->
+        <id column="id" property="id" jdbcType="BIGINT"/>
+        <result column="code" property="code" jdbcType="VARCHAR"/>
+        <result column="createdat" property="createdat" jdbcType="TIMESTAMP"/>
+        <result column="createdby" property="createdby" jdbcType="VARCHAR"/>
+        <result column="customer" property="customer" jdbcType="BIGINT"/>
+        <result column="idcardnum" property="idcardnum" jdbcType="VARCHAR"/>
+        <result column="salesperson" property="salesperson" jdbcType="VARCHAR"/>
+        <result column="shop" property="shop" jdbcType="VARCHAR"/>
+        <result column="boxnum" property="boxnum" jdbcType="DECIMAL"/>
+        <result column="totalprice" property="totalprice" jdbcType="DECIMAL"/>
+        <result column="pay" property="pay" jdbcType="DECIMAL"/>
+        <result column="change" property="change" jdbcType="DECIMAL"/>
+        <result column="type" property="type" jdbcType="TINYINT"/>
+        <result column="returnflag" property="returnflag" jdbcType="TINYINT"/>
+    </resultMap>
+    <resultMap id="DailySaleReportResultMap" type="com.gk.firework.Domain.Vo.DailySaleReport">
+    </resultMap>
+    <sql id="Base_Column_List">
+        <!--          -->
+        id, `code`, createdat, createdby, customer, idcardnum, salesperson, shop, boxnum, totalprice,
+        pay, `change`, `type`, returnflag, isupload, uploadat, returncode
+    </sql>
+
+    <select id="selectOrderByDirectionAndCustomer" resultMap="BaseResultMap">
+        select
+        saleorder.id,
+        saleorder.code,
+        saleorder.createdat,
+        saleorder.createdby,
+        saleorder.customer,
+        saleorder.idcardnum,
+        saleorder.salesperson,
+        saleorder.shop,
+        saleorder.boxnum,
+        saleorder.totalprice,
+        saleorder.pay,
+        saleorder.`change`,
+        saleorder.`type`,
+        saleorder.returnflag
+        from saleorder as saleorder
+        left join saleorderdetail as detail on detail.ordercode = saleorder.code
+        <where>
+            detail.directioncode = #{directionCode}
+            and customer = #{customer}
+        </where>
+
+    </select>
+
+    <select id="selectSaleRecord1" resultType="java.util.Map">
+        select
+        sod.directioncode,
+        sod.itemname,
+        so.shop,
+        customer.idcardnum identify,
+        so.createdat saletime
+        from saleorder as so
+        left join saleorderdetail as sod on so.code = sod.ordercode
+        left join customer as customer on customer.id = so.customer
+        <where>
+            <choose>
+                <when test="params.enterprisenumber != null and params.enterprisenumber != ''">
+                    and so.companynumber = #{params.enterprisenumber}
+                </when>
+                <otherwise>
+                    <if test="params.province != null and params.province != ''">
+                        and e.province = #{params.province}
+                    </if>
+                    <if test="params.city != null and params.city != ''">
+                        and e.city = #{params.city}
+                    </if>
+                    <if test="params.district != null and params.district != ''">
+                        and e.district = #{params.district}
+                    </if>
+                    <if test="params.street != null and params.street != ''">
+                        and e.street = #{params.street}
+                    </if>
+                    <if test="params.committee != null and params.committee != ''">
+                        and e.committee = #{params.committee}
+                    </if>
+                </otherwise>
+            </choose>
+
+            <if test="params.starttime != null and params.starttime">
+                and so.createdat &gt; #{params.starttime}
+            </if>
+            <if test="params.endtime != null and params.endtime">
+                and so.createdat &lt; #{params.endtime}
+            </if>
+            <if test="params.shop != null and params.shop">
+                and so.shop like concat("%",#{params.shop},"%")
+            </if>
+            <if test="params.itemname != null and params.itemname">
+                and sod.itemname like concat("%",#{params.itemname},"%")
+            </if>
+            <if test="params.directioncode != null and params.directioncode">
+                and sod.directioncode like concat("%",#{params.directioncode},"%")
+            </if>
+            <if test="params.enterprisename != null and params.enterprisename  != ''">
+                and e.enterprisename like concat("%",#{params.enterprisename},"%")
+            </if>
+            <if test="params.parententerprisename != null and params.parententerprisename  != ''">
+                and e.parententerprisename like concat("%",#{params.parententerprisename},"%")
+            </if>
+        </where>
+        order by saletime desc
+    </select>
+    <select id="selectSaleRecord2" resultType="java.util.Map">
+        SELECT
+        e.enterprisename,
+        e.enterprisenumber,
+        count(if(sod.returnflag = 1,true,null)) returnnum,
+        count(0) salenum,
+        max(so.createdat)
+        from saleorderdetail sod
+        LEFT JOIN saleorder as so on so.code = sod.ordercode
+        LEFT JOIN enterprise as e on e.enterprisenumber = so.companynumber and e.validflag = 1
+        <where>
+            <choose>
+                <when test="params.enterprisenumber != null and params.enterprisenumber != ''">
+                    and so.companynumber = #{params.enterprisenumber}
+                </when>
+                <otherwise>
+                    <if test="params.province != null and params.province != ''">
+                        and e.province = #{params.province}
+                    </if>
+                    <if test="params.city != null and params.city != ''">
+                        and e.city = #{params.city}
+                    </if>
+                    <if test="params.district != null and params.district != ''">
+                        and e.district = #{params.district}
+                    </if>
+                    <if test="params.street != null and params.street != ''">
+                        and e.street = #{params.street}
+                    </if>
+                    <if test="params.committee != null and params.committee != ''">
+                        and e.committee = #{params.committee}
+                    </if>
+                </otherwise>
+            </choose>
+            <if test="params.starttime != null and params.starttime != ''">
+                and so.createdat &gt; #{params.starttime}
+            </if>
+            <if test="params.endtime != null and params.endtime != ''">
+                and so.createdat &lt; #{params.endtime}
+            </if>
+            <if test="params.safetySupervision != null and params.safetySupervision != ''">
+                and e.safetysupervision = #{params.safetySupervision}
+            </if>
+            <if test="params.filterProvince != null and params.filterProvince  != ''">
+                and e.province = #{params.filterProvince}
+            </if>
+            <if test="params.filterCity != null and  params.filterCity  != ''">
+                and e.city = #{params.filterCity}
+            </if>
+            <if test="params.filterDistrict != null and params.filterDistrict  != ''">
+                and e.district = #{params.filterDistrict}
+            </if>
+            <if test="params.filterStreet != null and params.filterStreet  != ''">
+                and e.street = #{params.filterStreet}
+            </if>
+            <if test="params.filterCommittee != null and params.filterCommittee  != ''">
+                and e.committee = #{params.filterCommittee}
+            </if>
+            <if test="params.enterprisename != null and params.enterprisename  != ''">
+                and e.enterprisename like concat("%",#{params.enterprisename},"%")
+            </if>
+            <if test="params.parententerprisename != null and params.parententerprisename  != ''">
+                and e.parententerprisename like concat("%",#{params.parententerprisename},"%")
+            </if>
+
+        </where>
+        group by so.companynumber
+    </select>
+    <select id="selectSaleRecord3" resultType="java.util.Map">
+        SELECT
+        a.itemcode,
+        a.itemname,
+        a.salenum,
+        a.boxnumber,
+        round(a.salenum / a.boxnumber,2) boxnum,
+        a.saletime
+        from (
+        SELECT
+        count(sod.directioncode) salenum,
+        p.directioncode itemcode,
+        p.`name` itemname,
+        p.boxnumber,
+        max(sod.createdat) saletime
+        FROM product as p
+        left join saleorderdetail as sod on sod.itemcode = p.directioncode
+        LEFT JOIN saleorder as so on so.code = sod.ordercode
+        LEFT JOIN enterprise AS e ON e.enterprisenumber = so.companynumber
+        where p.isdel = 0
+        and e.enterprisestatus = 'ON'
+        and e.validflag = 1
+        <if test="params.enterprisename != null and params.enterprisename  != ''">
+            and e.enterprisename like concat("%",#{params.enterprisename},"%")
+        </if>
+        <if test="params.enterprisenumber != null and params.enterprisenumber  != ''">
+            and e.enterprisenumber  = #{params.enterprisenumber}
+        </if>
+        <if test="params.parententerprisename != null and params.parententerprisename  != ''">
+            and e.parententerprisename like concat("%",#{params.parententerprisename},"%")
+        </if>
+        <if test="params.safetysupervision != null and params.safetysupervision != ''">
+            and e.safetysupervision = #{params.safetysupervision}
+        </if>
+        <if test="params.filterProvince != null and params.filterProvince  != ''">
+            and e.province = #{params.filterProvince}
+        </if>
+        <if test="params.filterCity != null and  params.filterCity  != ''">
+            and e.city = #{params.filterCity}
+        </if>
+        <if test="params.filterDistrict != null and params.filterDistrict  != ''">
+            and e.district = #{params.filterDistrict}
+        </if>
+        <if test="params.filterStreet != null and params.filterStreet  != ''">
+            and e.street = #{params.filterStreet}
+        </if>
+        <if test="params.filterCommittee != null and params.filterCommittee  != ''">
+            and e.committee = #{params.filterCommittee}
+        </if>
+        <if test="params.starttime != null and params.starttime != ''">
+            and sod.createdat &gt;= #{params.starttime}
+        </if>
+        <if test="params.endtime != null and params.endtime != ''">
+            and DATE_FORMAT(sod.createdat,'%Y-%m-%d')  &lt;= #{params.endtime}
+        </if>
+        <if test="params.itemname != null and params.itemname  != ''">
+            and p.name like concat("%",#{params.itemname},"%")
+        </if>
+        <if test="params.itemcode != null and params.itemcode  != ''">
+            and p.directioncode like concat("%",#{params.itemcode},"%")
+        </if>
+        group by p.directioncode
+        ) as a
+        order by salenum desc
+
+    </select>
+    <select id="selectSaleRecord4" resultType="java.util.Map">
+        SELECT
+        so.companynumber,
+        e.province,
+        e.city,
+        e.district,
+        e.enterprisename,
+        cu.idcardnum identify,
+        cu.path,
+        cu.nation,
+        cu.`name` name,
+        count(0) num,
+        sum(sod.returnflag) returnnum,
+        max(sod.createdat) saletime
+        FROM
+        <choose>
+            <when test="params.directioncode != null and params.directioncode != ''">
+                (select so.*
+                from
+                (
+                select a.companynumber,cu.idcardnum,cu.id customerid
+                from saleorderdetail as b
+                left join saleorder as a on b.ordercode = a.code
+                left join customer as cu on cu.id = a.customer
+                where b.directioncode like concat("%",#{params.directioncode},"%")
+                GROUP BY a.companynumber,cu.idcardnum) as m
+                left join saleorder as so on so.companynumber = m.companynumber and so.customer = m.customerid)
+                as so
+            </when>
+            <otherwise>
+                saleorder as so
+            </otherwise>
+        </choose>
+        left join saleorderdetail as sod on so.`code` = sod.ordercode
+        left join customer as cu on cu.id = so.customer
+        left join enterprise as e on e.enterprisenumber = so.companynumber
+        <where>
+        e.validflag = 1
+        and e.enterprisestatus = 'ON'
+            <choose>
+                <when test="params.enterprisenumber != null and params.enterprisenumber != ''">
+                    and (
+                    so.companynumber = #{params.enterprisenumber}
+                    <if test="params.subList != null and params.subList.size() > 0">
+                        <foreach collection="params.subList" item="item" index="index" >
+                            or  so.companynumber = #{item}
+                        </foreach>
+                    </if>
+
+                    )
+
+                </when>
+                <otherwise>
+                    <if test="params.province != null and params.province != ''">
+                        and e.province = #{params.province}
+                    </if>
+                    <if test="params.city != null and params.city != ''">
+                        and e.city = #{params.city}
+                    </if>
+                    <if test="params.district != null and params.district != ''">
+                        and e.district = #{params.district}
+                    </if>
+                    <if test="params.street != null and params.street != ''">
+                        and e.street = #{params.street}
+                    </if>
+                    <if test="params.committee != null and params.committee != ''">
+                        and e.committee = #{params.committee}
+                    </if>
+                </otherwise>
+            </choose>
+            <if test="params.enterprisename != null and params.enterprisename  != ''">
+                and e.enterprisename like concat("%",#{params.enterprisename},"%")
+            </if>
+            <if test="params.parententerprisename != null and params.parententerprisename  != ''">
+                and e.parententerprisename like concat("%",#{params.parententerprisename},"%")
+            </if>
+            <if test="params.starttime != null and params.starttime != ''">
+                and so.createdat &gt;= #{params.starttime}
+            </if>
+            <if test="params.filterProvince != null and params.filterProvince != ''">
+                and e.province = #{params.filterProvince}
+            </if>
+            <if test="params.filterCity != null and params.filterCity != ''">
+                and e.city = #{params.filterCity}
+            </if>
+            <if test="params.filterDistrict != null and params.filterDistrict != ''">
+                and e.district = #{params.filterDistrict}
+            </if>
+            <if test="params.filterStreet != null and params.filterStreet != ''">
+                and e.street = #{params.filterStreet}
+            </if>
+            <if test="params.filterCommittee != null and params.filterCommittee != ''">
+                and e.committee = #{params.filterCommittee}
+            </if>
+            <if test="params.endtime != null and params.endtime != ''">
+                and so.createdat &lt;= #{params.endtime}
+            </if>
+            <if test="params.identify != null and params.identify != ''">
+                and cu.idcardnum like concat("%",#{params.identify},"%")
+            </if>
+            <if test="params.nation != null and params.nation != ''">
+                and cu.nation like concat("%",#{params.nation},"%")
+            </if>
+
+            <if test="params.isNeedUploadPhoto == 1">
+                and cu.nation is null and cu.path is  null
+            </if>
+            <if test="params.isNeedUploadPhoto == -1">
+                and cu.nation is null and cu.path is not null
+            </if>
+
+
+        </where>
+        group by cu.idcardnum,so.companynumber
+        order by max(sod.createdat) DESC
+    </select>
+    <select id="getPurchaseDetailInUnit" resultType="com.gk.firework.Domain.SaleOrderDetailInfo">
+        select
+        sod.*
+        from
+        <choose>
+            <when test="params.directioncode != null and params.directioncode != ''">
+                (select so.*
+                from
+                (
+                select a.companynumber,cu.idcardnum,cu.id customerid
+                from saleorderdetail as b
+                left join saleorder as a on b.ordercode = a.code
+                left join customer as cu on cu.id = a.customer
+                where b.directioncode like concat("%",#{params.directioncode},"%")
+                GROUP BY a.companynumber,cu.idcardnum) as m
+                left join saleorder as so on so.companynumber = m.companynumber and so.customer = m.customerid)
+                as so
+            </when>
+            <otherwise>
+                saleorder as so
+            </otherwise>
+        </choose>
+        left join saleorderdetail sod on so.code = sod.ordercode
+        left join customer cu on cu.id = so.customer
+        where cu.idcardnum = #{params.identify}
+        and so.companynumber= #{params.enterprisenumber}
+        <if test="params.starttime != null and params.starttime != ''">
+            and so.createdat &gt; #{params.starttime}
+        </if>
+        <if test="params.endtime != null and params.endtime != ''">
+            and DATE_FORMAT(so.createdat ,'%Y-%m-%d') &lt;= #{params.endtime}
+        </if>
+    </select>
+    <select id="selectEarlyWarn" resultType="com.gk.firework.Domain.SaleOrderInfo">
+    SELECT
+    saleorder.customer,
+    count(detail.id) as boxnum
+    from saleorder AS saleorder
+    left join saleorderdetail as detail on detail.ordercode = saleorder.code
+    where
+    saleorder.createdat &gt;= #{starttime}
+    and saleorder.createdat &lt;= #{endtime}
+    GROUP BY saleorder.customer
+    HAVING count(detail.id) &gt;= #{min} and count(detail.id) &lt; #{max}
+  </select>
+    <select id="selectAlarm" resultType="com.gk.firework.Domain.SaleOrderInfo">
+    SELECT
+    saleorder.customer,
+    count(detail.id) as boxnum
+    from saleorder AS saleorder
+    left join saleorderdetail as detail on detail.ordercode = saleorder.code
+    where
+    saleorder.createdat &gt;= #{starttime}
+    and saleorder.createdat &lt;= #{endtime}
+    GROUP BY saleorder.customer
+    HAVING count(detail.id) &gt;= #{max}
+  </select>
+    <select id="selectByCustomer" resultType="java.lang.Long">
+    SELECT
+	enterprise.id
+    FROM saleorder AS saleorder
+    LEFT JOIN enterprise on enterprise.enterprisenumber = saleorder.companynumber
+    WHERE
+    saleorder.customer = #{customid}
+    ORDER BY createdat DESC
+    LIMIT 1
+  </select>
+    <select id="selectDailySaleReport" resultMap="DailySaleReportResultMap">
+        SELECT
+        a.itemCode,
+        a.itemName,
+        a.createdat,
+        saleNum,
+        saleAmount,
+        returnNum,
+        returnAmount,
+        saleAmount - returnAmount AS turnover
+        FROM
+        (
+        SELECT
+        detail.itemcode AS itemCode,
+        detail.itemname AS itemName,
+        count( 1 ) AS saleNum,
+        SUM( productprice.price ) AS saleAmount,
+        so.createdat
+        FROM
+        saleorderdetail AS detail
+        LEFT JOIN saleorder AS so ON so.`code` = detail.ordercode
+        LEFT JOIN productprice ON productprice.companynumber = so.companynumber
+        AND productprice.itemcode = detail.itemcode
+        <where>
+            1=1
+            AND so.createdat &gt;= #{condition.startDate}
+            AND so.createdat &lt;= #{condition.endDate}
+            <if test="condition.companynumber != null and condition.companynumber != ''">
+                AND so.companynumber = #{condition.companynumber}
+            </if>
+        </where>
+        GROUP BY
+        detail.itemcode
+        ) a
+        LEFT JOIN (
+        SELECT
+        detail.itemcode AS itemCode,
+        detail.itemname AS itemName,
+        count( 1 ) AS returnNum,
+        SUM( productprice.price ) AS returnAmount,
+        so.createdat
+        FROM
+        saleorderdetail AS detail
+        LEFT JOIN saleorder AS so ON so.`code` = detail.ordercode
+        LEFT JOIN productprice ON productprice.companynumber = so.companynumber
+        AND productprice.itemcode = detail.itemcode
+        <where>
+            1=1
+            AND so.createdat &gt;= #{condition.startDate}
+            AND so.createdat &lt;= #{condition.endDate}
+            <if test="condition.companynumber != null and condition.companynumber != ''">
+                AND so.companynumber = #{condition.companynumber}
+            </if>
+            AND detail.returnflag = 1
+        </where>
+        GROUP BY
+        detail.itemcode
+        ) b ON a.itemCode = b.itemCode
+    </select>
+    <select id="selectDataGrid" resultMap="OrderInfo">
+        select
+        so.id,
+        so.`code`,
+        so.createdat,
+        so.createdby,
+        so.customer,
+        so.idcardnum,
+        so.salesperson,
+        so.shop,
+        so.boxnum,
+        so.totalprice,
+        so.pay,
+        so.`change`,
+        so.`type`,
+        so.returnflag
+        from saleorder as so
+        <where>
+            1=1
+            AND so.createdat &gt;= #{condition.startDate}
+            AND so.createdat &lt;= #{condition.endDate}
+            <if test="condition.companynumber != null and condition.companynumber != ''">
+                AND so.companynumber = #{condition.companynumber}
+            </if>
+            <if test="condition.code != null and condition.code != ''">
+                AND so.code = #{condition.code}
+            </if>
+        </where>
+    </select>
+
+    <select id="selectDetails" resultType="com.gk.firework.Domain.SaleOrderDetailInfo">
+    SELECT
+        sod.id,
+        sod.ordercode,
+        sod.itemcode,
+        sod.itemname,
+        sod.directioncode,
+        sod.price,
+        sod.specification,
+        sod.returnflag
+     from saleorderdetail as  sod
+     where sod.ordercode = #{ordercode}
+  </select>
+    <select id="getEnterpriseSaleDetail" resultType="com.gk.firework.Domain.SaleOrderDetailInfo">
+    SELECT sod.*
+    from saleorderdetail as sod
+    LEFT JOIN saleorder as so on so.code = sod.ordercode
+    LEFT JOIN enterprise AS e ON e.enterprisenumber = so.companynumber
+    where so.companynumber = #{enterpriseNumber}
+    and sod.itemcode = #{itemcode}
+    and sod.createdat &gt;= #{starttime}
+    and sod.createdat &lt;= #{endtime}
+  </select>
+
+    <select id="selectEnterpriseEnterSellStore" resultType="java.util.Map">
+        SELECT
+        a.itemcode,
+        a.itemname,
+        a.salenum,
+        a.boxnumber,
+        round(a.salenum / a.boxnumber,2) boxnum,
+        a.saletime
+        from (
+        SELECT
+        count(sod.directioncode) salenum,
+        p.directioncode itemcode,
+        p.`name` itemname,
+        p.boxnumber,
+        max(sod.createdat) saletime
+        FROM product as p
+        left join saleorderdetail as sod on sod.itemcode = p.directioncode
+        LEFT JOIN saleorder as so on so.code = sod.ordercode
+        LEFT JOIN enterprise AS e ON e.enterprisenumber = so.companynumber
+        where p.isdel = 0
+        <if test="params.enterprisename != null and params.enterprisename  != ''">
+            and e.enterprisename like concat("%",#{params.enterprisename},"%")
+        </if>
+        <if test="params.parententerprisename != null and params.parententerprisename  != ''">
+            and e.parententerprisename like concat("%",#{params.parententerprisename},"%")
+        </if>
+        <if test="params.safetysupervision != null and params.safetysupervision != ''">
+            and e.safetysupervision = #{params.safetysupervision}
+        </if>
+        <if test="params.filterProvince != null and params.filterProvince  != ''">
+            and e.province = #{params.filterProvince}
+        </if>
+        <if test="params.filterCity != null and  params.filterCity  != ''">
+            and e.city = #{params.filterCity}
+        </if>
+        <if test="params.filterDistrict != null and params.filterDistrict  != ''">
+            and e.district = #{params.filterDistrict}
+        </if>
+        <if test="params.filterStreet != null and params.filterStreet  != ''">
+            and e.street = #{params.filterStreet}
+        </if>
+        <if test="params.filterCommittee != null and params.filterCommittee  != ''">
+            and e.committee = #{params.filterCommittee}
+        </if>
+        <if test="params.starttime != null and params.starttime != ''">
+            and sod.createdat &gt;= #{params.starttime}
+        </if>
+        <if test="params.endtime != null and params.endtime != ''">
+            and sod.createdat &lt; #{params.endtime}
+        </if>
+        <if test="params.itemname != null and params.itemname  != ''">
+            and p.name like concat("%",#{params.itemname},"%")
+        </if>
+        <if test="params.itemcode != null and params.itemcode  != ''">
+            and p.directioncode like concat("%",#{params.itemcode},"%")
+        </if>
+        group by p.directioncode
+        ) as a
+        order by salenum desc
+    </select>
+
+    <select id="selectEnterpriseSaleNumber" resultType="decimal">
+        SELECT
+        IFNULL(SUM( salenum ),0)
+        FROM
+        (
+        SELECT
+        count( 1 )/ p.boxnumber AS salenum
+        FROM
+        saleorderdetail AS sod
+        LEFT JOIN saleorder AS so ON so.`code` = sod.ordercode
+        LEFT JOIN product AS p ON p.directioncode = sod.itemcode and p.isdel = 0
+        <where>
+            so.companynumber = #{companyNumber}
+            <if test="starttime != null and starttime != ''">
+                and so.createdat &gt;= #{starttime}
+            </if>
+            <if test="endtime != null and endtime != ''">
+                and so.createdat &lt;= #{endtime}
+            </if>
+        </where>
+        GROUP BY
+        itemcode
+        ) temp
+    </select>
+    <select id="selectCitySaleNumber" resultType="decimal">
+        SELECT
+        IFNULL(SUM(salenum ),0)
+        FROM
+        (
+        SELECT
+        count( 1 )/ p.boxnumber AS salenum
+        FROM
+        saleorderdetail AS sod
+        LEFT JOIN saleorder AS so ON so.`code` = sod.ordercode
+        LEFT JOIN product AS p ON p.directioncode = sod.itemcode and p.isdel = 0
+        LEFT JOIN enterprise AS e ON so.companynumber = e.enterprisenumber
+        <where>
+            e.city = #{city}
+            and e.enterprisestatus = 'ON'
+            and e.validflag = 1
+            <if test="starttime != null and starttime != ''">
+                and so.createdat &gt;= #{starttime}
+            </if>
+            <if test="endtime != null and endtime != ''">
+                and so.createdat &lt;= #{endtime}
+            </if>
+        </where>
+        GROUP BY
+        itemcode
+        ) temp
+    </select>
+    <select id="selectSameOrder" resultMap="BaseResultMap">
+        SELECT
+        saleorder.id,
+        saleorder.`code`,
+        saleorder.createdat,
+        saleorder.createdby,
+        saleorder.customer,
+        saleorder.idcardnum,
+        saleorder.salesperson,
+        saleorder.shop,
+        saleorder.boxnum,
+        saleorder.totalprice,
+        saleorder.pay,
+        saleorder.`change`,
+        saleorder.`type`,
+        saleorder.returnflag
+        FROM
+	    saleorder AS saleorder
+	    LEFT JOIN saleorderdetail AS detail ON saleorder.`code` = detail.ordercode
+	    <where>
+            saleorder.companynumber = #{companyNumber}
+            and saleorder.customer = #{customerId}
+            and saleorder.boxnum = #{num}
+            and detail.directioncode IN
+            <foreach item="item" index="index" collection="list" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </where>
+
+    </select>
+    <select id="selectAllDailySaleReport" resultType="java.util.Map">
+        SELECT
+        count(1) saleNum,
+        IFNULL(SUM(productprice.price),0)   as  saleAmount,
+        count( if(detail.returnflag = 1,1,null)) returnNum,
+        IFNULL(SUM( if(detail.returnflag = 1,productprice.price,null) ),0)   returnAmount
+        FROM
+        saleorderdetail AS detail
+        LEFT JOIN saleorder AS so ON so.`code` = detail.ordercode
+        LEFT JOIN productprice ON productprice.companynumber = so.companynumber
+        AND productprice.itemcode = detail.itemcode
+        <where>
+            1=1
+            AND so.createdat &gt;= #{condition.startDate}
+            AND so.createdat &lt;= #{condition.endDate}
+            <if test="condition.companynumber != null and condition.companynumber != ''">
+                AND so.companynumber = #{condition.companynumber}
+            </if>
+        </where>
+
+    </select>
+    <select id="selectProductSales" resultType="java.util.Map">
+
+        select round(ifnull(sum(saledata.boxnum) ,0),2) sales
+        from (
+            select  p.directioncode,ifnull(count(0)/p.boxnumber,0) boxnum
+            from product as p
+            left join saleorderdetail as sod on p.directioncode = sod.itemcode
+            left join saleorder as so on sod.ordercode = so.code
+            left join enterprise as e on e.enterprisenumber = so.companynumber
+            where p.isdel = 0
+            and e.enterprisestatus = 'ON'
+            and e.validflag = 1
+            <if test="params.enterprisename != null and params.enterprisename  != ''">
+                and e.enterprisename like concat("%",#{params.enterprisename},"%")
+            </if>
+            <if test="params.enterprisenumber != null and params.enterprisenumber  != ''">
+                and e.enterprisenumber  = #{params.enterprisenumber}
+            </if>
+            <if test="params.parententerprisename != null and params.parententerprisename  != ''">
+                and e.parententerprisename like concat("%",#{params.parententerprisename},"%")
+            </if>
+            <if test="params.safetysupervision != null and params.safetysupervision != ''">
+                and e.safetysupervision = #{params.safetysupervision}
+            </if>
+            <if test="params.filterProvince != null and params.filterProvince  != ''">
+                and e.province = #{params.filterProvince}
+            </if>
+            <if test="params.filterCity != null and  params.filterCity  != ''">
+                and e.city = #{params.filterCity}
+            </if>
+            <if test="params.filterDistrict != null and params.filterDistrict  != ''">
+                and e.district = #{params.filterDistrict}
+            </if>
+            <if test="params.filterStreet != null and params.filterStreet  != ''">
+                and e.street = #{params.filterStreet}
+            </if>
+            <if test="params.filterCommittee != null and params.filterCommittee  != ''">
+                and e.committee = #{params.filterCommittee}
+            </if>
+            <if test="params.starttime != null and params.starttime != ''">
+                and sod.createdat &gt;= #{params.starttime}
+            </if>
+            <if test="params.endtime != null and params.endtime != ''">
+                and DATE_FORMAT(sod.createdat,'%Y-%m-%d')  &lt;= #{params.endtime}
+            </if>
+            <if test="params.itemname != null and params.itemname  != ''">
+                and p.name like concat("%",#{params.itemname},"%")
+            </if>
+            <if test="params.itemcode != null and params.itemcode  != ''">
+                and p.directioncode like concat("%",#{params.itemcode},"%")
+            </if>
+            group by p.directioncode
+        ) as saledata
+
+
+    </select>
+    <select id="selectCitySales" resultType="java.math.BigDecimal">
+        select ifnull(sum(saleorder.totalprice),0)/10000 sales
+        from saleorder as saleorder
+        left join enterprise as e on e.enterprisenumber = saleorder.companynumber
+        where e.enterprisestatus = 'ON'
+        and e.validflag = 1
+        and e.city = #{city}
+        <if test="starttime != null and starttime != ''">
+            and saleorder.createdat &gt;= #{starttime}
+        </if>
+        <if test="endtime != null and endtime != ''">
+            and saleorder.createdat &lt;= #{endtime}
+        </if>
+
+    </select>
+    <select id="selectSaleAllPerson" resultType="java.lang.Integer">
+
+    select
+    count(0) num
+    from  (
+        SELECT
+        cu.idcardnum
+        FROM
+        <choose>
+            <when test="params.directioncode != null and params.directioncode != ''">
+                (select so.*
+                from
+                (
+                select a.companynumber,cu.idcardnum,cu.id customerid
+                from saleorderdetail as b
+                left join saleorder as a on b.ordercode = a.code
+                left join customer as cu on cu.id = a.customer
+                where b.directioncode like concat("%",#{params.directioncode},"%")
+                GROUP BY a.companynumber,cu.idcardnum) as m
+                left join saleorder as so on so.companynumber = m.companynumber and so.customer = m.customerid)
+                as so
+            </when>
+            <otherwise>
+                saleorder as so
+            </otherwise>
+        </choose>
+        left join saleorderdetail as sod on so.`code` = sod.ordercode
+        left join customer as cu on cu.id = so.customer
+        left join enterprise as e on e.enterprisenumber = so.companynumber
+        <where>
+            e.validflag = 1
+            and e.enterprisestatus = 'ON'
+            <choose>
+                <when test="params.enterprisenumber != null and params.enterprisenumber != ''">
+                    and (
+                    so.companynumber = #{params.enterprisenumber}
+                    <if test="params.subList != null and params.subList.size() > 0">
+                        <foreach collection="params.subList" item="item" index="index" >
+                            or  so.companynumber = #{item}
+                        </foreach>
+                    </if>
+
+                    )
+
+                </when>
+                <otherwise>
+                    <if test="params.province != null and params.province != ''">
+                        and e.province = #{params.province}
+                    </if>
+                    <if test="params.city != null and params.city != ''">
+                        and e.city = #{params.city}
+                    </if>
+                    <if test="params.district != null and params.district != ''">
+                        and e.district = #{params.district}
+                    </if>
+                    <if test="params.street != null and params.street != ''">
+                        and e.street = #{params.street}
+                    </if>
+                    <if test="params.committee != null and params.committee != ''">
+                        and e.committee = #{params.committee}
+                    </if>
+                </otherwise>
+            </choose>
+            <if test="params.enterprisename != null and params.enterprisename  != ''">
+                and e.enterprisename like concat("%",#{params.enterprisename},"%")
+            </if>
+            <if test="params.parententerprisename != null and params.parententerprisename  != ''">
+                and e.parententerprisename like concat("%",#{params.parententerprisename},"%")
+            </if>
+            <if test="params.starttime != null and params.starttime != ''">
+                and so.createdat &gt;= #{params.starttime}
+            </if>
+            <if test="params.endtime != null and params.endtime != ''">
+                and so.createdat &lt;= #{params.endtime}
+            </if>
+            <if test="params.identify != null and params.identify != ''">
+                and cu.idcardnum like concat("%",#{params.identify},"%")
+            </if>
+            <if test="params.nation != null and params.nation != ''">
+                and cu.nation like concat("%",#{params.nation},"%")
+            </if>
+            <if test="params.isNeedUploadPhoto == 1">
+                and cu.nation is null and cu.path is  null
+            </if>
+            <if test="params.isNeedUploadPhoto == -1">
+                and cu.nation is null and cu.path is not null
+            </if>
+            <if test="params.filterProvince != null and params.filterProvince != ''">
+                and e.province = #{params.filterProvince}
+            </if>
+            <if test="params.filterCity != null and params.filterCity != ''">
+                and e.city = #{params.filterCity}
+            </if>
+            <if test="params.filterDistrict != null and params.filterDistrict != ''">
+                and e.district = #{params.filterDistrict}
+            </if>
+            <if test="params.filterStreet != null and params.filterStreet != ''">
+                and e.street = #{params.filterStreet}
+            </if>
+            <if test="params.filterCommittee != null and params.filterCommittee != ''">
+                and e.committee = #{params.filterCommittee}
+            </if>
+
+
+
+        </where>
+        group by cu.idcardnum
+        ) as res
+
+    </select>
+    <select id="selectAllSaleNum" resultType="java.lang.Integer">
+        SELECT
+        ifnull(sum(1),0)
+        FROM
+        <choose>
+            <when test="params.directioncode != null and params.directioncode != ''">
+                (select so.*
+                from
+                (
+                select a.companynumber,cu.idcardnum,cu.id customerid
+                from saleorderdetail as b
+                left join saleorder as a on b.ordercode = a.code
+                left join customer as cu on cu.id = a.customer
+                where b.directioncode like concat("%",#{params.directioncode},"%")
+                GROUP BY a.companynumber,cu.idcardnum) as m
+                left join saleorder as so on so.companynumber = m.companynumber and so.customer = m.customerid)
+                as so
+            </when>
+            <otherwise>
+                saleorder as so
+            </otherwise>
+        </choose>
+        left join saleorderdetail as sod on so.`code` = sod.ordercode
+        left join customer as cu on cu.id = so.customer
+        left join enterprise as e on e.enterprisenumber = so.companynumber
+        <where>
+            e.validflag = 1
+            and e.enterprisestatus = 'ON'
+            <choose>
+                <when test="params.enterprisenumber != null and params.enterprisenumber != ''">
+                    and (
+                    so.companynumber = #{params.enterprisenumber}
+                    <if test="params.subList != null and params.subList.size() > 0">
+                        <foreach collection="params.subList" item="item" index="index" >
+                            or  so.companynumber = #{item}
+                        </foreach>
+                    </if>
+
+                    )
+
+                </when>
+                <otherwise>
+                    <if test="params.province != null and params.province != ''">
+                        and e.province = #{params.province}
+                    </if>
+                    <if test="params.city != null and params.city != ''">
+                        and e.city = #{params.city}
+                    </if>
+                    <if test="params.district != null and params.district != ''">
+                        and e.district = #{params.district}
+                    </if>
+                    <if test="params.street != null and params.street != ''">
+                        and e.street = #{params.street}
+                    </if>
+                    <if test="params.committee != null and params.committee != ''">
+                        and e.committee = #{params.committee}
+                    </if>
+                </otherwise>
+            </choose>
+            <if test="params.enterprisename != null and params.enterprisename  != ''">
+                and e.enterprisename like concat("%",#{params.enterprisename},"%")
+            </if>
+            <if test="params.parententerprisename != null and params.parententerprisename  != ''">
+                and e.parententerprisename like concat("%",#{params.parententerprisename},"%")
+            </if>
+            <if test="params.starttime != null and params.starttime != ''">
+                and so.createdat &gt;= #{params.starttime}
+            </if>
+            <if test="params.endtime != null and params.endtime != ''">
+                and so.createdat &lt;= #{params.endtime}
+            </if>
+            <if test="params.identify != null and params.identify != ''">
+                and cu.idcardnum like concat("%",#{params.identify},"%")
+            </if>
+            <if test="params.nation != null and params.nation != ''">
+                and cu.nation like concat("%",#{params.nation},"%")
+            </if>
+            <if test="params.isNeedUploadPhoto == 1">
+                and cu.nation is null and cu.path is  null
+            </if>
+            <if test="params.isNeedUploadPhoto == -1">
+                and cu.nation is null and cu.path is not null
+            </if>
+            <if test="params.filterProvince != null and params.filterProvince != ''">
+                and e.province = #{params.filterProvince}
+            </if>
+            <if test="params.filterCity != null and params.filterCity != ''">
+                and e.city = #{params.filterCity}
+            </if>
+            <if test="params.filterDistrict != null and params.filterDistrict != ''">
+                and e.district = #{params.filterDistrict}
+            </if>
+            <if test="params.filterStreet != null and params.filterStreet != ''">
+                and e.street = #{params.filterStreet}
+            </if>
+            <if test="params.filterCommittee != null and params.filterCommittee != ''">
+                and e.committee = #{params.filterCommittee}
+            </if>
+
+
+        </where>
+
+
+    </select>
+    <select id="selectAllReturnNum" resultType="java.lang.Integer">
+        SELECT
+        ifnull( sum(sod.returnflag) ,0)
+        FROM
+        <choose>
+            <when test="params.directioncode != null and params.directioncode != ''">
+                (select so.*
+                from
+                (
+                select a.companynumber,cu.idcardnum,cu.id customerid
+                from saleorderdetail as b
+                left join saleorder as a on b.ordercode = a.code
+                left join customer as cu on cu.id = a.customer
+                where b.directioncode like concat("%",#{params.directioncode},"%")
+                GROUP BY a.companynumber,cu.idcardnum) as m
+                left join saleorder as so on so.companynumber = m.companynumber and so.customer = m.customerid)
+                as so
+            </when>
+            <otherwise>
+                saleorder as so
+            </otherwise>
+        </choose>
+        left join saleorderdetail as sod on so.`code` = sod.ordercode
+        left join customer as cu on cu.id = so.customer
+        left join enterprise as e on e.enterprisenumber = so.companynumber
+        <where>
+            e.validflag = 1
+            and e.enterprisestatus = 'ON'
+            <choose>
+                <when test="params.enterprisenumber != null and params.enterprisenumber != ''">
+                    and (
+                    so.companynumber = #{params.enterprisenumber}
+                    <if test="params.subList != null and params.subList.size() > 0">
+                        <foreach collection="params.subList" item="item" index="index" >
+                            or  so.companynumber = #{item}
+                        </foreach>
+                    </if>
+
+                    )
+
+                </when>
+                <otherwise>
+                    <if test="params.province != null and params.province != ''">
+                        and e.province = #{params.province}
+                    </if>
+                    <if test="params.city != null and params.city != ''">
+                        and e.city = #{params.city}
+                    </if>
+                    <if test="params.district != null and params.district != ''">
+                        and e.district = #{params.district}
+                    </if>
+                    <if test="params.street != null and params.street != ''">
+                        and e.street = #{params.street}
+                    </if>
+                    <if test="params.committee != null and params.committee != ''">
+                        and e.committee = #{params.committee}
+                    </if>
+                </otherwise>
+            </choose>
+            <if test="params.enterprisename != null and params.enterprisename  != ''">
+                and e.enterprisename like concat("%",#{params.enterprisename},"%")
+            </if>
+            <if test="params.parententerprisename != null and params.parententerprisename  != ''">
+                and e.parententerprisename like concat("%",#{params.parententerprisename},"%")
+            </if>
+            <if test="params.starttime != null and params.starttime != ''">
+                and so.createdat &gt;= #{params.starttime}
+            </if>
+            <if test="params.endtime != null and params.endtime != ''">
+                and so.createdat &lt;= #{params.endtime}
+            </if>
+            <if test="params.identify != null and params.identify != ''">
+                and cu.idcardnum like concat("%",#{params.identify},"%")
+            </if>
+            <if test="params.nation != null and params.nation != ''">
+                and cu.nation like concat("%",#{params.nation},"%")
+            </if>
+            <if test="params.isNeedUploadPhoto == 1">
+                and cu.nation is null and cu.path is  null
+            </if>
+            <if test="params.isNeedUploadPhoto == -1">
+                and cu.nation is null and cu.path is not null
+            </if>
+            <if test="params.filterProvince != null and params.filterProvince != ''">
+                and e.province = #{params.filterProvince}
+            </if>
+            <if test="params.filterCity != null and params.filterCity != ''">
+                and e.city = #{params.filterCity}
+            </if>
+            <if test="params.filterDistrict != null and params.filterDistrict != ''">
+                and e.district = #{params.filterDistrict}
+            </if>
+            <if test="params.filterStreet != null and params.filterStreet != ''">
+                and e.street = #{params.filterStreet}
+            </if>
+            <if test="params.filterCommittee != null and params.filterCommittee != ''">
+                and e.committee = #{params.filterCommittee}
+            </if>
+
+
+        </where>
+    </select>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/SaleProductInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/SaleProductInfoMapper.xml
new file mode 100644
index 0000000..4378f49
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/SaleProductInfoMapper.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.SaleProductInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.SaleProductInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="itemcode" property="itemcode" jdbcType="VARCHAR" />
+    <result column="itemname" property="itemname" jdbcType="VARCHAR" />
+    <result column="directioncode" property="directioncode" jdbcType="VARCHAR" />
+    <result column="price" property="price" jdbcType="DECIMAL" />
+    <result column="specification" property="specification" jdbcType="VARCHAR" />
+    <result column="createdby" property="createdby" jdbcType="VARCHAR" />
+    <result column="createdat" property="createdat" jdbcType="TIMESTAMP" />
+    <result column="isuse" property="isuse" jdbcType="TINYINT" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    id, itemcode, itemname, directioncode, price, specification, createdby, createdat,isuse
+  </sql>
+  <select id="selectRandom" resultType="com.gk.firework.Domain.SaleProductInfo">
+    SELECT *from saleproduct
+    where isuse = 0
+    ORDER BY RAND()
+    limit #{n}
+  </select>
+
+
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/SecuritySupervisoryMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/SecuritySupervisoryMapper.xml
new file mode 100644
index 0000000..5e1e2bd
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/SecuritySupervisoryMapper.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.SecuritySupervisoryMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.SecuritySupervisory" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="level" property="level" jdbcType="VARCHAR" />
+    <result column="code" property="code" jdbcType="VARCHAR" />
+    <result column="name" property="name" jdbcType="VARCHAR" />
+    <result column="createby" property="createby" jdbcType="BIGINT" />
+    <result column="createbyname" property="createbyname" jdbcType="VARCHAR" />
+    <result column="updateby" property="updateby" jdbcType="BIGINT" />
+    <result column="updatebyname" property="updatebyname" jdbcType="VARCHAR" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+  </resultMap>
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/SelfCheckInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/SelfCheckInfoMapper.xml
new file mode 100644
index 0000000..887a66c
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/SelfCheckInfoMapper.xml
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.SelfCheckInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.SelfCheckInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="type" property="type" jdbcType="VARCHAR" />
+    <result column="content" property="content" jdbcType="VARCHAR" />
+    <result column="standard" property="standard" jdbcType="VARCHAR" />
+    <result column="sort" property="sort" jdbcType="INTEGER" />
+    <result column="isdel" property="isdel" jdbcType="TINYINT" />
+    <result column="description" property="description" jdbcType="VARCHAR" />
+    <result column="createdby" property="createdby" jdbcType="VARCHAR" />
+    <result column="createddate" property="createddate" jdbcType="TIMESTAMP" />
+    <result column="modifiedby" property="modifiedby" jdbcType="VARCHAR" />
+    <result column="modifieddate" property="modifieddate" jdbcType="TIMESTAMP" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, type, content, standard, sort, isdel, description, createdby, createddate, modifiedby,
+    modifieddate
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select
+    <include refid="Base_Column_List" />
+    from selfcheck
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <select id="selctByType" resultType="com.gk.firework.Domain.SelfCheckInfo">
+    select
+    <include refid="Base_Column_List" />
+    from selfcheck
+    where isdel = 0
+    and type = #{type}
+    ORDER BY sort ASC
+  </select>
+  <select id="selectDataGrid" resultType="com.gk.firework.Domain.SelfCheckInfo">
+    select
+    <include refid="Base_Column_List" />
+    from selfcheck
+    <where>
+      isdel = 0
+      <if test="condition.type != null and condition.type != ''">
+        and type = #{condition.type}
+      </if>
+      <if test="condition.content != null and condition.content != ''">
+        and content like concat('%',#{condition.content},'%')
+      </if>
+    </where>
+  </select>
+  <select id="selectByIds" resultType="com.gk.firework.Domain.SelfCheckInfo">
+    select
+    <include refid="Base_Column_List" />
+    from selfcheck
+    <where>
+      isdel = 0
+      <if test="idList != null and idList.size > 0">
+        and id in
+        <foreach collection="idList" index="index" item="item" open="(" separator="," close=")">
+          #{item}
+        </foreach>
+      </if>
+    </where>
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from selfcheck
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.SelfCheckInfo" >
+    <!--          -->
+    update selfcheck
+    <set >
+      <if test="type != null" >
+        type = #{type,jdbcType=VARCHAR},
+      </if>
+      <if test="content != null" >
+        content = #{content,jdbcType=VARCHAR},
+      </if>
+      <if test="standard != null" >
+        standard = #{standard,jdbcType=VARCHAR},
+      </if>
+      <if test="sort != null" >
+        sort = #{sort,jdbcType=INTEGER},
+      </if>
+      <if test="isdel != null" >
+        isdel = #{isdel,jdbcType=TINYINT},
+      </if>
+      <if test="description != null" >
+        description = #{description,jdbcType=VARCHAR},
+      </if>
+      <if test="createdby != null" >
+        createdby = #{createdby,jdbcType=VARCHAR},
+      </if>
+      <if test="createddate != null" >
+        createddate = #{createddate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="modifiedby != null" >
+        modifiedby = #{modifiedby,jdbcType=VARCHAR},
+      </if>
+      <if test="modifieddate != null" >
+        modifieddate = #{modifieddate,jdbcType=TIMESTAMP},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.SelfCheckInfo" >
+    <!--          -->
+    update selfcheck
+    set type = #{type,jdbcType=VARCHAR},
+      content = #{content,jdbcType=VARCHAR},
+      standard = #{standard,jdbcType=VARCHAR},
+      sort = #{sort,jdbcType=INTEGER},
+      isdel = #{isdel,jdbcType=TINYINT},
+      description = #{description,jdbcType=VARCHAR},
+      createdby = #{createdby,jdbcType=VARCHAR},
+      createddate = #{createddate,jdbcType=TIMESTAMP},
+      modifiedby = #{modifiedby,jdbcType=VARCHAR},
+      modifieddate = #{modifieddate,jdbcType=TIMESTAMP}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/SelfCheckReportMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/SelfCheckReportMapper.xml
new file mode 100644
index 0000000..93982f7
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/SelfCheckReportMapper.xml
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.SelfCheckReportMapper">
+    <resultMap id="SelfCheckReportMappper" type="com.gk.firework.Domain.SelfCheckReport">
+        <id column="id" property="id" jdbcType="BIGINT"/>
+        <result column="eid" property="eid" jdbcType="BIGINT"/>
+        <result column="yhlevel" property="yhlevel" jdbcType="TINYINT"/>
+        <result column="status" property="status" jdbcType="TINYINT"/>
+        <result column="price" property="price" jdbcType="DECIMAL"/>
+        <result column="checktime" property="checktime" jdbcType="TIMESTAMP"/>
+        <result column="endtime" property="endtime" jdbcType="TIMESTAMP"/>
+        <result column="ename" property="ename" jdbcType="VARCHAR"/>
+        <result column="chargeperson" property="chargeperson" jdbcType="VARCHAR"/>
+        <result column="yhdesc" property="yhdesc" jdbcType="VARCHAR"/>
+        <result column="solution" property="solution" jdbcType="VARCHAR"/>
+    </resultMap>
+
+    <sql id="all_columns">
+        id,eid,status,yhlevel,price,checktime,endtime,ename,chargeperson,yhdesc,solution
+    </sql>
+
+    <select id="selectByReportId" resultMap="SelfCheckReportMappper" parameterType="java.lang.Long">
+        select
+        <include refid="all_columns"/>
+        from selfcheckreport
+        where id = #{id,jdbcType=BIGINT}
+    </select>
+
+    <select id="selectReportListByCondition" resultMap="SelfCheckReportMappper">
+        select
+        <include refid="all_columns"/>
+        from selfcheckreport
+        where 1=1
+        <if test="eid > 0 ">
+            and eid = #{eid,jdbcType=BIGINT}
+        </if>
+        <if test="status > 0">
+            and status = #{status,jdbcType=TINYINT}
+        </if>
+        <if test="yhlevel > 0">
+            and yhlevel = #{yhlevel,jdbcType=TINYINT}
+        </if>
+    </select>
+
+    <select id="selectReportListByAllCondition" resultMap="SelfCheckReportMappper">
+        select
+        <include refid="all_columns"/>
+        from selfcheckreport
+        <where>
+            1=1
+            <if test="eidList != null and eidList.size() > 0 ">
+                and eid in
+                <foreach collection="eidList" item="eeid" index="index" open="(" close=")" separator=",">
+                    #{eeid}
+                </foreach>
+            </if>
+            <if test="status > 0">
+                and status = #{status}
+            </if>
+            <if test="yhlevel > 0">
+                and yhlevel = #{yhlevel}
+            </if>
+            <if test="startTime != null">
+                and checktime >= #{startTime}
+            </if>
+            <if test="endTime != null">
+                and checktime &lt;= #{endTime}
+            </if>
+        </where>
+    </select>
+
+    <select id="selectReportListWithEnterpriseIdList" resultMap="SelfCheckReportMappper">
+        select
+        <include refid="all_columns"/>
+        from selfcheckreport
+        <where>
+            1=1
+            <if test="eidList != null and eidList.size() > 0 ">
+                and eid in
+                <foreach collection="eidList" item="eeid" index="index" open="(" close=")" separator=",">
+                    #{eeid}
+                </foreach>
+            </if>
+            <if test="status > 0">
+                and status = #{status}
+            </if>
+            <if test="yhlevel > 0">
+                and yhlevel = #{yhlevel}
+            </if>
+            <if test="startTime != null">
+                and checktime >= #{startTime}
+            </if>
+            <if test="endTime != null">
+                and checktime &lt;= #{endTime}
+            </if>
+        </where>
+    </select>
+
+    <select id="selectReportListWithoutEnterpriseIdList" resultMap="SelfCheckReportMappper">
+        select
+        <include refid="all_columns"/>
+        from selfcheckreport
+        <where>
+            1=1
+            <if test="status > 0">
+                and status = #{status}
+            </if>
+            <if test="yhlevel > 0">
+                and yhlevel = #{yhlevel}
+            </if>
+            <if test="startTime != null">
+                and checktime >= #{startTime}
+            </if>
+            <if test="endTime != null">
+                and checktime &lt;= #{endTime}
+            </if>
+        </where>
+    </select>
+
+    <update id="updateReport" parameterType="com.gk.firework.Domain.SelfCheckReport">
+        update selfcheckreport
+        <set>
+            <if test="yhlevel > 0">
+                yhlevel = #{yhlevel,jdbcType=TINYINT},
+            </if>
+            <if test="status > 0">
+                status = #{status,jdbcType=TINYINT},
+            </if>
+            <if test="price != null">
+                price = #{price,jdbcType=DECIMAL},
+            </if>
+            <if test="endtime != null">
+                endtime = #{endtime,jdbcType=TIMESTAMP},
+            </if>
+            <if test="chargeperson != null">
+                chargeperson = #{chargeperson,jdbcType=VARCHAR},
+            </if>
+            <if test="yhdesc != null">
+                yhdesc = #{yhdesc,jdbcType=VARCHAR},
+            </if>
+            <if test="solution != null">
+                solution = #{solution,jdbcType=VARCHAR},
+            </if>
+        </set>
+        WHERE id = #{id,jdbcType=BIGINT}
+    </update>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/SmsLogInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/SmsLogInfoMapper.xml
new file mode 100644
index 0000000..33e3fb1
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/SmsLogInfoMapper.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.SmsLogInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.SmsLogInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="mobile" property="mobile" jdbcType="VARCHAR" />
+    <result column="sendtime" property="sendtime" jdbcType="TIMESTAMP" />
+    <result column="times" property="times" jdbcType="INTEGER" />
+    <result column="type" property="type" jdbcType="TINYINT"/>
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, mobile, sendtime, times,type
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select
+    <include refid="Base_Column_List" />
+    from smslog
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <select id="selectByTel" resultType="com.gk.firework.Domain.SmsLogInfo">
+    select
+    <include refid="Base_Column_List" />
+    from smslog
+    where mobile = '${mobile}'
+    and sendtime &gt;= '${starttime}'
+    and sendtime &lt;= '${endtime}'
+    and type = '${type}'
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from smslog
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <delete id="deleteByTime">
+    delete from smslog
+    where sendtime &lt;= '${seventime}'
+  </delete>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.SmsLogInfo" >
+    <!--          -->
+    update smslog
+    <set >
+      <if test="mobile != null" >
+        mobile = #{mobile,jdbcType=VARCHAR},
+      </if>
+      <if test="sendtime != null" >
+        sendtime = #{sendtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="times != null" >
+        times = #{times,jdbcType=INTEGER},
+      </if>
+      <if test="type != null">
+        type = #{type,jdbcType=TINYINT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.SmsLogInfo" >
+    <!--          -->
+    update smslog
+    set mobile = #{mobile,jdbcType=VARCHAR},
+      sendtime = #{sendtime,jdbcType=TIMESTAMP},
+      times = #{times,jdbcType=INTEGER},
+      type = #{type,jdbcType=TINYINT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/SoldNoStockInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/SoldNoStockInfoMapper.xml
new file mode 100644
index 0000000..dbcc9e5
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/SoldNoStockInfoMapper.xml
@@ -0,0 +1,264 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.SoldNoStockInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.SoldNoStockInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="directioncode" property="directioncode" jdbcType="VARCHAR" />
+    <result column="itemcode" property="itemcode" jdbcType="VARCHAR" />
+    <result column="itemname" property="itemname" jdbcType="VARCHAR" />
+    <result column="salestime" property="salestime" jdbcType="TIMESTAMP" />
+    <result column="salesperson" property="salesperson" jdbcType="VARCHAR" />
+    <result column="createdat" property="createdat" jdbcType="TIMESTAMP" />
+    <result column="createdby" property="createdby" jdbcType="VARCHAR" />
+    <result column="handler" property="handler" jdbcType="VARCHAR" />
+    <result column="handledat" property="handledat" jdbcType="TIMESTAMP" />
+    <result column="entryorder" property="entryorder" jdbcType="VARCHAR" />
+    <result column="flag" property="flag" jdbcType="TINYINT" />
+    <result column="content" property="content" jdbcType="VARCHAR" />
+    <result column="remark" property="remark" jdbcType="VARCHAR" />
+    <result column="companynumber" property="companynumber" jdbcType="VARCHAR" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, directioncode, itemcode, itemname, salestime, salesperson, createdat, createdby,
+    handler, handledat, entryorder, flag, content, remark, companynumber
+  </sql>
+    <insert id="insertBatch">
+      insert into
+      soldnostock
+      <trim prefix="(" suffix=") values" suffixOverrides=",">
+        directioncode,
+        itemcode,
+        itemname,
+        salestime,
+        salesperson,
+        createdat,
+        createdby,
+        handler,
+        handledat,
+        entryorder,
+        flag,
+        content,
+        remark,
+        companynumber,
+      </trim>
+      <foreach collection="list" item="item" open="(" close=")" separator=",">
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+          #{item.directioncode},
+          #{item.itemcode},
+          #{item.itemname},
+          #{item.salestime},
+          #{item.salesperson},
+          #{item.createdat},
+          #{item.createdby},
+          #{item.handler},
+          #{item.handledat},
+          #{item.entryorder},
+          #{item.flag},
+          #{item.content},
+          #{item.remark},
+          #{item.companynumber},
+        </trim>
+      </foreach>
+
+    </insert>
+
+    <select id="selectSoldNoStockDataGrid" resultMap="BaseResultMap">
+    select
+    <include refid="Base_Column_List"/>
+    from soldnostock
+    <where>
+      1=1
+      and flag = 0
+      <if test="condition.directionCode != null and condition.directionCode != ''">
+        and directioncode = #{condition.directionCode}
+      </if>
+      <if test="condition.companyNumber != null and condition.companyNumber != ''">
+        and companynumber = #{condition.companyNumber}
+      </if>
+    </where>
+
+  </select>
+  <!--<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    &lt;!&ndash;          &ndash;&gt;
+    select
+    <include refid="Base_Column_List" />
+    from soldnostock
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    &lt;!&ndash;          &ndash;&gt;
+    delete from soldnostock
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.gk.firework.Domain.SoldNoStockInfo" >
+    &lt;!&ndash;          &ndash;&gt;
+    insert into soldnostock (id, directioncode, itemcode,
+      itemname, salestime, salesperson,
+      createdat, createdby, handler,
+      handledat, entryorder, flag,
+      content, remark)
+    values (#{id,jdbcType=BIGINT}, #{directioncode,jdbcType=VARCHAR}, #{itemcode,jdbcType=VARCHAR},
+      #{itemname,jdbcType=VARCHAR}, #{salestime,jdbcType=TIMESTAMP}, #{salesperson,jdbcType=VARCHAR},
+      #{createdat,jdbcType=TIMESTAMP}, #{createdby,jdbcType=VARCHAR}, #{handler,jdbcType=VARCHAR},
+      #{handledat,jdbcType=TIMESTAMP}, #{entryorder,jdbcType=VARCHAR}, #{flag,jdbcType=TINYINT},
+      #{content,jdbcType=VARCHAR}, #{remark,jdbcType=VARCHAR})
+  </insert>
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.SoldNoStockInfo" >
+    &lt;!&ndash;          &ndash;&gt;
+    insert into soldnostock
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="directioncode != null" >
+        directioncode,
+      </if>
+      <if test="itemcode != null" >
+        itemcode,
+      </if>
+      <if test="itemname != null" >
+        itemname,
+      </if>
+      <if test="salestime != null" >
+        salestime,
+      </if>
+      <if test="salesperson != null" >
+        salesperson,
+      </if>
+      <if test="createdat != null" >
+        createdat,
+      </if>
+      <if test="createdby != null" >
+        createdby,
+      </if>
+      <if test="handler != null" >
+        handler,
+      </if>
+      <if test="handledat != null" >
+        handledat,
+      </if>
+      <if test="entryorder != null" >
+        entryorder,
+      </if>
+      <if test="flag != null" >
+        flag,
+      </if>
+      <if test="content != null" >
+        content,
+      </if>
+      <if test="remark != null" >
+        remark,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="directioncode != null" >
+        #{directioncode,jdbcType=VARCHAR},
+      </if>
+      <if test="itemcode != null" >
+        #{itemcode,jdbcType=VARCHAR},
+      </if>
+      <if test="itemname != null" >
+        #{itemname,jdbcType=VARCHAR},
+      </if>
+      <if test="salestime != null" >
+        #{salestime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="salesperson != null" >
+        #{salesperson,jdbcType=VARCHAR},
+      </if>
+      <if test="createdat != null" >
+        #{createdat,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createdby != null" >
+        #{createdby,jdbcType=VARCHAR},
+      </if>
+      <if test="handler != null" >
+        #{handler,jdbcType=VARCHAR},
+      </if>
+      <if test="handledat != null" >
+        #{handledat,jdbcType=TIMESTAMP},
+      </if>
+      <if test="entryorder != null" >
+        #{entryorder,jdbcType=VARCHAR},
+      </if>
+      <if test="flag != null" >
+        #{flag,jdbcType=TINYINT},
+      </if>
+      <if test="content != null" >
+        #{content,jdbcType=VARCHAR},
+      </if>
+      <if test="remark != null" >
+        #{remark,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.SoldNoStockInfo" >
+    &lt;!&ndash;          &ndash;&gt;
+    update soldnostock
+    <set >
+      <if test="directioncode != null" >
+        directioncode = #{directioncode,jdbcType=VARCHAR},
+      </if>
+      <if test="itemcode != null" >
+        itemcode = #{itemcode,jdbcType=VARCHAR},
+      </if>
+      <if test="itemname != null" >
+        itemname = #{itemname,jdbcType=VARCHAR},
+      </if>
+      <if test="salestime != null" >
+        salestime = #{salestime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="salesperson != null" >
+        salesperson = #{salesperson,jdbcType=VARCHAR},
+      </if>
+      <if test="createdat != null" >
+        createdat = #{createdat,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createdby != null" >
+        createdby = #{createdby,jdbcType=VARCHAR},
+      </if>
+      <if test="handler != null" >
+        handler = #{handler,jdbcType=VARCHAR},
+      </if>
+      <if test="handledat != null" >
+        handledat = #{handledat,jdbcType=TIMESTAMP},
+      </if>
+      <if test="entryorder != null" >
+        entryorder = #{entryorder,jdbcType=VARCHAR},
+      </if>
+      <if test="flag != null" >
+        flag = #{flag,jdbcType=TINYINT},
+      </if>
+      <if test="content != null" >
+        content = #{content,jdbcType=VARCHAR},
+      </if>
+      <if test="remark != null" >
+        remark = #{remark,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.SoldNoStockInfo" >
+    &lt;!&ndash;          &ndash;&gt;
+    update soldnostock
+    set directioncode = #{directioncode,jdbcType=VARCHAR},
+      itemcode = #{itemcode,jdbcType=VARCHAR},
+      itemname = #{itemname,jdbcType=VARCHAR},
+      salestime = #{salestime,jdbcType=TIMESTAMP},
+      salesperson = #{salesperson,jdbcType=VARCHAR},
+      createdat = #{createdat,jdbcType=TIMESTAMP},
+      createdby = #{createdby,jdbcType=VARCHAR},
+      handler = #{handler,jdbcType=VARCHAR},
+      handledat = #{handledat,jdbcType=TIMESTAMP},
+      entryorder = #{entryorder,jdbcType=VARCHAR},
+      flag = #{flag,jdbcType=TINYINT},
+      content = #{content,jdbcType=VARCHAR},
+      remark = #{remark,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=BIGINT}
+  </update>-->
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/StandDeviceToolsLegerMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/StandDeviceToolsLegerMapper.xml
new file mode 100644
index 0000000..71cd5ab
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/StandDeviceToolsLegerMapper.xml
@@ -0,0 +1,268 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.StandDeviceToolsLegerMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.StandardDeviceToolsLeger" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="devicename" property="devicename" jdbcType="VARCHAR" />
+    <result column="num" property="num" jdbcType="INTEGER" />
+    <result column="maintaincontent" property="maintaincontent" jdbcType="VARCHAR" />
+    <result column="maintaintime" property="maintaintime" jdbcType="TIMESTAMP" />
+    <result column="maintainperson" property="maintainperson" jdbcType="VARCHAR" />
+    <result column="memo" property="memo" jdbcType="VARCHAR" />
+    <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
+    <result column="createby" property="createby" jdbcType="BIGINT" />
+    <result column="createbyname" property="createbyname" jdbcType="VARCHAR" />
+    <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+    <result column="updateby" property="updateby" jdbcType="BIGINT" />
+    <result column="updatebyname" property="updatebyname" jdbcType="VARCHAR" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+    <result column="enterprisenumber" property="enterprisenumber" jdbcType="VARCHAR" />
+    <result column="enterprisename" property="enterprisename" jdbcType="VARCHAR" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, devicename, num, maintaincontent, maintaintime, maintainperson, memo, createtime,
+    createby, createbyname, updatetime, updateby, updatebyname, validflag, enterprisenumber,
+    enterprisename
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select
+    <include refid="Base_Column_List" />
+    from standdevicetoolsleger
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+    <select id="selectPages" resultType="com.gk.firework.Domain.StandardDeviceToolsLeger">
+    select *
+    from standdevicetoolsleger as sgl
+      left join enterprise as e on e.enterprisenumber = sgl.enterprisenumber
+      where  sgl.validflag = 1
+      <choose>
+        <when test="params.enterprisenumber != null and params.enterprisenumber !=''">
+          and sgl.enterprisenumber = #{params.enterprisenumber}
+        </when>
+        <otherwise>
+          <if test="params.enterprisename != null and params.enterprisename != ''">
+            and e.enterprisename like concat("%",#{params.enterprisename},"%")
+          </if>
+          <if test="params.safetysupervision != null and params.safetysupervision != ''">
+            and e.safetysupervision = #{params.safetysupervision}
+          </if>
+          <if test="params.province != null and params.province != ''">
+            and e.province = #{params.province}
+          </if>
+          <if test="params.city != null and params.city != ''">
+            and e.city = #{params.city}
+          </if>
+          <if test="params.district != null and params.district != ''">
+            and e.district = #{params.district}
+          </if>
+          <if test="params.street != null and params.street != ''">
+            and e.street = #{params.street}
+          </if>
+          <if test="params.committee != null and params.committee != ''">
+            and e.committee = #{params.committee}
+          </if>
+        </otherwise>
+      </choose>
+      <if test="params.filterProvince != null and params.filterProvince  != ''">
+        and e.province = #{params.filterProvince}
+      </if>
+      <if test="params.filterCity != null and  params.filterCity  != ''">
+        and e.city = #{params.filterCity}
+      </if>
+      <if test="params.filterDistrict != null and params.filterDistrict  != ''">
+        and e.district = #{params.filterDistrict}
+      </if>
+      <if test="params.filterStreet != null and params.filterStreet  != ''">
+        and e.street = #{params.filterStreet}
+      </if>
+      <if test="params.filterCommittee != null and params.filterCommittee  != ''">
+        and e.committee = #{params.filterCommittee}
+      </if>
+      order by sgl.createtime
+    </select>
+    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from standdevicetoolsleger
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.StandardDeviceToolsLeger" >
+    <!--          -->
+    insert into standdevicetoolsleger
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="devicename != null" >
+        devicename,
+      </if>
+      <if test="num != null" >
+        num,
+      </if>
+      <if test="maintaincontent != null" >
+        maintaincontent,
+      </if>
+      <if test="maintaintime != null" >
+        maintaintime,
+      </if>
+      <if test="maintainperson != null" >
+        maintainperson,
+      </if>
+      <if test="memo != null" >
+        memo,
+      </if>
+      <if test="createtime != null" >
+        createtime,
+      </if>
+      <if test="createby != null" >
+        createby,
+      </if>
+      <if test="createbyname != null" >
+        createbyname,
+      </if>
+      <if test="updatetime != null" >
+        updatetime,
+      </if>
+      <if test="updateby != null" >
+        updateby,
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname,
+      </if>
+      <if test="validflag != null" >
+        validflag,
+      </if>
+      <if test="enterprisenumber != null" >
+        enterprisenumber,
+      </if>
+      <if test="enterprisename != null" >
+        enterprisename,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="devicename != null" >
+        #{devicename,jdbcType=VARCHAR},
+      </if>
+      <if test="num != null" >
+        #{num,jdbcType=INTEGER},
+      </if>
+      <if test="maintaincontent != null" >
+        #{maintaincontent,jdbcType=VARCHAR},
+      </if>
+      <if test="maintaintime != null" >
+        #{maintaintime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="maintainperson != null" >
+        #{maintainperson,jdbcType=VARCHAR},
+      </if>
+      <if test="memo != null" >
+        #{memo,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        #{validflag,jdbcType=BIT},
+      </if>
+      <if test="enterprisenumber != null" >
+        #{enterprisenumber,jdbcType=VARCHAR},
+      </if>
+      <if test="enterprisename != null" >
+        #{enterprisename,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.StandardDeviceToolsLeger" >
+    <!--          -->
+    update standdevicetoolsleger
+    <set >
+      <if test="devicename != null" >
+        devicename = #{devicename,jdbcType=VARCHAR},
+      </if>
+      <if test="num != null" >
+        num = #{num,jdbcType=INTEGER},
+      </if>
+      <if test="maintaincontent != null" >
+        maintaincontent = #{maintaincontent,jdbcType=VARCHAR},
+      </if>
+      <if test="maintaintime != null" >
+        maintaintime = #{maintaintime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="maintainperson != null" >
+        maintainperson = #{maintainperson,jdbcType=VARCHAR},
+      </if>
+      <if test="memo != null" >
+        memo = #{memo,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        createtime = #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        createby = #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        createbyname = #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        updateby = #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        validflag = #{validflag,jdbcType=BIT},
+      </if>
+      <if test="enterprisenumber != null" >
+        enterprisenumber = #{enterprisenumber,jdbcType=VARCHAR},
+      </if>
+      <if test="enterprisename != null" >
+        enterprisename = #{enterprisename,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.StandardDeviceToolsLeger" >
+    <!--          -->
+    update standdevicetoolsleger
+    set devicename = #{devicename,jdbcType=VARCHAR},
+      num = #{num,jdbcType=INTEGER},
+      maintaincontent = #{maintaincontent,jdbcType=VARCHAR},
+      maintaintime = #{maintaintime,jdbcType=TIMESTAMP},
+      maintainperson = #{maintainperson,jdbcType=VARCHAR},
+      memo = #{memo,jdbcType=VARCHAR},
+      createtime = #{createtime,jdbcType=TIMESTAMP},
+      createby = #{createby,jdbcType=BIGINT},
+      createbyname = #{createbyname,jdbcType=VARCHAR},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      updateby = #{updateby,jdbcType=BIGINT},
+      updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      validflag = #{validflag,jdbcType=BIT},
+      enterprisenumber = #{enterprisenumber,jdbcType=VARCHAR},
+      enterprisename = #{enterprisename,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/StandHiddenDangerLegerMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/StandHiddenDangerLegerMapper.xml
new file mode 100644
index 0000000..2a9b14b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/StandHiddenDangerLegerMapper.xml
@@ -0,0 +1,279 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.StandHiddenDangerLegerMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.StandardHiddenDangerLeger" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="checktime" property="checktime" jdbcType="TIMESTAMP" />
+    <result column="content" property="content" jdbcType="VARCHAR" />
+    <result column="type" property="type" jdbcType="VARCHAR" />
+    <result column="rectifymethod" property="rectifymethod" jdbcType="VARCHAR" />
+    <result column="rectifydeadline" property="rectifydeadline" jdbcType="TIMESTAMP" />
+    <result column="rectifyperson" property="rectifyperson" jdbcType="VARCHAR" />
+    <result column="rectifystatus" property="rectifystatus" jdbcType="VARCHAR" />
+    <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
+    <result column="createby" property="createby" jdbcType="BIGINT" />
+    <result column="createbyname" property="createbyname" jdbcType="VARCHAR" />
+    <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+    <result column="updateby" property="updateby" jdbcType="BIGINT" />
+    <result column="updatebyname" property="updatebyname" jdbcType="VARCHAR" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+    <result column="enterprisenumber" property="enterprisenumber" jdbcType="VARCHAR" />
+    <result column="enterprisename" property="enterprisename" jdbcType="VARCHAR" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, checktime, content, type, rectifymethod, rectifydeadline, rectifyperson, rectifystatus,
+    createtime, createby, createbyname, updatetime, updateby, updatebyname, validflag,
+    enterprisenumber, enterprisename
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select
+    <include refid="Base_Column_List" />
+    from standhiddendangerleger
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <select id="selectPages" resultType="com.gk.firework.Domain.StandardHiddenDangerLeger">
+    select *
+    from standhiddendangerleger as sgl
+    left join enterprise as e on e.enterprisenumber = sgl.enterprisenumber
+    where  sgl.validflag = 1
+    <choose>
+      <when test="params.enterprisenumber != null and params.enterprisenumber !=''">
+        and sgl.enterprisenumber = #{params.enterprisenumber}
+      </when>
+      <otherwise>
+        <if test="params.enterprisename != null and params.enterprisename != ''">
+          and e.enterprisename like concat("%",#{params.enterprisename},"%")
+        </if>
+        <if test="params.safetysupervision != null and params.safetysupervision != ''">
+          and e.safetysupervision = #{params.safetysupervision}
+        </if>
+        <if test="params.province != null and params.province != ''">
+          and e.province = #{params.province}
+        </if>
+        <if test="params.city != null and params.city != ''">
+          and e.city = #{params.city}
+        </if>
+        <if test="params.district != null and params.district != ''">
+          and e.district = #{params.district}
+        </if>
+        <if test="params.street != null and params.street != ''">
+          and e.street = #{params.street}
+        </if>
+        <if test="params.committee != null and params.committee != ''">
+          and e.committee = #{params.committee}
+        </if>
+      </otherwise>
+    </choose>
+    <if test="params.filterProvince != null and params.filterProvince  != ''">
+      and e.province = #{params.filterProvince}
+    </if>
+    <if test="params.filterCity != null and  params.filterCity  != ''">
+      and e.city = #{params.filterCity}
+    </if>
+    <if test="params.filterDistrict != null and params.filterDistrict  != ''">
+      and e.district = #{params.filterDistrict}
+    </if>
+    <if test="params.filterStreet != null and params.filterStreet  != ''">
+      and e.street = #{params.filterStreet}
+    </if>
+    <if test="params.filterCommittee != null and params.filterCommittee  != ''">
+      and e.committee = #{params.filterCommittee}
+    </if>
+    order by sgl.createtime
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from standhiddendangerleger
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.StandardHiddenDangerLeger" >
+    <!--          -->
+    insert into standhiddendangerleger
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="checktime != null" >
+        checktime,
+      </if>
+      <if test="content != null" >
+        content,
+      </if>
+      <if test="type != null" >
+        type,
+      </if>
+      <if test="rectifymethod != null" >
+        rectifymethod,
+      </if>
+      <if test="rectifydeadline != null" >
+        rectifydeadline,
+      </if>
+      <if test="rectifyperson != null" >
+        rectifyperson,
+      </if>
+      <if test="rectifystatus != null" >
+        rectifystatus,
+      </if>
+      <if test="createtime != null" >
+        createtime,
+      </if>
+      <if test="createby != null" >
+        createby,
+      </if>
+      <if test="createbyname != null" >
+        createbyname,
+      </if>
+      <if test="updatetime != null" >
+        updatetime,
+      </if>
+      <if test="updateby != null" >
+        updateby,
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname,
+      </if>
+      <if test="validflag != null" >
+        validflag,
+      </if>
+      <if test="enterprisenumber != null" >
+        enterprisenumber,
+      </if>
+      <if test="enterprisename != null" >
+        enterprisename,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="checktime != null" >
+        #{checktime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="content != null" >
+        #{content,jdbcType=VARCHAR},
+      </if>
+      <if test="type != null" >
+        #{type,jdbcType=VARCHAR},
+      </if>
+      <if test="rectifymethod != null" >
+        #{rectifymethod,jdbcType=VARCHAR},
+      </if>
+      <if test="rectifydeadline != null" >
+        #{rectifydeadline,jdbcType=TIMESTAMP},
+      </if>
+      <if test="rectifyperson != null" >
+        #{rectifyperson,jdbcType=VARCHAR},
+      </if>
+      <if test="rectifystatus != null" >
+        #{rectifystatus,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        #{validflag,jdbcType=BIT},
+      </if>
+      <if test="enterprisenumber != null" >
+        #{enterprisenumber,jdbcType=VARCHAR},
+      </if>
+      <if test="enterprisename != null" >
+        #{enterprisename,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.StandardHiddenDangerLeger" >
+    <!--          -->
+    update standhiddendangerleger
+    <set >
+      <if test="checktime != null" >
+        checktime = #{checktime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="content != null" >
+        content = #{content,jdbcType=VARCHAR},
+      </if>
+      <if test="type != null" >
+        type = #{type,jdbcType=VARCHAR},
+      </if>
+      <if test="rectifymethod != null" >
+        rectifymethod = #{rectifymethod,jdbcType=VARCHAR},
+      </if>
+      <if test="rectifydeadline != null" >
+        rectifydeadline = #{rectifydeadline,jdbcType=TIMESTAMP},
+      </if>
+      <if test="rectifyperson != null" >
+        rectifyperson = #{rectifyperson,jdbcType=VARCHAR},
+      </if>
+      <if test="rectifystatus != null" >
+        rectifystatus = #{rectifystatus,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        createtime = #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        createby = #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        createbyname = #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        updateby = #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        validflag = #{validflag,jdbcType=BIT},
+      </if>
+      <if test="enterprisenumber != null" >
+        enterprisenumber = #{enterprisenumber,jdbcType=VARCHAR},
+      </if>
+      <if test="enterprisename != null" >
+        enterprisename = #{enterprisename,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.StandardHiddenDangerLeger" >
+    <!--          -->
+    update standhiddendangerleger
+    set checktime = #{checktime,jdbcType=TIMESTAMP},
+      content = #{content,jdbcType=VARCHAR},
+      type = #{type,jdbcType=VARCHAR},
+      rectifymethod = #{rectifymethod,jdbcType=VARCHAR},
+      rectifydeadline = #{rectifydeadline,jdbcType=TIMESTAMP},
+      rectifyperson = #{rectifyperson,jdbcType=VARCHAR},
+      rectifystatus = #{rectifystatus,jdbcType=VARCHAR},
+      createtime = #{createtime,jdbcType=TIMESTAMP},
+      createby = #{createby,jdbcType=BIGINT},
+      createbyname = #{createbyname,jdbcType=VARCHAR},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      updateby = #{updateby,jdbcType=BIGINT},
+      updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      validflag = #{validflag,jdbcType=BIT},
+      enterprisenumber = #{enterprisenumber,jdbcType=VARCHAR},
+      enterprisename = #{enterprisename,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/StandProductLegerMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/StandProductLegerMapper.xml
new file mode 100644
index 0000000..2476f1d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/StandProductLegerMapper.xml
@@ -0,0 +1,245 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.StandProductLegerMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.StandardProductLeger" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="manufacturer" property="manufacturer" jdbcType="VARCHAR" />
+    <result column="level" property="level" jdbcType="VARCHAR" />
+    <result column="type" property="type" jdbcType="VARCHAR" />
+    <result column="specification" property="specification" jdbcType="VARCHAR" />
+    <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
+    <result column="createby" property="createby" jdbcType="BIGINT" />
+    <result column="createbyname" property="createbyname" jdbcType="VARCHAR" />
+    <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+    <result column="updateby" property="updateby" jdbcType="BIGINT" />
+    <result column="updatebyname" property="updatebyname" jdbcType="VARCHAR" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+    <result column="enterprisenumber" property="enterprisenumber" jdbcType="VARCHAR" />
+    <result column="enterprisename" property="enterprisename" jdbcType="VARCHAR" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, manufacturer, level, type, specification, createtime, createby, createbyname,
+    updatetime, updateby, updatebyname, validflag, enterprisenumber, enterprisename
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select
+    <include refid="Base_Column_List" />
+    from standproductleger
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <select id="selectPages" resultType="com.gk.firework.Domain.StandardProductLeger">
+    select *
+    from standproductleger as sgl
+    left join enterprise as e on e.enterprisenumber = sgl.enterprisenumber
+    where  sgl.validflag = 1
+    <choose>
+      <when test="params.enterprisenumber != null and params.enterprisenumber !=''">
+        and sgl.enterprisenumber = #{params.enterprisenumber}
+      </when>
+      <otherwise>
+        <if test="params.enterprisename != null and params.enterprisename != ''">
+          and e.enterprisename like concat("%",#{params.enterprisename},"%")
+        </if>
+        <if test="params.safetysupervision != null and params.safetysupervision != ''">
+          and e.safetysupervision = #{params.safetysupervision}
+        </if>
+        <if test="params.province != null and params.province != ''">
+          and e.province = #{params.province}
+        </if>
+        <if test="params.city != null and params.city != ''">
+          and e.city = #{params.city}
+        </if>
+        <if test="params.district != null and params.district != ''">
+          and e.district = #{params.district}
+        </if>
+        <if test="params.street != null and params.street != ''">
+          and e.street = #{params.street}
+        </if>
+        <if test="params.committee != null and params.committee != ''">
+          and e.committee = #{params.committee}
+        </if>
+      </otherwise>
+    </choose>
+    <if test="params.filterProvince != null and params.filterProvince  != ''">
+      and e.province = #{params.filterProvince}
+    </if>
+    <if test="params.filterCity != null and  params.filterCity  != ''">
+      and e.city = #{params.filterCity}
+    </if>
+    <if test="params.filterDistrict != null and params.filterDistrict  != ''">
+      and e.district = #{params.filterDistrict}
+    </if>
+    <if test="params.filterStreet != null and params.filterStreet  != ''">
+      and e.street = #{params.filterStreet}
+    </if>
+    <if test="params.filterCommittee != null and params.filterCommittee  != ''">
+      and e.committee = #{params.filterCommittee}
+    </if>
+    order by sgl.createtime
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from standproductleger
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.StandardProductLeger" >
+    <!--          -->
+    insert into standproductleger
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="manufacturer != null" >
+        manufacturer,
+      </if>
+      <if test="level != null" >
+        level,
+      </if>
+      <if test="type != null" >
+        type,
+      </if>
+      <if test="specification != null" >
+        specification,
+      </if>
+      <if test="createtime != null" >
+        createtime,
+      </if>
+      <if test="createby != null" >
+        createby,
+      </if>
+      <if test="createbyname != null" >
+        createbyname,
+      </if>
+      <if test="updatetime != null" >
+        updatetime,
+      </if>
+      <if test="updateby != null" >
+        updateby,
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname,
+      </if>
+      <if test="validflag != null" >
+        validflag,
+      </if>
+      <if test="enterprisenumber != null" >
+        enterprisenumber,
+      </if>
+      <if test="enterprisename != null" >
+        enterprisename,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="manufacturer != null" >
+        #{manufacturer,jdbcType=VARCHAR},
+      </if>
+      <if test="level != null" >
+        #{level,jdbcType=VARCHAR},
+      </if>
+      <if test="type != null" >
+        #{type,jdbcType=VARCHAR},
+      </if>
+      <if test="specification != null" >
+        #{specification,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        #{validflag,jdbcType=BIT},
+      </if>
+      <if test="enterprisenumber != null" >
+        #{enterprisenumber,jdbcType=VARCHAR},
+      </if>
+      <if test="enterprisename != null" >
+        #{enterprisename,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.StandardProductLeger" >
+    <!--          -->
+    update standproductleger
+    <set >
+      <if test="manufacturer != null" >
+        manufacturer = #{manufacturer,jdbcType=VARCHAR},
+      </if>
+      <if test="level != null" >
+        level = #{level,jdbcType=VARCHAR},
+      </if>
+      <if test="type != null" >
+        type = #{type,jdbcType=VARCHAR},
+      </if>
+      <if test="specification != null" >
+        specification = #{specification,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        createtime = #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        createby = #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        createbyname = #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        updateby = #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        validflag = #{validflag,jdbcType=BIT},
+      </if>
+      <if test="enterprisenumber != null" >
+        enterprisenumber = #{enterprisenumber,jdbcType=VARCHAR},
+      </if>
+      <if test="enterprisename != null" >
+        enterprisename = #{enterprisename,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.StandardProductLeger" >
+    <!--          -->
+    update standproductleger
+    set manufacturer = #{manufacturer,jdbcType=VARCHAR},
+      level = #{level,jdbcType=VARCHAR},
+      type = #{type,jdbcType=VARCHAR},
+      specification = #{specification,jdbcType=VARCHAR},
+      createtime = #{createtime,jdbcType=TIMESTAMP},
+      createby = #{createby,jdbcType=BIGINT},
+      createbyname = #{createbyname,jdbcType=VARCHAR},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      updateby = #{updateby,jdbcType=BIGINT},
+      updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      validflag = #{validflag,jdbcType=BIT},
+      enterprisenumber = #{enterprisenumber,jdbcType=VARCHAR},
+      enterprisename = #{enterprisename,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/StandardConferenceRecordMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/StandardConferenceRecordMapper.xml
new file mode 100644
index 0000000..d2e79ad
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/StandardConferenceRecordMapper.xml
@@ -0,0 +1,259 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.StandardConferenceRecordMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.StandardConferenceRecord" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="starttime" property="starttime" jdbcType="TIMESTAMP" />
+    <result column="endtime" property="endtime" jdbcType="TIMESTAMP" />
+    <result column="theme" property="theme" jdbcType="VARCHAR" />
+    <result column="host" property="host" jdbcType="VARCHAR" />
+    <result column="participant" property="participant" jdbcType="VARCHAR" />
+    <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
+    <result column="createby" property="createby" jdbcType="BIGINT" />
+    <result column="createbyname" property="createbyname" jdbcType="VARCHAR" />
+    <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+    <result column="updateby" property="updateby" jdbcType="BIGINT" />
+    <result column="updatebyname" property="updatebyname" jdbcType="VARCHAR" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+    <result column="enterprisenumber" property="enterprisenumber" jdbcType="VARCHAR" />
+    <result column="enterprisename" property="enterprisename" jdbcType="VARCHAR" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, starttime, endtime, theme, host, participant, createtime, createby, createbyname,
+    updatetime, updateby, updatebyname, validflag, enterprisenumber, enterprisename
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select
+    <include refid="Base_Column_List" />
+    from standardconferencerecord
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+    <select id="selectPages" resultType="com.gk.firework.Domain.StandardConferenceRecord">
+
+      select *
+      from standardconferencerecord
+      as sgl
+      left join enterprise as e on e.enterprisenumber = sgl.enterprisenumber
+      where  sgl.validflag = 1
+      <choose>
+        <when test="params.enterprisenumber != null and params.enterprisenumber !=''">
+          and sgl.enterprisenumber = #{params.enterprisenumber}
+        </when>
+        <otherwise>
+          <if test="params.enterprisename != null and params.enterprisename != ''">
+            and e.enterprisename like concat("%",#{params.enterprisename},"%")
+          </if>
+          <if test="params.safetysupervision != null and params.safetysupervision != ''">
+            and e.safetysupervision = #{params.safetysupervision}
+          </if>
+          <if test="params.province != null and params.province != ''">
+            and e.province = #{params.province}
+          </if>
+          <if test="params.city != null and params.city != ''">
+            and e.city = #{params.city}
+          </if>
+          <if test="params.district != null and params.district != ''">
+            and e.district = #{params.district}
+          </if>
+          <if test="params.street != null and params.street != ''">
+            and e.street = #{params.street}
+          </if>
+          <if test="params.committee != null and params.committee != ''">
+            and e.committee = #{params.committee}
+          </if>
+        </otherwise>
+      </choose>
+      <if test="params.filterProvince != null and params.filterProvince  != ''">
+        and e.province = #{params.filterProvince}
+      </if>
+      <if test="params.filterCity != null and  params.filterCity  != ''">
+        and e.city = #{params.filterCity}
+      </if>
+      <if test="params.filterDistrict != null and params.filterDistrict  != ''">
+        and e.district = #{params.filterDistrict}
+      </if>
+      <if test="params.filterStreet != null and params.filterStreet  != ''">
+        and e.street = #{params.filterStreet}
+      </if>
+      <if test="params.filterCommittee != null and params.filterCommittee  != ''">
+        and e.committee = #{params.filterCommittee}
+      </if>
+      order by sgl.createtime
+
+    </select>
+    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from standardconferencerecord
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.StandardConferenceRecord" >
+    <!--          -->
+    insert into standardconferencerecord
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="starttime != null" >
+        starttime,
+      </if>
+      <if test="endtime != null" >
+        endtime,
+      </if>
+      <if test="theme != null" >
+        theme,
+      </if>
+      <if test="host != null" >
+        host,
+      </if>
+      <if test="participant != null" >
+        participant,
+      </if>
+      <if test="createtime != null" >
+        createtime,
+      </if>
+      <if test="createby != null" >
+        createby,
+      </if>
+      <if test="createbyname != null" >
+        createbyname,
+      </if>
+      <if test="updatetime != null" >
+        updatetime,
+      </if>
+      <if test="updateby != null" >
+        updateby,
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname,
+      </if>
+      <if test="validflag != null" >
+        validflag,
+      </if>
+      <if test="enterprisenumber != null" >
+        enterprisenumber,
+      </if>
+      <if test="enterprisename != null" >
+        enterprisename,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="starttime != null" >
+        #{starttime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="endtime != null" >
+        #{endtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="theme != null" >
+        #{theme,jdbcType=VARCHAR},
+      </if>
+      <if test="host != null" >
+        #{host,jdbcType=VARCHAR},
+      </if>
+      <if test="participant != null" >
+        #{participant,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        #{validflag,jdbcType=BIT},
+      </if>
+      <if test="enterprisenumber != null" >
+        #{enterprisenumber,jdbcType=VARCHAR},
+      </if>
+      <if test="enterprisename != null" >
+        #{enterprisename,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.StandardConferenceRecord" >
+    <!--          -->
+    update standardconferencerecord
+    <set >
+      <if test="starttime != null" >
+        starttime = #{starttime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="endtime != null" >
+        endtime = #{endtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="theme != null" >
+        theme = #{theme,jdbcType=VARCHAR},
+      </if>
+      <if test="host != null" >
+        host = #{host,jdbcType=VARCHAR},
+      </if>
+      <if test="participant != null" >
+        participant = #{participant,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        createtime = #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        createby = #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        createbyname = #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        updateby = #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        validflag = #{validflag,jdbcType=BIT},
+      </if>
+      <if test="enterprisenumber != null" >
+        enterprisenumber = #{enterprisenumber,jdbcType=VARCHAR},
+      </if>
+      <if test="enterprisename != null" >
+        enterprisename = #{enterprisename,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.StandardConferenceRecord" >
+    <!--          -->
+    update standardconferencerecord
+    set starttime = #{starttime,jdbcType=TIMESTAMP},
+      endtime = #{endtime,jdbcType=TIMESTAMP},
+      theme = #{theme,jdbcType=VARCHAR},
+      host = #{host,jdbcType=VARCHAR},
+      participant = #{participant,jdbcType=VARCHAR},
+      createtime = #{createtime,jdbcType=TIMESTAMP},
+      createby = #{createby,jdbcType=BIGINT},
+      createbyname = #{createbyname,jdbcType=VARCHAR},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      updateby = #{updateby,jdbcType=BIGINT},
+      updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      validflag = #{validflag,jdbcType=BIT},
+      enterprisenumber = #{enterprisenumber,jdbcType=VARCHAR},
+      enterprisename = #{enterprisename,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/StandardEducationLegerMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/StandardEducationLegerMapper.xml
new file mode 100644
index 0000000..7f12ab7
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/StandardEducationLegerMapper.xml
@@ -0,0 +1,319 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.StandardEducationLegerMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.StandardEducationLeger" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="enterprisename" property="enterprisename" jdbcType="VARCHAR" />
+    <result column="enterprisenumber" property="enterprisenumber" jdbcType="VARCHAR" />
+    <result column="starttime" property="starttime" jdbcType="TIMESTAMP" />
+    <result column="endtime" property="endtime" jdbcType="TIMESTAMP" />
+    <result column="location" property="location" jdbcType="VARCHAR" />
+    <result column="theme" property="theme" jdbcType="VARCHAR" />
+    <result column="teacher" property="teacher" jdbcType="VARCHAR" />
+    <result column="participant" property="participant" jdbcType="VARCHAR" />
+    <result column="content" property="content" jdbcType="VARCHAR" />
+    <result column="filename" property="filename" jdbcType="VARCHAR" />
+    <result column="url" property="url" jdbcType="VARCHAR" />
+    <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
+    <result column="createby" property="createby" jdbcType="BIGINT" />
+    <result column="createbyname" property="createbyname" jdbcType="VARCHAR" />
+    <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+    <result column="updateby" property="updateby" jdbcType="BIGINT" />
+    <result column="updatebyname" property="updatebyname" jdbcType="VARCHAR" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, enterprisename, enterprisenumber, starttime, endtime, location, theme, teacher, 
+    participant, content, filename, url, createtime, createby, createbyname, updatetime, 
+    updateby, updatebyname, validflag
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select 
+    <include refid="Base_Column_List" />
+    from standardeducationleger
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+    <select id="selectPages" resultType="com.gk.firework.Domain.StandardEducationLeger">
+
+      select sel.*
+      from standardeducationleger as sel
+      left join enterprise as e on e.enterprisenumber = sel.enterprisenumber
+      where  sel.validflag = 1
+      <choose>
+        <when test="params.enterprisenumber != null and params.enterprisenumber !=''">
+          and sel.enterprisenumber = #{params.enterprisenumber}
+        </when>
+        <otherwise>
+          <if test="params.enterprisename != null and params.enterprisename != ''">
+            and e.enterprisename like concat("%",#{params.enterprisename},"%")
+          </if>
+          <if test="params.safetysupervision != null and params.safetysupervision != ''">
+            and e.safetysupervision = #{params.safetysupervision}
+          </if>
+          <if test="params.province != null and params.province != ''">
+            and e.province = #{params.province}
+          </if>
+          <if test="params.city != null and params.city != ''">
+            and e.city = #{params.city}
+          </if>
+          <if test="params.district != null and params.district != ''">
+            and e.district = #{params.district}
+          </if>
+          <if test="params.street != null and params.street != ''">
+            and e.street = #{params.street}
+          </if>
+          <if test="params.committee != null and params.committee != ''">
+            and e.committee = #{params.committee}
+          </if>
+        </otherwise>
+      </choose>
+      <if test="params.filterProvince != null and params.filterProvince  != ''">
+        and e.province = #{params.filterProvince}
+      </if>
+      <if test="params.filterCity != null and  params.filterCity  != ''">
+        and e.city = #{params.filterCity}
+      </if>
+      <if test="params.filterDistrict != null and params.filterDistrict  != ''">
+        and e.district = #{params.filterDistrict}
+      </if>
+      <if test="params.filterStreet != null and params.filterStreet  != ''">
+        and e.street = #{params.filterStreet}
+      </if>
+      <if test="params.filterCommittee != null and params.filterCommittee  != ''">
+        and e.committee = #{params.filterCommittee}
+      </if>
+      order by sel.createtime
+
+    </select>
+    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from standardeducationleger
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.gk.firework.Domain.StandardEducationLeger" >
+    <!--          -->
+    insert into standardeducationleger (id, enterprisename, enterprisenumber, 
+      starttime, endtime, location, 
+      theme, teacher, participant, 
+      content, filename, url, 
+      createtime, createby, createbyname, 
+      updatetime, updateby, updatebyname, 
+      validflag)
+    values (#{id,jdbcType=BIGINT}, #{enterprisename,jdbcType=VARCHAR}, #{enterprisenumber,jdbcType=VARCHAR}, 
+      #{starttime,jdbcType=TIMESTAMP}, #{endtime,jdbcType=TIMESTAMP}, #{location,jdbcType=VARCHAR}, 
+      #{theme,jdbcType=VARCHAR}, #{teacher,jdbcType=VARCHAR}, #{participant,jdbcType=VARCHAR}, 
+      #{content,jdbcType=VARCHAR}, #{filename,jdbcType=VARCHAR}, #{url,jdbcType=VARCHAR}, 
+      #{createtime,jdbcType=TIMESTAMP}, #{createby,jdbcType=BIGINT}, #{createbyname,jdbcType=VARCHAR}, 
+      #{updatetime,jdbcType=TIMESTAMP}, #{updateby,jdbcType=BIGINT}, #{updatebyname,jdbcType=VARCHAR}, 
+      #{validflag,jdbcType=BIT})
+  </insert>
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.StandardEducationLeger" >
+    <!--          -->
+    insert into standardeducationleger
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="enterprisename != null" >
+        enterprisename,
+      </if>
+      <if test="enterprisenumber != null" >
+        enterprisenumber,
+      </if>
+      <if test="starttime != null" >
+        starttime,
+      </if>
+      <if test="endtime != null" >
+        endtime,
+      </if>
+      <if test="location != null" >
+        location,
+      </if>
+      <if test="theme != null" >
+        theme,
+      </if>
+      <if test="teacher != null" >
+        teacher,
+      </if>
+      <if test="participant != null" >
+        participant,
+      </if>
+      <if test="content != null" >
+        content,
+      </if>
+      <if test="filename != null" >
+        filename,
+      </if>
+      <if test="url != null" >
+        url,
+      </if>
+      <if test="createtime != null" >
+        createtime,
+      </if>
+      <if test="createby != null" >
+        createby,
+      </if>
+      <if test="createbyname != null" >
+        createbyname,
+      </if>
+      <if test="updatetime != null" >
+        updatetime,
+      </if>
+      <if test="updateby != null" >
+        updateby,
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname,
+      </if>
+      <if test="validflag != null" >
+        validflag,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="enterprisename != null" >
+        #{enterprisename,jdbcType=VARCHAR},
+      </if>
+      <if test="enterprisenumber != null" >
+        #{enterprisenumber,jdbcType=VARCHAR},
+      </if>
+      <if test="starttime != null" >
+        #{starttime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="endtime != null" >
+        #{endtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="location != null" >
+        #{location,jdbcType=VARCHAR},
+      </if>
+      <if test="theme != null" >
+        #{theme,jdbcType=VARCHAR},
+      </if>
+      <if test="teacher != null" >
+        #{teacher,jdbcType=VARCHAR},
+      </if>
+      <if test="participant != null" >
+        #{participant,jdbcType=VARCHAR},
+      </if>
+      <if test="content != null" >
+        #{content,jdbcType=VARCHAR},
+      </if>
+      <if test="filename != null" >
+        #{filename,jdbcType=VARCHAR},
+      </if>
+      <if test="url != null" >
+        #{url,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        #{validflag,jdbcType=BIT},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.StandardEducationLeger" >
+    <!--          -->
+    update standardeducationleger
+    <set >
+      <if test="enterprisename != null" >
+        enterprisename = #{enterprisename,jdbcType=VARCHAR},
+      </if>
+      <if test="enterprisenumber != null" >
+        enterprisenumber = #{enterprisenumber,jdbcType=VARCHAR},
+      </if>
+      <if test="starttime != null" >
+        starttime = #{starttime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="endtime != null" >
+        endtime = #{endtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="location != null" >
+        location = #{location,jdbcType=VARCHAR},
+      </if>
+      <if test="theme != null" >
+        theme = #{theme,jdbcType=VARCHAR},
+      </if>
+      <if test="teacher != null" >
+        teacher = #{teacher,jdbcType=VARCHAR},
+      </if>
+      <if test="participant != null" >
+        participant = #{participant,jdbcType=VARCHAR},
+      </if>
+      <if test="content != null" >
+        content = #{content,jdbcType=VARCHAR},
+      </if>
+      <if test="filename != null" >
+        filename = #{filename,jdbcType=VARCHAR},
+      </if>
+      <if test="url != null" >
+        url = #{url,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        createtime = #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        createby = #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        createbyname = #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        updateby = #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        validflag = #{validflag,jdbcType=BIT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.StandardEducationLeger" >
+    <!--          -->
+    update standardeducationleger
+    set enterprisename = #{enterprisename,jdbcType=VARCHAR},
+      enterprisenumber = #{enterprisenumber,jdbcType=VARCHAR},
+      starttime = #{starttime,jdbcType=TIMESTAMP},
+      endtime = #{endtime,jdbcType=TIMESTAMP},
+      location = #{location,jdbcType=VARCHAR},
+      theme = #{theme,jdbcType=VARCHAR},
+      teacher = #{teacher,jdbcType=VARCHAR},
+      participant = #{participant,jdbcType=VARCHAR},
+      content = #{content,jdbcType=VARCHAR},
+      filename = #{filename,jdbcType=VARCHAR},
+      url = #{url,jdbcType=VARCHAR},
+      createtime = #{createtime,jdbcType=TIMESTAMP},
+      createby = #{createby,jdbcType=BIGINT},
+      createbyname = #{createbyname,jdbcType=VARCHAR},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      updateby = #{updateby,jdbcType=BIGINT},
+      updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      validflag = #{validflag,jdbcType=BIT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/StandardEquipmentLegerMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/StandardEquipmentLegerMapper.xml
new file mode 100644
index 0000000..01ff844
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/StandardEquipmentLegerMapper.xml
@@ -0,0 +1,231 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.StandardEquipmentLegerMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.StandardEquipmentLeger" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="name" property="name" jdbcType="VARCHAR" />
+    <result column="num" property="num" jdbcType="INTEGER" />
+    <result column="checkcontent" property="checkcontent" jdbcType="VARCHAR" />
+    <result column="checktime" property="checktime" jdbcType="TIMESTAMP" />
+    <result column="checkperson" property="checkperson" jdbcType="VARCHAR" />
+    <result column="memo" property="memo" jdbcType="VARCHAR" />
+    <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
+    <result column="createby" property="createby" jdbcType="BIGINT" />
+    <result column="createbyname" property="createbyname" jdbcType="VARCHAR" />
+    <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+    <result column="updateby" property="updateby" jdbcType="BIGINT" />
+    <result column="updatebyname" property="updatebyname" jdbcType="VARCHAR" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+    <result column="enterprisenumber" property="enterprisenumber" jdbcType="VARCHAR" />
+    <result column="enterprisename" property="enterprisename" jdbcType="VARCHAR" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, name, num, checkcontent, checktime, checkperson, memo, createtime, createby, 
+    createbyname, updatetime, updateby, updatebyname, validflag, enterprisenumber, enterprisename
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select 
+    <include refid="Base_Column_List" />
+    from standardequipmentleger
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from standardequipmentleger
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.gk.firework.Domain.StandardEquipmentLeger" >
+    <!--          -->
+    insert into standardequipmentleger (id, name, num, 
+      checkcontent, checktime, checkperson, 
+      memo, createtime, createby, 
+      createbyname, updatetime, updateby, 
+      updatebyname, validflag, enterprisenumber, 
+      enterprisename)
+    values (#{id,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR}, #{num,jdbcType=INTEGER}, 
+      #{checkcontent,jdbcType=VARCHAR}, #{checktime,jdbcType=TIMESTAMP}, #{checkperson,jdbcType=VARCHAR}, 
+      #{memo,jdbcType=VARCHAR}, #{createtime,jdbcType=TIMESTAMP}, #{createby,jdbcType=BIGINT}, 
+      #{createbyname,jdbcType=VARCHAR}, #{updatetime,jdbcType=TIMESTAMP}, #{updateby,jdbcType=BIGINT}, 
+      #{updatebyname,jdbcType=VARCHAR}, #{validflag,jdbcType=BIT}, #{enterprisenumber,jdbcType=VARCHAR}, 
+      #{enterprisename,jdbcType=VARCHAR})
+  </insert>
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.StandardEquipmentLeger" >
+    <!--          -->
+    insert into standardequipmentleger
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="name != null" >
+        name,
+      </if>
+      <if test="num != null" >
+        num,
+      </if>
+      <if test="checkcontent != null" >
+        checkcontent,
+      </if>
+      <if test="checktime != null" >
+        checktime,
+      </if>
+      <if test="checkperson != null" >
+        checkperson,
+      </if>
+      <if test="memo != null" >
+        memo,
+      </if>
+      <if test="createtime != null" >
+        createtime,
+      </if>
+      <if test="createby != null" >
+        createby,
+      </if>
+      <if test="createbyname != null" >
+        createbyname,
+      </if>
+      <if test="updatetime != null" >
+        updatetime,
+      </if>
+      <if test="updateby != null" >
+        updateby,
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname,
+      </if>
+      <if test="validflag != null" >
+        validflag,
+      </if>
+      <if test="enterprisenumber != null" >
+        enterprisenumber,
+      </if>
+      <if test="enterprisename != null" >
+        enterprisename,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="name != null" >
+        #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="num != null" >
+        #{num,jdbcType=INTEGER},
+      </if>
+      <if test="checkcontent != null" >
+        #{checkcontent,jdbcType=VARCHAR},
+      </if>
+      <if test="checktime != null" >
+        #{checktime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="checkperson != null" >
+        #{checkperson,jdbcType=VARCHAR},
+      </if>
+      <if test="memo != null" >
+        #{memo,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        #{validflag,jdbcType=BIT},
+      </if>
+      <if test="enterprisenumber != null" >
+        #{enterprisenumber,jdbcType=VARCHAR},
+      </if>
+      <if test="enterprisename != null" >
+        #{enterprisename,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.StandardEquipmentLeger" >
+    <!--          -->
+    update standardequipmentleger
+    <set >
+      <if test="name != null" >
+        name = #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="num != null" >
+        num = #{num,jdbcType=INTEGER},
+      </if>
+      <if test="checkcontent != null" >
+        checkcontent = #{checkcontent,jdbcType=VARCHAR},
+      </if>
+      <if test="checktime != null" >
+        checktime = #{checktime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="checkperson != null" >
+        checkperson = #{checkperson,jdbcType=VARCHAR},
+      </if>
+      <if test="memo != null" >
+        memo = #{memo,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        createtime = #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        createby = #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        createbyname = #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        updateby = #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        validflag = #{validflag,jdbcType=BIT},
+      </if>
+      <if test="enterprisenumber != null" >
+        enterprisenumber = #{enterprisenumber,jdbcType=VARCHAR},
+      </if>
+      <if test="enterprisename != null" >
+        enterprisename = #{enterprisename,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.StandardEquipmentLeger" >
+    <!--          -->
+    update standardequipmentleger
+    set name = #{name,jdbcType=VARCHAR},
+      num = #{num,jdbcType=INTEGER},
+      checkcontent = #{checkcontent,jdbcType=VARCHAR},
+      checktime = #{checktime,jdbcType=TIMESTAMP},
+      checkperson = #{checkperson,jdbcType=VARCHAR},
+      memo = #{memo,jdbcType=VARCHAR},
+      createtime = #{createtime,jdbcType=TIMESTAMP},
+      createby = #{createby,jdbcType=BIGINT},
+      createbyname = #{createbyname,jdbcType=VARCHAR},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      updateby = #{updateby,jdbcType=BIGINT},
+      updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      validflag = #{validflag,jdbcType=BIT},
+      enterprisenumber = #{enterprisenumber,jdbcType=VARCHAR},
+      enterprisename = #{enterprisename,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/StandardGuardRollMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/StandardGuardRollMapper.xml
new file mode 100644
index 0000000..681a19d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/StandardGuardRollMapper.xml
@@ -0,0 +1,282 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.StandardGuardRollMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.StandardGuardRoll" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="position" property="position" jdbcType="VARCHAR" />
+    <result column="name" property="name" jdbcType="VARCHAR" />
+    <result column="sex" property="sex" jdbcType="VARCHAR" />
+    <result column="identify" property="identify" jdbcType="VARCHAR" />
+    <result column="telephone" property="telephone" jdbcType="VARCHAR" />
+    <result column="memo" property="memo" jdbcType="VARCHAR" />
+    <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
+    <result column="createby" property="createby" jdbcType="BIGINT" />
+    <result column="createbyname" property="createbyname" jdbcType="VARCHAR" />
+    <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+    <result column="updateby" property="updateby" jdbcType="BIGINT" />
+    <result column="updatebyname" property="updatebyname" jdbcType="VARCHAR" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+    <result column="enterprisenumber" property="enterprisenumber" jdbcType="VARCHAR" />
+    <result column="enterprisename" property="enterprisename" jdbcType="VARCHAR" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, position, name, sex, identify, telephone, memo, createtime, createby, createbyname, 
+    updatetime, updateby, updatebyname, validflag, enterprisenumber, enterprisename
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select 
+    <include refid="Base_Column_List" />
+    from standardguardroll
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+    <select id="selectPages" resultType="com.gk.firework.Domain.StandardGuardRoll">
+      select sgl.*
+      from standardguardroll as sgl
+      left join enterprise as e on e.enterprisenumber = sgl.enterprisenumber
+      where  sgl.validflag = 1
+      <choose>
+        <when test="params.enterprisenumber != null and params.enterprisenumber !=''">
+          and sgl.enterprisenumber = #{params.enterprisenumber}
+        </when>
+        <otherwise>
+          <if test="params.enterprisename != null and params.enterprisename != ''">
+            and e.enterprisename like concat("%",#{params.enterprisename},"%")
+          </if>
+          <if test="params.safetysupervision != null and params.safetysupervision != ''">
+            and e.safetysupervision = #{params.safetysupervision}
+          </if>
+          <if test="params.province != null and params.province != ''">
+            and e.province = #{params.province}
+          </if>
+          <if test="params.city != null and params.city != ''">
+            and e.city = #{params.city}
+          </if>
+          <if test="params.district != null and params.district != ''">
+            and e.district = #{params.district}
+          </if>
+          <if test="params.street != null and params.street != ''">
+            and e.street = #{params.street}
+          </if>
+          <if test="params.committee != null and params.committee != ''">
+            and e.committee = #{params.committee}
+          </if>
+        </otherwise>
+      </choose>
+      <if test="params.filterProvince != null and params.filterProvince  != ''">
+        and e.province = #{params.filterProvince}
+      </if>
+      <if test="params.filterCity != null and  params.filterCity  != ''">
+        and e.city = #{params.filterCity}
+      </if>
+      <if test="params.filterDistrict != null and params.filterDistrict  != ''">
+        and e.district = #{params.filterDistrict}
+      </if>
+      <if test="params.filterStreet != null and params.filterStreet  != ''">
+        and e.street = #{params.filterStreet}
+      </if>
+      <if test="params.filterCommittee != null and params.filterCommittee  != ''">
+        and e.committee = #{params.filterCommittee}
+      </if>
+      order by sgl.createtime
+
+    </select>
+    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from standardguardroll
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.gk.firework.Domain.StandardGuardRoll" >
+    <!--          -->
+    insert into standardguardroll (id, position, name, 
+      sex, identify, telephone, 
+      memo, createtime, createby, 
+      createbyname, updatetime, updateby, 
+      updatebyname, validflag, enterprisenumber, 
+      enterprisename)
+    values (#{id,jdbcType=BIGINT}, #{position,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, 
+      #{sex,jdbcType=VARCHAR}, #{identify,jdbcType=VARCHAR}, #{telephone,jdbcType=VARCHAR}, 
+      #{memo,jdbcType=VARCHAR}, #{createtime,jdbcType=TIMESTAMP}, #{createby,jdbcType=BIGINT}, 
+      #{createbyname,jdbcType=VARCHAR}, #{updatetime,jdbcType=TIMESTAMP}, #{updateby,jdbcType=BIGINT}, 
+      #{updatebyname,jdbcType=VARCHAR}, #{validflag,jdbcType=BIT}, #{enterprisenumber,jdbcType=VARCHAR}, 
+      #{enterprisename,jdbcType=VARCHAR})
+  </insert>
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.StandardGuardRoll" >
+    <!--          -->
+    insert into standardguardroll
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="position != null" >
+        position,
+      </if>
+      <if test="name != null" >
+        name,
+      </if>
+      <if test="sex != null" >
+        sex,
+      </if>
+      <if test="identify != null" >
+        identify,
+      </if>
+      <if test="telephone != null" >
+        telephone,
+      </if>
+      <if test="memo != null" >
+        memo,
+      </if>
+      <if test="createtime != null" >
+        createtime,
+      </if>
+      <if test="createby != null" >
+        createby,
+      </if>
+      <if test="createbyname != null" >
+        createbyname,
+      </if>
+      <if test="updatetime != null" >
+        updatetime,
+      </if>
+      <if test="updateby != null" >
+        updateby,
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname,
+      </if>
+      <if test="validflag != null" >
+        validflag,
+      </if>
+      <if test="enterprisenumber != null" >
+        enterprisenumber,
+      </if>
+      <if test="enterprisename != null" >
+        enterprisename,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="position != null" >
+        #{position,jdbcType=VARCHAR},
+      </if>
+      <if test="name != null" >
+        #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="sex != null" >
+        #{sex,jdbcType=VARCHAR},
+      </if>
+      <if test="identify != null" >
+        #{identify,jdbcType=VARCHAR},
+      </if>
+      <if test="telephone != null" >
+        #{telephone,jdbcType=VARCHAR},
+      </if>
+      <if test="memo != null" >
+        #{memo,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        #{validflag,jdbcType=BIT},
+      </if>
+      <if test="enterprisenumber != null" >
+        #{enterprisenumber,jdbcType=VARCHAR},
+      </if>
+      <if test="enterprisename != null" >
+        #{enterprisename,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.StandardGuardRoll" >
+    <!--          -->
+    update standardguardroll
+    <set >
+      <if test="position != null" >
+        position = #{position,jdbcType=VARCHAR},
+      </if>
+      <if test="name != null" >
+        name = #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="sex != null" >
+        sex = #{sex,jdbcType=VARCHAR},
+      </if>
+      <if test="identify != null" >
+        identify = #{identify,jdbcType=VARCHAR},
+      </if>
+      <if test="telephone != null" >
+        telephone = #{telephone,jdbcType=VARCHAR},
+      </if>
+      <if test="memo != null" >
+        memo = #{memo,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        createtime = #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        createby = #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        createbyname = #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        updateby = #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        validflag = #{validflag,jdbcType=BIT},
+      </if>
+      <if test="enterprisenumber != null" >
+        enterprisenumber = #{enterprisenumber,jdbcType=VARCHAR},
+      </if>
+      <if test="enterprisename != null" >
+        enterprisename = #{enterprisename,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.StandardGuardRoll" >
+    <!--          -->
+    update standardguardroll
+    set position = #{position,jdbcType=VARCHAR},
+      name = #{name,jdbcType=VARCHAR},
+      sex = #{sex,jdbcType=VARCHAR},
+      identify = #{identify,jdbcType=VARCHAR},
+      telephone = #{telephone,jdbcType=VARCHAR},
+      memo = #{memo,jdbcType=VARCHAR},
+      createtime = #{createtime,jdbcType=TIMESTAMP},
+      createby = #{createby,jdbcType=BIGINT},
+      createbyname = #{createbyname,jdbcType=VARCHAR},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      updateby = #{updateby,jdbcType=BIGINT},
+      updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      validflag = #{validflag,jdbcType=BIT},
+      enterprisenumber = #{enterprisenumber,jdbcType=VARCHAR},
+      enterprisename = #{enterprisename,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/StandardLawListMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/StandardLawListMapper.xml
new file mode 100644
index 0000000..7591e51
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/StandardLawListMapper.xml
@@ -0,0 +1,296 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.StandardLawListMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.StandardLawList" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="claim" property="claim" jdbcType="VARCHAR" />
+    <result column="effectivedate" property="effectivedate" jdbcType="TIMESTAMP" />
+    <result column="department" property="department" jdbcType="VARCHAR" />
+    <result column="number" property="number" jdbcType="VARCHAR" />
+    <result column="description" property="description" jdbcType="VARCHAR" />
+    <result column="ranges" property="ranges" jdbcType="VARCHAR" />
+    <result column="updateinfo" property="updateinfo" jdbcType="VARCHAR" />
+    <result column="orderindex" property="orderindex" jdbcType="INTEGER" />
+    <result column="url" property="url" jdbcType="VARCHAR" />
+    <result column="filename" property="filename" jdbcType="VARCHAR" />
+    <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
+    <result column="createby" property="createby" jdbcType="BIGINT" />
+    <result column="createbyname" property="createbyname" jdbcType="VARCHAR" />
+    <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+    <result column="updateby" property="updateby" jdbcType="BIGINT" />
+    <result column="updatebyname" property="updatebyname" jdbcType="VARCHAR" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, claim, effectivedate, department, number, description, ranges, updateinfo, orderindex, 
+    url, filename, createtime, createby, createbyname, updatetime, updateby, updatebyname, 
+    validflag
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select 
+    <include refid="Base_Column_List" />
+    from standardlawlist
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <select id="selectPages" resultType="com.gk.firework.Domain.StandardLawList">
+
+    select sll.*
+    from standardlawlist as sll
+    left join enterprise as e on e.enterprisenumber = sll.enterprisenumber
+    where  sll.validflag = 1
+    <if test="params.name != null and params.name != ''">
+      and sll.claim like concat("%",#{params.name},"%")
+    </if>
+    <choose>
+      <when test="params.enterprisenumber != null and params.enterprisenumber !=''">
+        and sll.enterprisenumber = #{params.enterprisenumber}
+      </when>
+      <otherwise>
+        <if test="params.enterprisename != null and params.enterprisename != ''">
+          and e.enterprisename like concat("%",#{params.enterprisename},"%")
+        </if>
+        <if test="params.safetysupervision != null and params.safetysupervision != ''">
+          and e.safetysupervision = #{params.safetysupervision}
+        </if>
+        <if test="params.province != null and params.province != ''">
+          and e.province = #{params.province}
+        </if>
+        <if test="params.city != null and params.city != ''">
+          and e.city = #{params.city}
+        </if>
+        <if test="params.district != null and params.district != ''">
+          and e.district = #{params.district}
+        </if>
+        <if test="params.street != null and params.street != ''">
+          and e.street = #{params.street}
+        </if>
+        <if test="params.committee != null and params.committee != ''">
+          and e.committee = #{params.committee}
+        </if>
+      </otherwise>
+    </choose>
+    <if test="params.filterProvince != null and params.filterProvince  != ''">
+      and e.province = #{params.filterProvince}
+    </if>
+    <if test="params.filterCity != null and  params.filterCity  != ''">
+      and e.city = #{params.filterCity}
+    </if>
+    <if test="params.filterDistrict != null and params.filterDistrict  != ''">
+      and e.district = #{params.filterDistrict}
+    </if>
+    <if test="params.filterStreet != null and params.filterStreet  != ''">
+      and e.street = #{params.filterStreet}
+    </if>
+    <if test="params.filterCommittee != null and params.filterCommittee  != ''">
+      and e.committee = #{params.filterCommittee}
+    </if>
+    order by sll.orderindex
+
+
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from standardlawlist
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.StandardLawList" >
+    <!--          -->
+    insert into standardlawlist
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="claim != null" >
+        claim,
+      </if>
+      <if test="effectivedate != null" >
+        effectivedate,
+      </if>
+      <if test="department != null" >
+        department,
+      </if>
+      <if test="number != null" >
+        number,
+      </if>
+      <if test="description != null" >
+        description,
+      </if>
+      <if test="ranges != null" >
+        ranges,
+      </if>
+      <if test="updateinfo != null" >
+        updateinfo,
+      </if>
+      <if test="orderindex != null" >
+        orderindex,
+      </if>
+      <if test="url != null" >
+        url,
+      </if>
+      <if test="filename != null" >
+        filename,
+      </if>
+      <if test="createtime != null" >
+        createtime,
+      </if>
+      <if test="createby != null" >
+        createby,
+      </if>
+      <if test="createbyname != null" >
+        createbyname,
+      </if>
+      <if test="updatetime != null" >
+        updatetime,
+      </if>
+      <if test="updateby != null" >
+        updateby,
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname,
+      </if>
+      <if test="validflag != null" >
+        validflag,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="claim != null" >
+        #{claim,jdbcType=VARCHAR},
+      </if>
+      <if test="effectivedate != null" >
+        #{effectivedate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="department != null" >
+        #{department,jdbcType=VARCHAR},
+      </if>
+      <if test="number != null" >
+        #{number,jdbcType=VARCHAR},
+      </if>
+      <if test="description != null" >
+        #{description,jdbcType=VARCHAR},
+      </if>
+      <if test="ranges != null" >
+        #{ranges,jdbcType=VARCHAR},
+      </if>
+      <if test="updateinfo != null" >
+        #{updateinfo,jdbcType=VARCHAR},
+      </if>
+      <if test="orderindex != null" >
+        #{orderindex,jdbcType=INTEGER},
+      </if>
+      <if test="url != null" >
+        #{url,jdbcType=VARCHAR},
+      </if>
+      <if test="filename != null" >
+        #{filename,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        #{validflag,jdbcType=BIT},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.StandardLawList" >
+    <!--          -->
+    update standardlawlist
+    <set >
+      <if test="claim != null" >
+        claim = #{claim,jdbcType=VARCHAR},
+      </if>
+      <if test="effectivedate != null" >
+        effectivedate = #{effectivedate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="department != null" >
+        department = #{department,jdbcType=VARCHAR},
+      </if>
+      <if test="number != null" >
+        number = #{number,jdbcType=VARCHAR},
+      </if>
+      <if test="description != null" >
+        description = #{description,jdbcType=VARCHAR},
+      </if>
+      <if test="ranges != null" >
+        ranges = #{ranges,jdbcType=VARCHAR},
+      </if>
+      <if test="updateinfo != null" >
+        updateinfo = #{updateinfo,jdbcType=VARCHAR},
+      </if>
+      <if test="orderindex != null" >
+        orderindex = #{orderindex,jdbcType=INTEGER},
+      </if>
+      <if test="url != null" >
+        url = #{url,jdbcType=VARCHAR},
+      </if>
+      <if test="filename != null" >
+        filename = #{filename,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        createtime = #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        createby = #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        createbyname = #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        updateby = #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        validflag = #{validflag,jdbcType=BIT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.StandardLawList" >
+    <!--          -->
+    update standardlawlist
+    set claim = #{claim,jdbcType=VARCHAR},
+      effectivedate = #{effectivedate,jdbcType=TIMESTAMP},
+      department = #{department,jdbcType=VARCHAR},
+      number = #{number,jdbcType=VARCHAR},
+      description = #{description,jdbcType=VARCHAR},
+      ranges = #{ranges,jdbcType=VARCHAR},
+      updateinfo = #{updateinfo,jdbcType=VARCHAR},
+      orderindex = #{orderindex,jdbcType=INTEGER},
+      url = #{url,jdbcType=VARCHAR},
+      filename = #{filename,jdbcType=VARCHAR},
+      createtime = #{createtime,jdbcType=TIMESTAMP},
+      createby = #{createby,jdbcType=BIGINT},
+      createbyname = #{createbyname,jdbcType=VARCHAR},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      updateby = #{updateby,jdbcType=BIGINT},
+      updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      validflag = #{validflag,jdbcType=BIT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/StandardRewardRecordMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/StandardRewardRecordMapper.xml
new file mode 100644
index 0000000..41d662d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/StandardRewardRecordMapper.xml
@@ -0,0 +1,268 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.StandardRewardRecordMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.StandardRewardRecord" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="staff" property="staff" jdbcType="VARCHAR" />
+    <result column="post" property="post" jdbcType="VARCHAR" />
+    <result column="reason" property="reason" jdbcType="VARCHAR" />
+    <result column="method" property="method" jdbcType="VARCHAR" />
+    <result column="occurtime" property="occurtime" jdbcType="TIMESTAMP" />
+    <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
+    <result column="createby" property="createby" jdbcType="BIGINT" />
+    <result column="createbyname" property="createbyname" jdbcType="VARCHAR" />
+    <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+    <result column="updateby" property="updateby" jdbcType="BIGINT" />
+    <result column="updatebyname" property="updatebyname" jdbcType="VARCHAR" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+    <result column="enterprisenumber" property="enterprisenumber" jdbcType="VARCHAR" />
+    <result column="enterprisename" property="enterprisename" jdbcType="VARCHAR" />
+    <result column="type" property="type" jdbcType="BIT" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, staff, post, reason, method, occurtime, createtime, createby, createbyname, updatetime,
+    updateby, updatebyname, validflag, enterprisenumber, enterprisename, type
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select
+    <include refid="Base_Column_List" />
+    from standardrewardrecord
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+    <select id="selectPages" resultType="com.gk.firework.Domain.StandardRewardRecord">
+      select *
+      from standardrewardrecord
+      as sgl
+      left join enterprise as e on e.enterprisenumber = sgl.enterprisenumber
+      where  sgl.validflag = 1
+      <choose>
+        <when test="params.enterprisenumber != null and params.enterprisenumber !=''">
+          and sgl.enterprisenumber = #{params.enterprisenumber}
+        </when>
+        <otherwise>
+          <if test="params.enterprisename != null and params.enterprisename != ''">
+            and e.enterprisename like concat("%",#{params.enterprisename},"%")
+          </if>
+          <if test="params.safetysupervision != null and params.safetysupervision != ''">
+            and e.safetysupervision = #{params.safetysupervision}
+          </if>
+          <if test="params.province != null and params.province != ''">
+            and e.province = #{params.province}
+          </if>
+          <if test="params.city != null and params.city != ''">
+            and e.city = #{params.city}
+          </if>
+          <if test="params.district != null and params.district != ''">
+            and e.district = #{params.district}
+          </if>
+          <if test="params.street != null and params.street != ''">
+            and e.street = #{params.street}
+          </if>
+          <if test="params.committee != null and params.committee != ''">
+            and e.committee = #{params.committee}
+          </if>
+        </otherwise>
+      </choose>
+      <if test="params.filterProvince != null and params.filterProvince  != ''">
+        and e.province = #{params.filterProvince}
+      </if>
+      <if test="params.filterCity != null and  params.filterCity  != ''">
+        and e.city = #{params.filterCity}
+      </if>
+      <if test="params.filterDistrict != null and params.filterDistrict  != ''">
+        and e.district = #{params.filterDistrict}
+      </if>
+      <if test="params.filterStreet != null and params.filterStreet  != ''">
+        and e.street = #{params.filterStreet}
+      </if>
+      <if test="params.filterCommittee != null and params.filterCommittee  != ''">
+        and e.committee = #{params.filterCommittee}
+      </if>
+      order by sgl.createtime
+
+    </select>
+    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from standardrewardrecord
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.StandardRewardRecord" >
+    <!--          -->
+    insert into standardrewardrecord
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="staff != null" >
+        staff,
+      </if>
+      <if test="post != null" >
+        post,
+      </if>
+      <if test="reason != null" >
+        reason,
+      </if>
+      <if test="method != null" >
+        method,
+      </if>
+      <if test="occurtime != null" >
+        occurtime,
+      </if>
+      <if test="createtime != null" >
+        createtime,
+      </if>
+      <if test="createby != null" >
+        createby,
+      </if>
+      <if test="createbyname != null" >
+        createbyname,
+      </if>
+      <if test="updatetime != null" >
+        updatetime,
+      </if>
+      <if test="updateby != null" >
+        updateby,
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname,
+      </if>
+      <if test="validflag != null" >
+        validflag,
+      </if>
+      <if test="enterprisenumber != null" >
+        enterprisenumber,
+      </if>
+      <if test="enterprisename != null" >
+        enterprisename,
+      </if>
+      <if test="type != null" >
+        type,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="staff != null" >
+        #{staff,jdbcType=VARCHAR},
+      </if>
+      <if test="post != null" >
+        #{post,jdbcType=VARCHAR},
+      </if>
+      <if test="reason != null" >
+        #{reason,jdbcType=VARCHAR},
+      </if>
+      <if test="method != null" >
+        #{method,jdbcType=VARCHAR},
+      </if>
+      <if test="occurtime != null" >
+        #{occurtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createtime != null" >
+        #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        #{validflag,jdbcType=BIT},
+      </if>
+      <if test="enterprisenumber != null" >
+        #{enterprisenumber,jdbcType=VARCHAR},
+      </if>
+      <if test="enterprisename != null" >
+        #{enterprisename,jdbcType=VARCHAR},
+      </if>
+      <if test="type != null" >
+        #{type,jdbcType=BIT},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.StandardRewardRecord" >
+    <!--          -->
+    update standardrewardrecord
+    <set >
+      <if test="staff != null" >
+        staff = #{staff,jdbcType=VARCHAR},
+      </if>
+      <if test="post != null" >
+        post = #{post,jdbcType=VARCHAR},
+      </if>
+      <if test="reason != null" >
+        reason = #{reason,jdbcType=VARCHAR},
+      </if>
+      <if test="method != null" >
+        method = #{method,jdbcType=VARCHAR},
+      </if>
+      <if test="occurtime != null" >
+        occurtime = #{occurtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createtime != null" >
+        createtime = #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        createby = #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        createbyname = #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        updateby = #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        validflag = #{validflag,jdbcType=BIT},
+      </if>
+      <if test="enterprisenumber != null" >
+        enterprisenumber = #{enterprisenumber,jdbcType=VARCHAR},
+      </if>
+      <if test="enterprisename != null" >
+        enterprisename = #{enterprisename,jdbcType=VARCHAR},
+      </if>
+      <if test="type != null" >
+        type = #{type,jdbcType=BIT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.StandardRewardRecord" >
+    <!--          -->
+    update standardrewardrecord
+    set staff = #{staff,jdbcType=VARCHAR},
+      post = #{post,jdbcType=VARCHAR},
+      reason = #{reason,jdbcType=VARCHAR},
+      method = #{method,jdbcType=VARCHAR},
+      occurtime = #{occurtime,jdbcType=TIMESTAMP},
+      createtime = #{createtime,jdbcType=TIMESTAMP},
+      createby = #{createby,jdbcType=BIGINT},
+      createbyname = #{createbyname,jdbcType=VARCHAR},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      updateby = #{updateby,jdbcType=BIGINT},
+      updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      validflag = #{validflag,jdbcType=BIT},
+      enterprisenumber = #{enterprisenumber,jdbcType=VARCHAR},
+      enterprisename = #{enterprisename,jdbcType=VARCHAR},
+      type = #{type,jdbcType=BIT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/StandardSupplyMarketObjectMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/StandardSupplyMarketObjectMapper.xml
new file mode 100644
index 0000000..1b42d37
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/StandardSupplyMarketObjectMapper.xml
@@ -0,0 +1,280 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.StandardSupplyMarketObjectMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.StandardSupplyMarketObject" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="unitname" property="unitname" jdbcType="VARCHAR" />
+    <result column="unitaddress" property="unitaddress" jdbcType="VARCHAR" />
+    <result column="isvalid" property="isvalid" jdbcType="BIT" />
+    <result column="contactperson" property="contactperson" jdbcType="VARCHAR" />
+    <result column="phone" property="phone" jdbcType="VARCHAR" />
+    <result column="memo" property="memo" jdbcType="VARCHAR" />
+    <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
+    <result column="createby" property="createby" jdbcType="BIGINT" />
+    <result column="createbyname" property="createbyname" jdbcType="VARCHAR" />
+    <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+    <result column="updateby" property="updateby" jdbcType="BIGINT" />
+    <result column="updatebyname" property="updatebyname" jdbcType="VARCHAR" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+    <result column="enterprisenumber" property="enterprisenumber" jdbcType="VARCHAR" />
+    <result column="enterprisename" property="enterprisename" jdbcType="VARCHAR" />
+    <result column="menu" property="menu" jdbcType="VARCHAR" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, unitname, unitaddress, isvalid, contactperson, phone, memo, createtime, createby,
+    createbyname, updatetime, updateby, updatebyname, validflag, enterprisenumber, enterprisename,
+    menu
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select
+    <include refid="Base_Column_List" />
+    from standardsupplymarketobject
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+    <select id="selectPages" resultType="com.gk.firework.Domain.StandardSupplyMarketObject">
+      select *
+      from standardsupplymarketobject
+      as sgl
+      left join enterprise as e on e.enterprisenumber = sgl.enterprisenumber
+      where  sgl.validflag = 1
+      and menu = #{params.menu}
+      <choose>
+        <when test="params.enterprisenumber != null and params.enterprisenumber !=''">
+          and sgl.enterprisenumber = #{params.enterprisenumber}
+        </when>
+        <otherwise>
+          <if test="params.enterprisename != null and params.enterprisename != ''">
+            and e.enterprisename like concat("%",#{params.enterprisename},"%")
+          </if>
+          <if test="params.safetysupervision != null and params.safetysupervision != ''">
+            and e.safetysupervision = #{params.safetysupervision}
+          </if>
+          <if test="params.province != null and params.province != ''">
+            and e.province = #{params.province}
+          </if>
+          <if test="params.city != null and params.city != ''">
+            and e.city = #{params.city}
+          </if>
+          <if test="params.district != null and params.district != ''">
+            and e.district = #{params.district}
+          </if>
+          <if test="params.street != null and params.street != ''">
+            and e.street = #{params.street}
+          </if>
+          <if test="params.committee != null and params.committee != ''">
+            and e.committee = #{params.committee}
+          </if>
+        </otherwise>
+      </choose>
+      <if test="params.filterProvince != null and params.filterProvince  != ''">
+        and e.province = #{params.filterProvince}
+      </if>
+      <if test="params.filterCity != null and  params.filterCity  != ''">
+        and e.city = #{params.filterCity}
+      </if>
+      <if test="params.filterDistrict != null and params.filterDistrict  != ''">
+        and e.district = #{params.filterDistrict}
+      </if>
+      <if test="params.filterStreet != null and params.filterStreet  != ''">
+        and e.street = #{params.filterStreet}
+      </if>
+      <if test="params.filterCommittee != null and params.filterCommittee  != ''">
+        and e.committee = #{params.filterCommittee}
+      </if>
+      order by sgl.createtime
+    </select>
+    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from standardsupplymarketobject
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.StandardSupplyMarketObject" >
+    <!--          -->
+    insert into standardsupplymarketobject
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="unitname != null" >
+        unitname,
+      </if>
+      <if test="unitaddress != null" >
+        unitaddress,
+      </if>
+      <if test="isvalid != null" >
+        isvalid,
+      </if>
+      <if test="contactperson != null" >
+        contactperson,
+      </if>
+      <if test="phone != null" >
+        phone,
+      </if>
+      <if test="memo != null" >
+        memo,
+      </if>
+      <if test="createtime != null" >
+        createtime,
+      </if>
+      <if test="createby != null" >
+        createby,
+      </if>
+      <if test="createbyname != null" >
+        createbyname,
+      </if>
+      <if test="updatetime != null" >
+        updatetime,
+      </if>
+      <if test="updateby != null" >
+        updateby,
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname,
+      </if>
+      <if test="validflag != null" >
+        validflag,
+      </if>
+      <if test="enterprisenumber != null" >
+        enterprisenumber,
+      </if>
+      <if test="enterprisename != null" >
+        enterprisename,
+      </if>
+      <if test="menu != null" >
+        menu,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="unitname != null" >
+        #{unitname,jdbcType=VARCHAR},
+      </if>
+      <if test="unitaddress != null" >
+        #{unitaddress,jdbcType=VARCHAR},
+      </if>
+      <if test="isvalid != null" >
+        #{isvalid,jdbcType=BIT},
+      </if>
+      <if test="contactperson != null" >
+        #{contactperson,jdbcType=VARCHAR},
+      </if>
+      <if test="phone != null" >
+        #{phone,jdbcType=VARCHAR},
+      </if>
+      <if test="memo != null" >
+        #{memo,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        #{validflag,jdbcType=BIT},
+      </if>
+      <if test="enterprisenumber != null" >
+        #{enterprisenumber,jdbcType=VARCHAR},
+      </if>
+      <if test="enterprisename != null" >
+        #{enterprisename,jdbcType=VARCHAR},
+      </if>
+      <if test="menu != null" >
+        #{menu,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.StandardSupplyMarketObject" >
+    <!--          -->
+    update standardsupplymarketobject
+    <set >
+      <if test="unitname != null" >
+        unitname = #{unitname,jdbcType=VARCHAR},
+      </if>
+      <if test="unitaddress != null" >
+        unitaddress = #{unitaddress,jdbcType=VARCHAR},
+      </if>
+      <if test="isvalid != null" >
+        isvalid = #{isvalid,jdbcType=BIT},
+      </if>
+      <if test="contactperson != null" >
+        contactperson = #{contactperson,jdbcType=VARCHAR},
+      </if>
+      <if test="phone != null" >
+        phone = #{phone,jdbcType=VARCHAR},
+      </if>
+      <if test="memo != null" >
+        memo = #{memo,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        createtime = #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        createby = #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        createbyname = #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        updateby = #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        validflag = #{validflag,jdbcType=BIT},
+      </if>
+      <if test="enterprisenumber != null" >
+        enterprisenumber = #{enterprisenumber,jdbcType=VARCHAR},
+      </if>
+      <if test="enterprisename != null" >
+        enterprisename = #{enterprisename,jdbcType=VARCHAR},
+      </if>
+      <if test="menu != null" >
+        menu = #{menu,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.StandardSupplyMarketObject" >
+    <!--          -->
+    update standardsupplymarketobject
+    set unitname = #{unitname,jdbcType=VARCHAR},
+      unitaddress = #{unitaddress,jdbcType=VARCHAR},
+      isvalid = #{isvalid,jdbcType=BIT},
+      contactperson = #{contactperson,jdbcType=VARCHAR},
+      phone = #{phone,jdbcType=VARCHAR},
+      memo = #{memo,jdbcType=VARCHAR},
+      createtime = #{createtime,jdbcType=TIMESTAMP},
+      createby = #{createby,jdbcType=BIGINT},
+      createbyname = #{createbyname,jdbcType=VARCHAR},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      updateby = #{updateby,jdbcType=BIGINT},
+      updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      validflag = #{validflag,jdbcType=BIT},
+      enterprisenumber = #{enterprisenumber,jdbcType=VARCHAR},
+      enterprisename = #{enterprisename,jdbcType=VARCHAR},
+      menu = #{menu,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/StandardTemplate1Mapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/StandardTemplate1Mapper.xml
new file mode 100644
index 0000000..12e5945
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/StandardTemplate1Mapper.xml
@@ -0,0 +1,325 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.StandardTemplate1Mapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.StandardTemplate1" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="menu" property="menu" jdbcType="VARCHAR" />
+    <result column="url" property="url" jdbcType="VARCHAR" />
+    <result column="filename" property="filename" jdbcType="VARCHAR" />
+    <result column="settime" property="settime" jdbcType="TIMESTAMP" />
+    <result column="enterprisenumber" property="enterprisenumber" jdbcType="VARCHAR" />
+    <result column="enterprisename" property="enterprisename" jdbcType="VARCHAR" />
+    <result column="name" property="name" jdbcType="VARCHAR" />
+    <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
+    <result column="createby" property="createby" jdbcType="BIGINT" />
+    <result column="createbyname" property="createbyname" jdbcType="VARCHAR" />
+    <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+    <result column="updateby" property="updateby" jdbcType="VARCHAR" />
+    <result column="updatebyname" property="updatebyname" jdbcType="VARCHAR" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+    <result column="type" property="type" jdbcType="TINYINT" />
+  </resultMap>
+  <resultMap id="ResultMapWithBLOBs" type="com.gk.firework.Domain.StandardTemplate1" extends="BaseResultMap" >
+    <!--          -->
+    <result column="content" property="content" jdbcType="LONGVARCHAR" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, menu, url, filename, settime, enterprisenumber, enterprisename, name, createtime, 
+    createby, createbyname, updatetime, updateby, updatebyname, validflag, type
+  </sql>
+  <sql id="Blob_Column_List" >
+    <!--          -->
+    content
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="ResultMapWithBLOBs" parameterType="java.lang.Long" >
+    <!--          -->
+    select 
+    <include refid="Base_Column_List" />
+    ,
+    <include refid="Blob_Column_List" />
+    from standardtemplate1
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <select id="selectPages"  resultType="com.gk.firework.Domain.StandardTemplate1">
+    select st.*
+    from standardtemplate1 as st
+    left join enterprise as e on e.enterprisenumber = st.enterprisenumber
+    where  st.menu = #{params.menu}
+    and st.validflag = 1
+    <choose>
+      <when test="params.enterprisenumber != null and params.enterprisenumber !=''">
+        and st.enterprisenumber = #{params.enterprisenumber}
+      </when>
+      <otherwise>
+        <if test="params.enterprisename != null and params.enterprisename != ''">
+          and e.enterprisename like concat("%",#{params.enterprisename},"%")
+        </if>
+        <if test="params.safetysupervision != null and params.safetysupervision != ''">
+          and e.safetysupervision = #{params.safetysupervision}
+        </if>
+        <if test="params.province != null and params.province != ''">
+          and e.province = #{params.province}
+        </if>
+        <if test="params.city != null and params.city != ''">
+          and e.city = #{params.city}
+        </if>
+        <if test="params.district != null and params.district != ''">
+          and e.district = #{params.district}
+        </if>
+        <if test="params.street != null and params.street != ''">
+          and e.street = #{params.street}
+        </if>
+        <if test="params.committee != null and params.committee != ''">
+          and e.committee = #{params.committee}
+        </if>
+      </otherwise>
+    </choose>
+    <if test="params.filterProvince != null and params.filterProvince  != ''">
+      and e.province = #{params.filterProvince}
+    </if>
+    <if test="params.filterCity != null and  params.filterCity  != ''">
+      and e.city = #{params.filterCity}
+    </if>
+    <if test="params.filterDistrict != null and params.filterDistrict  != ''">
+      and e.district = #{params.filterDistrict}
+    </if>
+    <if test="params.filterStreet != null and params.filterStreet  != ''">
+      and e.street = #{params.filterStreet}
+    </if>
+    <if test="params.filterCommittee != null and params.filterCommittee  != ''">
+      and e.committee = #{params.filterCommittee}
+    </if>
+    <if test="params.type != null and params.type  != ''">
+      and st.type = #{params.type}
+    </if>
+    order by st.createtime desc
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from standardtemplate1
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.gk.firework.Domain.StandardTemplate1" >
+    <!--          -->
+    insert into standardtemplate1 (id, menu, url, 
+      filename, settime, enterprisenumber, 
+      enterprisename, name, createtime, 
+      createby, createbyname, updatetime, 
+      updateby, updatebyname, validflag, 
+      type, content)
+    values (#{id,jdbcType=BIGINT}, #{menu,jdbcType=VARCHAR}, #{url,jdbcType=VARCHAR}, 
+      #{filename,jdbcType=VARCHAR}, #{settime,jdbcType=TIMESTAMP}, #{enterprisenumber,jdbcType=VARCHAR}, 
+      #{enterprisename,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{createtime,jdbcType=TIMESTAMP}, 
+      #{createby,jdbcType=BIGINT}, #{createbyname,jdbcType=VARCHAR}, #{updatetime,jdbcType=TIMESTAMP}, 
+      #{updateby,jdbcType=VARCHAR}, #{updatebyname,jdbcType=VARCHAR}, #{validflag,jdbcType=BIT}, 
+      #{type,jdbcType=TINYINT}, #{content,jdbcType=LONGVARCHAR})
+  </insert>
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.StandardTemplate1" >
+    <!--          -->
+    insert into standardtemplate1
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="menu != null" >
+        menu,
+      </if>
+      <if test="url != null" >
+        url,
+      </if>
+      <if test="filename != null" >
+        filename,
+      </if>
+      <if test="settime != null" >
+        settime,
+      </if>
+      <if test="enterprisenumber != null" >
+        enterprisenumber,
+      </if>
+      <if test="enterprisename != null" >
+        enterprisename,
+      </if>
+      <if test="name != null" >
+        name,
+      </if>
+      <if test="createtime != null" >
+        createtime,
+      </if>
+      <if test="createby != null" >
+        createby,
+      </if>
+      <if test="createbyname != null" >
+        createbyname,
+      </if>
+      <if test="updatetime != null" >
+        updatetime,
+      </if>
+      <if test="updateby != null" >
+        updateby,
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname,
+      </if>
+      <if test="validflag != null" >
+        validflag,
+      </if>
+      <if test="type != null" >
+        type,
+      </if>
+      <if test="content != null" >
+        content,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="menu != null" >
+        #{menu,jdbcType=VARCHAR},
+      </if>
+      <if test="url != null" >
+        #{url,jdbcType=VARCHAR},
+      </if>
+      <if test="filename != null" >
+        #{filename,jdbcType=VARCHAR},
+      </if>
+      <if test="settime != null" >
+        #{settime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="enterprisenumber != null" >
+        #{enterprisenumber,jdbcType=VARCHAR},
+      </if>
+      <if test="enterprisename != null" >
+        #{enterprisename,jdbcType=VARCHAR},
+      </if>
+      <if test="name != null" >
+        #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        #{updateby,jdbcType=VARCHAR},
+      </if>
+      <if test="updatebyname != null" >
+        #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        #{validflag,jdbcType=BIT},
+      </if>
+      <if test="type != null" >
+        #{type,jdbcType=TINYINT},
+      </if>
+      <if test="content != null" >
+        #{content,jdbcType=LONGVARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.StandardTemplate1" >
+    <!--          -->
+    update standardtemplate1
+    <set >
+      <if test="menu != null" >
+        menu = #{menu,jdbcType=VARCHAR},
+      </if>
+      <if test="url != null" >
+        url = #{url,jdbcType=VARCHAR},
+      </if>
+      <if test="filename != null" >
+        filename = #{filename,jdbcType=VARCHAR},
+      </if>
+      <if test="settime != null" >
+        settime = #{settime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="enterprisenumber != null" >
+        enterprisenumber = #{enterprisenumber,jdbcType=VARCHAR},
+      </if>
+      <if test="enterprisename != null" >
+        enterprisename = #{enterprisename,jdbcType=VARCHAR},
+      </if>
+      <if test="name != null" >
+        name = #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        createtime = #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        createby = #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        createbyname = #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        updateby = #{updateby,jdbcType=VARCHAR},
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        validflag = #{validflag,jdbcType=BIT},
+      </if>
+      <if test="type != null" >
+        type = #{type,jdbcType=TINYINT},
+      </if>
+      <if test="content != null" >
+        content = #{content,jdbcType=LONGVARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKeyWithBLOBs" parameterType="com.gk.firework.Domain.StandardTemplate1" >
+    <!--          -->
+    update standardtemplate1
+    set menu = #{menu,jdbcType=VARCHAR},
+      url = #{url,jdbcType=VARCHAR},
+      filename = #{filename,jdbcType=VARCHAR},
+      settime = #{settime,jdbcType=TIMESTAMP},
+      enterprisenumber = #{enterprisenumber,jdbcType=VARCHAR},
+      enterprisename = #{enterprisename,jdbcType=VARCHAR},
+      name = #{name,jdbcType=VARCHAR},
+      createtime = #{createtime,jdbcType=TIMESTAMP},
+      createby = #{createby,jdbcType=BIGINT},
+      createbyname = #{createbyname,jdbcType=VARCHAR},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      updateby = #{updateby,jdbcType=VARCHAR},
+      updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      validflag = #{validflag,jdbcType=BIT},
+      type = #{type,jdbcType=TINYINT},
+      content = #{content,jdbcType=LONGVARCHAR}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.StandardTemplate1" >
+    <!--          -->
+    update standardtemplate1
+    set menu = #{menu,jdbcType=VARCHAR},
+      url = #{url,jdbcType=VARCHAR},
+      filename = #{filename,jdbcType=VARCHAR},
+      settime = #{settime,jdbcType=TIMESTAMP},
+      enterprisenumber = #{enterprisenumber,jdbcType=VARCHAR},
+      enterprisename = #{enterprisename,jdbcType=VARCHAR},
+      name = #{name,jdbcType=VARCHAR},
+      createtime = #{createtime,jdbcType=TIMESTAMP},
+      createby = #{createby,jdbcType=BIGINT},
+      createbyname = #{createbyname,jdbcType=VARCHAR},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      updateby = #{updateby,jdbcType=VARCHAR},
+      updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      validflag = #{validflag,jdbcType=BIT},
+      type = #{type,jdbcType=TINYINT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/StaticStockMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/StaticStockMapper.xml
new file mode 100644
index 0000000..61157d3
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/StaticStockMapper.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.StaticStockMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.StaticStock" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="owner" property="owner" jdbcType="BIGINT" />
+    <result column="enterpriseName" property="enterpriseName" jdbcType="VARCHAR" />
+    <result column="enterpriseNumber" property="enterpriseNumber" jdbcType="VARCHAR" />
+    <result column="safetySuperVision" property="safetySuperVision" jdbcType="VARCHAR" />
+    <result column="province" property="province" jdbcType="VARCHAR" />
+    <result column="city" property="city" jdbcType="VARCHAR" />
+    <result column="district" property="district" jdbcType="VARCHAR" />
+    <result column="stockNum" property="stockNum" jdbcType="DECIMAL" />
+    <result column="firecracker" property="firecracker" jdbcType="DECIMAL" />
+    <result column="spray" property="spray" jdbcType="DECIMAL" />
+    <result column="rotation" property="rotation" jdbcType="DECIMAL" />
+    <result column="bead" property="bead" jdbcType="DECIMAL" />
+    <result column="toy" property="toy" jdbcType="DECIMAL" />
+    <result column="combined" property="combined" jdbcType="DECIMAL" />
+    <result column="updatedby" property="updatedby" jdbcType="VARCHAR" />
+    <result column="updateat" property="updateat" jdbcType="TIMESTAMP" />
+    <result column="flag" property="flag" jdbcType="TINYINT" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, owner, enterpriseName, enterpriseNumber, safetySuperVision, province, city, district,
+    stockNum, firecracker, spray, rotation, bead, toy, combined, updatedby, updateat,
+    flag
+  </sql>
+
+    <select id="selectEnterpriseStocks" resultType="com.gk.firework.Domain.StaticStock">
+      select
+      <include refid="Base_Column_List"/>
+      from staticstock
+        <where>
+          1=1
+          <if test="condition.name != null and condition.name != ''">
+            and enterprisename like CONCAT('%',#{condition.name},'%')
+          </if>
+          <if test="condition.operator != null and condition.operator != ''">
+            and (enterprisenumber =#{condition.operator}
+            <if test="condition.subList != null and condition.subList.size() > 0">
+              <foreach collection="condition.subList" item="item" index="index" >
+                or  enterprisenumber = #{item}
+              </foreach>
+            </if>
+            )
+          </if>
+          <if test="condition.type != null and condition.type != ''">
+            and safetysupervision = #{condition.type}
+          </if>
+          <if test="condition.province != null and condition.province != ''">
+            and province = #{condition.province}
+          </if>
+          <if test="condition.city != null and condition.city != ''">
+            and city = #{condition.city}
+          </if>
+          <if test="condition.district != null and condition.district != ''">
+            and district = #{condition.district}
+          </if>
+        </where>
+    </select>
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/StockInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/StockInfoMapper.xml
new file mode 100644
index 0000000..9102a9c
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/StockInfoMapper.xml
@@ -0,0 +1,1829 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.StockInfoMapper">
+    <resultMap id="BaseResultMap" type="com.gk.firework.Domain.StockInfo">
+        <!--          -->
+        <id column="id" property="id" jdbcType="BIGINT"/>
+        <result column="productid" property="productid" jdbcType="BIGINT"/>
+        <result column="directioncode" property="directioncode" jdbcType="VARCHAR"/>
+        <result column="directionboxcode" property="directionboxcode" jdbcType="VARCHAR"/>
+        <result column="num" property="num" jdbcType="INTEGER"/>
+        <result column="owner" property="owner" jdbcType="VARCHAR"/>
+        <result column="status" property="status" jdbcType="VARCHAR"/>
+        <result column="indate" property="indate" jdbcType="TIMESTAMP"/>
+        <result column="outdate" property="outdate" jdbcType="TIMESTAMP"/>
+        <result column="operator" property="operator" jdbcType="VARCHAR"/>
+        <result column="type" property="type" jdbcType="TINYINT"/>
+        <result column="remark" property="remark" jdbcType="VARCHAR"/>
+        <result column="createdby" property="createdby" jdbcType="VARCHAR"/>
+        <result column="createddate" property="createddate" jdbcType="TIMESTAMP"/>
+        <result column="modifiedby" property="modifiedby" jdbcType="VARCHAR"/>
+        <result column="modifieddate" property="modifieddate" jdbcType="TIMESTAMP"/>
+        <result column="flag" property="flag" jdbcType="TINYINT"/>
+    </resultMap>
+    <resultMap id="StockVoResultMap" type="com.gk.firework.Domain.Vo.StockVo"/>
+    <sql id="Base_Column_List">
+        <!--          -->
+        id, productid, directioncode, directionboxcode, num, owner, status, indate, outdate,
+        operator, type, remark, createdby, createddate, modifiedby, modifieddate, flag
+    </sql>
+    <select id="selectStockByDirection" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List"/>
+        from stock${slice}
+        <where>
+            directioncode = #{directionCode}
+        </where>
+        for update
+    </select>
+
+    <select id="selectStockByDireAndUser" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List"/>
+        from stock${slice}
+        <where>
+            directioncode = #{directionCode}
+            and (owner = #{companyId} or status = '已售出')
+        </where>
+    </select>
+    <select id="selectEarlyWarn" resultType="com.gk.firework.Domain.StockInfo">
+        SELECT stock.`owner`,
+        SUM(stock.stocknum) as num
+        FROM(
+        select stock.`owner`,sum(stock.num/product.boxnumber) stocknum
+        from stock as stock,product as product
+        where stock.productid = product.id
+        and stock.`status` =''
+        GROUP BY stock.`owner`
+        <foreach collection="slices" item="item" index="index">
+            UNION ALL
+            select stock.`owner`,sum(stock.num/product.boxnumber) stocknum
+            from stock_slice${item} as stock,product as product
+            where stock.productid = product.id
+            and stock.`status` =''
+            GROUP BY stock.`owner`
+        </foreach>
+        ) as stock
+        LEFT JOIN enterprise on enterprise.id = stock.`owner`
+        where enterprise.safetysupervision = #{enterprisetype}
+        GROUP BY stock.`owner`
+        HAVING SUM(stock.stocknum) &gt;= #{min} and SUM(stock.stocknum) &lt; #{max}
+    </select>
+    <select id="selectAlarm" resultType="com.gk.firework.Domain.StockInfo">
+        SELECT stock.`owner`,
+        SUM(stock.stocknum) as num
+        FROM(
+        select stock.`owner`,sum(stock.num/product.boxnumber) stocknum
+        from stock as stock,product as product
+        where stock.productid = product.id
+        and stock.`status` =''
+        GROUP BY stock.`owner`
+        <foreach collection="slices" item="item" index="index">
+            UNION ALL
+            select stock.`owner`,sum(stock.num/product.boxnumber) stocknum
+            from stock_slice${item} as stock,product as product
+            where stock.productid = product.id
+            and stock.`status` =''
+            GROUP BY stock.`owner`
+        </foreach>
+        ) as stock
+        LEFT JOIN enterprise on enterprise.id = stock.`owner`
+        where enterprise.safetysupervision = #{enterprisetype}
+        GROUP BY stock.`owner`
+        HAVING SUM(stock.stocknum) &gt;= #{max}
+    </select>
+    <insert id="insertStockInfo">
+        insert into stock${slice}
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="stockInfo.id != null">
+                id,
+            </if>
+            <if test="stockInfo.productid != null">
+                productid,
+            </if>
+            <if test="stockInfo.directioncode != null">
+                directioncode,
+            </if>
+            <if test="stockInfo.directionboxcode != null">
+                directionboxcode,
+            </if>
+            <if test="stockInfo.num != null">
+                num,
+            </if>
+            <if test="stockInfo.owner != null">
+                owner,
+            </if>
+            <if test="stockInfo.status != null">
+                status,
+            </if>
+            <if test="stockInfo.indate != null">
+                indate,
+            </if>
+            <if test="stockInfo.outdate != null">
+                outdate,
+            </if>
+            <if test="stockInfo.operator != null">
+                operator,
+            </if>
+            <if test="stockInfo.type != null">
+                type,
+            </if>
+            <if test="stockInfo.remark != null">
+                remark,
+            </if>
+            <if test="stockInfo.createdby != null">
+                createdby,
+            </if>
+            <if test="stockInfo.createddate != null">
+                createddate,
+            </if>
+            <if test="stockInfo.modifiedby != null">
+                modifiedby,
+            </if>
+            <if test="stockInfo.modifieddate != null">
+                modifieddate,
+            </if>
+            <if test="stockInfo.flag != null">
+                flag,
+            </if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="stockInfo.id != null">
+                #{stockInfo.id,jdbcType=BIGINT},
+            </if>
+            <if test="stockInfo.productid != null">
+                #{stockInfo.productid,jdbcType=BIGINT},
+            </if>
+            <if test="stockInfo.directioncode != null">
+                #{stockInfo.directioncode,jdbcType=VARCHAR},
+            </if>
+            <if test="stockInfo.directionboxcode != null">
+                #{stockInfo.directionboxcode,jdbcType=VARCHAR},
+            </if>
+            <if test="stockInfo.num != null">
+                #{stockInfo.num,jdbcType=INTEGER},
+            </if>
+            <if test="stockInfo.owner != null">
+                #{stockInfo.owner,jdbcType=VARCHAR},
+            </if>
+            <if test="stockInfo.status != null">
+                #{stockInfo.status,jdbcType=VARCHAR},
+            </if>
+            <if test="stockInfo.indate != null">
+                #{stockInfo.indate,jdbcType=TIMESTAMP},
+            </if>
+            <if test="stockInfo.outdate != null">
+                #{stockInfo.outdate,jdbcType=TIMESTAMP},
+            </if>
+            <if test="stockInfo.operator != null">
+                #{stockInfo.operator,jdbcType=VARCHAR},
+            </if>
+            <if test="stockInfo.type != null">
+                #{stockInfo.type,jdbcType=TINYINT},
+            </if>
+            <if test="stockInfo.remark != null">
+                #{stockInfo.remark,jdbcType=VARCHAR},
+            </if>
+            <if test="stockInfo.createdby != null">
+                #{stockInfo.createdby,jdbcType=VARCHAR},
+            </if>
+            <if test="stockInfo.createddate != null">
+                #{stockInfo.createddate,jdbcType=TIMESTAMP},
+            </if>
+            <if test="stockInfo.modifiedby != null">
+                #{stockInfo.modifiedby,jdbcType=VARCHAR},
+            </if>
+            <if test="stockInfo.modifieddate != null">
+                #{stockInfo.modifieddate,jdbcType=TIMESTAMP},
+            </if>
+            <if test="stockInfo.flag != null">
+                #{stockInfo.flag,jdbcType=TINYINT},
+            </if>
+        </trim>
+        <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
+            SELECT LAST_INSERT_ID()
+        </selectKey>
+    </insert>
+    <update id="updateStockInfo" parameterType="com.gk.firework.Domain.StockInfo">
+        <!--          -->
+        update stock${slice}
+        <set>
+            <if test="stockInfo.productid != null">
+                productid = #{stockInfo.productid,jdbcType=BIGINT},
+            </if>
+            <if test="stockInfo.directioncode != null">
+                directioncode = #{stockInfo.directioncode,jdbcType=VARCHAR},
+            </if>
+            <if test="stockInfo.directionboxcode != null">
+                directionboxcode = #{stockInfo.directionboxcode,jdbcType=VARCHAR},
+            </if>
+            <if test="stockInfo.num != null">
+                num = #{stockInfo.num,jdbcType=INTEGER},
+            </if>
+            <if test="stockInfo.owner != null">
+                owner = #{stockInfo.owner,jdbcType=VARCHAR},
+            </if>
+            <if test="stockInfo.status != null">
+                status = #{stockInfo.status,jdbcType=VARCHAR},
+            </if>
+            <if test="stockInfo.indate != null">
+                indate = #{stockInfo.indate,jdbcType=TIMESTAMP},
+            </if>
+            <if test="stockInfo.outdate != null">
+                outdate = #{stockInfo.outdate,jdbcType=TIMESTAMP},
+            </if>
+            <if test="stockInfo.operator != null">
+                operator = #{stockInfo.operator,jdbcType=VARCHAR},
+            </if>
+            <if test="stockInfo.type != null">
+                type = #{stockInfo.type,jdbcType=TINYINT},
+            </if>
+            <if test="stockInfo.remark != null">
+                remark = #{stockInfo.remark,jdbcType=VARCHAR},
+            </if>
+            <if test="stockInfo.createdby != null">
+                createdby = #{stockInfo.createdby,jdbcType=VARCHAR},
+            </if>
+            <if test="stockInfo.createddate != null">
+                createddate = #{stockInfo.createddate,jdbcType=TIMESTAMP},
+            </if>
+            <if test="stockInfo.modifiedby != null">
+                modifiedby = #{stockInfo.modifiedby,jdbcType=VARCHAR},
+            </if>
+            <if test="stockInfo.modifieddate != null">
+                modifieddate = #{stockInfo.modifieddate,jdbcType=TIMESTAMP},
+            </if>
+            <if test="stockInfo.flag != null">
+                flag = #{stockInfo.flag,jdbcType=TINYINT},
+            </if>
+        </set>
+        where id = #{stockInfo.id,jdbcType=BIGINT}
+    </update>
+    <update id="clearStock">
+        UPDATE stock${slice} AS stock
+        LEFT JOIN enterprise ON enterprise.id = stock.`owner`
+        LEFT JOIN product ON product.id = stock.productid
+        AND product.isdel = 0
+        <set>
+            stock.owner = '',
+            stock.modifieddate = #{date},
+            stock.remark = #{remark}
+        </set>
+        where
+        `status` = ''
+        AND stock.`owner` = #{owner}
+        AND enterprise.validflag = 1
+        AND enterprise.enterprisestatus = 'ON'
+    </update>
+    <update id="clearStockByItem">
+        UPDATE stock${slice} AS stock
+        LEFT JOIN enterprise ON enterprise.id = stock.`owner`
+        LEFT JOIN product ON product.id = stock.productid
+        AND product.isdel = 0
+        <set>
+            stock.owner = '',
+            stock.modifieddate = #{date},
+            stock.remark = #{remark}
+        </set>
+        where
+        `status` = ''
+        AND stock.`owner` = #{owner}
+        AND enterprise.validflag = 1
+        AND enterprise.enterprisestatus = 'ON'
+        AND product.directioncode IN
+        <foreach collection="list" item="item" index="index" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+    </update>
+
+    <select id="selectEnterpriseStockDataGrid" resultMap="StockVoResultMap">
+        SELECT
+        enterprise.id as `owner`,
+        IFNULL(SUM( stockNum ),0) AS stockNum,
+        enterprise.enterprisename,
+        enterprise.enterprisenumber,
+        enterprise.province,
+        enterprise.city,
+        enterprise.district
+
+        FROM(
+        SELECT
+        stock.`owner`,
+        count(1)/product.boxnumber as stockNum,
+        enterprise.enterprisename as enterpriseName,
+        enterprise.enterprisenumber as enterpriseNumber
+        FROM
+        stock as stock
+        LEFT JOIN enterprise on enterprise.id = stock.`owner`
+        left join product on product.id = stock.productid and product.isdel = 0
+        <where>
+            `status` = ''
+            and stock.`owner` != ''
+            and enterprise.validflag = 1
+            and enterprise.enterprisestatus = 'ON'
+            <if test="condition.name != null and condition.name != ''">
+                and enterprise.enterprisename like CONCAT('%',#{condition.name},'%')
+            </if>
+            <if test="condition.operator != null and condition.operator != ''">
+                and (enterprise.enterprisenumber =#{condition.operator}
+                <if test="condition.subList != null and condition.subList.size() > 0">
+                    <foreach collection="condition.subList" item="item" index="index" >
+                        or  enterprise.enterprisenumber = #{item}
+                    </foreach>
+                </if>
+                )
+            </if>
+            <if test="condition.type != null and condition.type != ''">
+                and enterprise.safetysupervision = #{condition.type}
+            </if>
+            <if test="condition.province != null and condition.province != ''">
+                and enterprise.province = #{condition.province}
+            </if>
+            <if test="condition.city != null and condition.city != ''">
+                and enterprise.city = #{condition.city}
+            </if>
+            <if test="condition.district != null and condition.district != ''">
+                and enterprise.district = #{condition.district}
+            </if>
+            <if test="condition.street != null and condition.street != ''">
+                and enterprise.street = #{condition.street}
+            </if>
+            <if test="condition.community != null and condition.community != ''">
+                and enterprise.committee = #{condition.community}
+            </if>
+        </where>
+        GROUP BY `owner`,productid
+        <foreach collection="list" item="item" index="index">
+            union all
+            (
+            SELECT
+            stock.`owner`,
+            count(1)/product.boxnumber as stockNum,
+            enterprise.enterprisename as enterpriseName,
+            enterprise.enterprisenumber as enterpriseNumber
+            FROM
+            stock_slice${item} as stock
+            LEFT JOIN enterprise on enterprise.id = stock.`owner`
+            LEFT JOIN product on product.id = stock.productid and product.isdel = 0
+            <where>
+                `status` = ''
+                and stock.`owner` != ''
+                and enterprise.validflag = 1
+                and enterprise.enterprisestatus = 'ON'
+                <if test="condition.name != null and condition.name != ''">
+                    and enterprise.enterprisename like CONCAT('%',#{condition.name},'%')
+                </if>
+                <if test="condition.operator != null and condition.operator != ''">
+                    and (enterprise.enterprisenumber =#{condition.operator}
+                    <if test="condition.subList != null and condition.subList.size() > 0">
+                        <foreach collection="condition.subList" item="item" index="index" >
+                            or  enterprise.enterprisenumber = #{item}
+                        </foreach>
+                    </if>
+                    )
+                </if>
+                <if test="condition.type != null  and condition.type != ''">
+                    and enterprise.safetysupervision = #{condition.type}
+                </if>
+                <if test="condition.province != null and condition.province != ''">
+                    and enterprise.province = #{condition.province}
+                </if>
+                <if test="condition.city != null and condition.city != ''">
+                    and enterprise.city = #{condition.city}
+                </if>
+                <if test="condition.district != null and condition.district != ''">
+                    and enterprise.district = #{condition.district}
+                </if>
+                <if test="condition.street != null and condition.street != ''">
+                    and enterprise.street = #{condition.street}
+                </if>
+                <if test="condition.community != null and condition.community != ''">
+                    and enterprise.committee = #{condition.community}
+                </if>
+
+            </where>
+            GROUP BY `owner`,productid
+            )
+        </foreach>
+        )as temp
+        RIGHT JOIN enterprise on temp.enterpriseName = enterprise.enterprisename
+        <where>
+            1=1
+            and enterprise.validflag = 1
+            and enterprise.enterprisestatus = 'ON'
+            <if test="condition.name != null  and condition.name != ''">
+                and enterprise.enterprisename like CONCAT('%',#{condition.name},'%')
+            </if>
+            <if test="condition.operator != null  and condition.operator != ''">
+                and (enterprise.enterprisenumber =#{condition.operator}
+                <if test="condition.subList != null and condition.subList.size() > 0">
+                    <foreach collection="condition.subList" item="item" index="index" >
+                        or  enterprise.enterprisenumber = #{item}
+                    </foreach>
+                </if>
+                )
+            </if>
+            <if test="condition.type != null  and condition.type != ''">
+                and enterprise.safetysupervision = #{condition.type}
+            </if>
+            <if test="condition.province != null  and condition.province != ''">
+                and enterprise.province = #{condition.province}
+            </if>
+            <if test="condition.city != null  and condition.city != ''">
+                and enterprise.city = #{condition.city}
+            </if>
+            <if test="condition.district != null  and condition.district != ''">
+                and enterprise.district = #{condition.district}
+            </if>
+            <if test="condition.street != null  and condition.street != ''">
+                and enterprise.street = #{condition.street}
+            </if>
+            <if test="condition.community != null  and condition.community != ''">
+                and enterprise.committee = #{condition.community}
+            </if>
+        </where>
+        GROUP BY
+        enterprise.enterprisename
+    </select>
+
+    <select id="selectStockDataGrid" resultMap="StockVoResultMap">
+        SELECT
+        stock.productid,
+        product.directioncode as directioncode,
+        product.`name`,
+        product.explosivecontent as explosiveContent,
+        product.specification,
+        product.createddate,
+        product.boxnumber,
+        product.type AS productType,
+        product.secondarytype AS secondaryType,
+        count(1)/product.boxnumber as countNum,
+        enterprise.enterprisenumber
+        FROM
+        stock as stock
+        LEFT JOIN product on product.id = stock.productid and product.isdel = 0
+        LEFT JOIN enterprise on enterprise.id = stock.owner
+        <where>
+            stock.`status` = ''
+            and stock.`owner` = #{condition.owner}
+            <if test="condition.name != null and condition.name != ''">
+                and product.name = #{condition.name}
+            </if>
+            <if test="condition.directionCode != null and condition.directionCode != ''">
+                and product.directioncode = #{condition.directionCode}
+            </if>
+            <if test="condition.manufacturer != null and condition.manufacturer != ''">
+                and product.manufacturer = #{condition.manufacturer}
+            </if>
+            <if test="condition.type != null and condition.type != ''">
+                and product.type = #{condition.type}
+            </if>
+            <if test="condition.secondaryType != null and condition.secondaryType != ''">
+                and product.secondarytype = #{condition.secondaryType}
+            </if>
+        </where>
+        GROUP BY stock.productid
+        <foreach collection="list" item="item" index="index">
+            union all
+            (
+            select
+            stock.productid,
+            product.directioncode,
+            product.`name`,
+            product.explosivecontent,
+            product.specification,
+            product.createddate,
+            product.boxnumber,
+            product.type AS productType,
+            product.secondarytype AS secondaryType,
+            count(1)/product.boxnumber as countNum,
+            enterprise.enterprisenumber
+            from stock_slice${item} as stock
+            LEFT JOIN product on product.id = stock.productid and product.isdel = 0
+            LEFT JOIN enterprise on enterprise.id = stock.owner
+            <where>
+                stock.`status` = ''
+                and stock.`owner` = #{condition.owner}
+                <if test="condition.name != null and  condition.name != ''">
+                    and product.name = #{condition.name}
+                </if>
+                <if test="condition.directionCode != null and condition.directionCode != ''">
+                    and product.directioncode = #{condition.directionCode}
+                </if>
+                <if test="condition.manufacturer != null and condition.manufacturer != ''">
+                    and product.manufacturer = #{condition.manufacturer}
+                </if>
+                <if test="condition.type != null and condition.type != ''">
+                    and product.type = #{condition.type}
+                </if>
+                <if test="condition.secondaryType != null and condition.secondaryType != ''">
+                    and product.secondarytype = #{condition.secondaryType}
+                </if>
+            </where>
+            GROUP BY stock.productid
+            )
+        </foreach>
+    </select>
+
+    <select id="selectNoEntryCount" resultType="com.gk.firework.Domain.Vo.NoEntryVo">
+        SELECT
+        temp.enterprisename AS name,
+        COUNT(1) AS number
+        FROM(
+        SELECT
+        stock.directioncode,
+        enterprise.enterprisename
+        FROM
+        stock as stock
+        LEFT JOIN `user` on `user`.username = stock.modifiedby
+        LEFT JOIN enterprise ON enterprise.id = `user`.companyid
+        <where>
+            `owner` = ''
+            and DATE(modifieddate) = DATE_SUB(DATE(#{time}),INTERVAL 30 day)
+        </where>
+
+        <foreach collection="list" item="item" index="index">
+            union all
+            (SELECT
+            stock.directioncode,
+            enterprise.enterprisename
+            FROM
+            stock_slice${item} as stock
+            LEFT JOIN `user` on `user`.username = stock.modifiedby
+            LEFT JOIN enterprise ON enterprise.id = `user`.companyid
+            <where>
+                `owner` = ''
+                and DATE(modifieddate) = DATE_SUB(DATE(#{time}),INTERVAL #{period} day)
+            </where>)
+        </foreach>
+        )temp
+        GROUP BY temp.enterprisename
+    </select>
+    <select id="selectNoEntryDetail" resultType="com.gk.firework.Domain.Vo.StockVo">
+        SELECT
+        *
+        FROM
+        (
+        SELECT
+        stock.directioncode,
+        enterprise.enterprisename AS enterpriseName,
+        product.name,
+        stock.modifieddate
+        FROM
+        stock as stock
+        LEFT JOIN `user` on `user`.username = stock.modifiedby
+        LEFT JOIN enterprise ON enterprise.id = `user`.companyid
+        LEFT JOIN product on product.id = stock.productid and product.isdel = 0
+        <where>
+            `owner` = ''
+            and enterprise.id = #{condition.enterpriseid}
+            and DATE(stock.modifieddate) = DATE(#{condition.starttime})
+        </where>
+
+        <foreach collection="condition.list" item="item" index="index">
+            union all
+            (SELECT
+            stock.directioncode,
+            enterprise.enterprisename AS enterpriseName,
+            product.name,
+            stock.modifieddate
+            FROM
+            stock_slice${item} as stock
+            LEFT JOIN `user` on `user`.username = stock.modifiedby
+            LEFT JOIN enterprise ON enterprise.id = `user`.companyid
+            LEFT JOIN product on product.id = stock.productid and product.isdel = 0
+            <where>
+                `owner` = ''
+                and enterprise.id = #{condition.enterpriseid}
+                and DATE(stock.modifieddate) = DATE(#{condition.starttime})
+            </where>)
+        </foreach>
+        )temp
+    </select>
+    <select id="selectStockByProductId" resultType="com.gk.firework.Domain.StockInfo">
+        select
+        <include refid="Base_Column_List"/>
+        from stock${slice}
+        <where>
+            productid = #{id}
+        </where>
+        for update
+    </select>
+    <select id="selectStockVoByItemCode" resultType="com.gk.firework.Domain.Vo.StockVo">
+        select
+        stock.directioncode,
+        stock.owner,
+        stock.status,
+        stock.createdby,
+        stock.createddate,
+        stock.modifiedby,
+        stock.modifieddate,
+        product.name
+        from stock${condition.slice} as stock
+        left join product on product.id = stock.productid and product.isdel = 0
+        <where>
+            product.directioncode = #{condition.itemCode}
+            and stock.status = ''
+            <if test="condition.directionCode != null ">
+                and stock.directioncode = #{condition.directionCode}
+            </if>
+            <if test="condition.owner != null">
+                and stock.owner = #{condition.owner}
+            </if>
+        </where>
+    </select>
+    <select id="selectEnterpriseSaleDataGrid" resultType="com.gk.firework.Domain.Vo.StockVo">
+        SELECT
+        SUM( entrynum ) AS entryNum,
+        SUM( returnnum ) AS returnNum,
+        SUM( salenum ) AS saleNum,
+        SUM( deliverynum ) AS deliveryNum,
+        SUM( returndeliverynum ) AS returnDeliveryNum,
+        companynumber as enterpriseNumber,
+        enterprisename
+        FROM
+        (
+        SELECT
+        IFNULL(SUM( num / boxnumber ),0) AS entrynum,
+        0 AS returnnum,
+        0 AS salenum,
+        0 AS deliverynum,
+        0 AS returndeliverynum,
+        companynumber,
+        enterprisename
+        FROM
+        (
+        SELECT
+        SUM( detail.num ) AS num,
+        enterprise.enterprisenumber AS companynumber,
+        enterprise.enterprisename,
+        product.boxnumber
+        FROM
+        enterprise
+        LEFT JOIN entryorder AS entry ON entry.companynumber = enterprise.enterprisenumber
+        and entry.type = 1
+        and entry.entrydate &gt;= #{condition.beginDate}
+        and entry.entrydate &lt;= #{condition.endDate}
+        LEFT JOIN entrydetail AS detail ON detail.entryorder = entry.`code`
+        LEFT JOIN product ON detail.itemcode = product.directioncode and product.isdel = 0
+        <where>
+            enterprise.enterprisestatus = 'ON'
+            and enterprise.validflag = 1
+            <if test="condition.name != null">
+                and enterprise.enterprisename like CONCAT('%',#{condition.name},'%')
+            </if>
+            <if test="condition.operator != null  and condition.operator != ''">
+                and (enterprise.enterprisenumber =#{condition.operator}
+                <if test="condition.subList != null and condition.subList.size() > 0">
+                    <foreach collection="condition.subList" item="item" index="index" >
+                        or  enterprise.enterprisenumber = #{item}
+                    </foreach>
+                </if>
+                )
+            </if>
+            <if test="condition.type != null  and condition.type != ''">
+                and enterprise.safetysupervision = #{condition.type}
+            </if>
+            <if test="condition.province != null  and condition.province != ''">
+                and enterprise.province = #{condition.province}
+            </if>
+            <if test="condition.city != null  and condition.city != ''">
+                and enterprise.city = #{condition.city}
+            </if>
+            <if test="condition.district != null  and condition.district != ''">
+                and enterprise.district = #{condition.district}
+            </if>
+            <if test="condition.street != null  and condition.street != ''">
+                and enterprise.street = #{condition.street}
+            </if>
+            <if test="condition.community != null  and condition.community != ''">
+                and enterprise.committee = #{condition.community}
+            </if>
+        </where>
+
+
+        GROUP BY
+        enterprise.enterprisenumber,product.directioncode)entrytemp
+        GROUP BY companynumber
+
+        UNION ALL
+        (
+        SELECT
+        0 AS entrynum,
+        IFNULL(SUM( num / boxnumber ),0) AS returnnum,
+        0 AS salenum,
+        0 AS deliverynum,
+        0 AS returndeliverynum,
+        companynumber,
+        enterprisename
+        FROM
+        (
+        SELECT
+        SUM( detail.num ) AS num,
+        enterprise.enterprisenumber AS companynumber,
+        enterprise.enterprisename,
+        product.boxnumber
+        FROM
+        enterprise
+        LEFT JOIN entryorder AS entry ON entry.companynumber = enterprise.enterprisenumber
+        and entry.type = 2
+        and entry.entrydate &gt;= #{condition.beginDate}
+        and entry.entrydate &lt;= #{condition.endDate}
+        LEFT JOIN entrydetail AS detail ON detail.entryorder = entry.`code`
+        LEFT JOIN product ON detail.itemcode = product.directioncode and product.isdel = 0
+        <where>
+            enterprise.enterprisestatus = 'ON'
+            and enterprise.validflag = 1
+            <if test="condition.name != null">
+                and enterprise.enterprisename like CONCAT('%',#{condition.name},'%')
+            </if>
+            <if test="condition.operator != null and condition.operator != ''">
+                and (enterprise.enterprisenumber =#{condition.operator}
+                <if test="condition.subList != null and condition.subList.size() > 0">
+                    <foreach collection="condition.subList" item="item" index="index" >
+                        or  enterprise.enterprisenumber = #{item}
+                    </foreach>
+                </if>
+                )
+            </if>
+            <if test="condition.type != null and condition.type != ''">
+                and enterprise.safetysupervision = #{condition.type}
+            </if>
+            <if test="condition.province != null and condition.province != ''">
+                and enterprise.province = #{condition.province}
+            </if>
+            <if test="condition.city != null and condition.city != ''">
+                and enterprise.city = #{condition.city}
+            </if>
+            <if test="condition.district != null and condition.district != ''">
+                and enterprise.district = #{condition.district}
+            </if>
+            <if test="condition.street != null and condition.street != ''">
+                and enterprise.street = #{condition.street}
+            </if>
+            <if test="condition.community != null and condition.community != ''">
+                and enterprise.committee = #{condition.community}
+            </if>
+        </where>
+
+
+        GROUP BY
+        enterprise.enterprisenumber,product.directioncode)entrytemp
+        GROUP BY companynumber
+        ) UNION ALL
+        (
+        SELECT
+        0 AS entrynum,
+        0 AS returnnum,
+        IFNULL(SUM( salenum ),0),
+        0 AS deliverynum,
+        0 AS returndeliverynum,
+        companynumber,
+        enterprisename
+        FROM
+        (
+        SELECT
+        ( count( 1 )/ product.boxnumber ) AS salenum,
+        enterprise.enterprisenumber AS companynumber,
+        enterprise.enterprisename
+        FROM
+        enterprise
+        LEFT JOIN saleorder AS sale ON sale.companynumber = enterprise.enterprisenumber
+        AND sale.createdat &gt;= #{condition.beginDate}
+        AND sale.createdat &lt;= #{condition.endDate}
+        LEFT JOIN saleorderdetail AS detail ON sale.`code` = detail.ordercode
+        LEFT JOIN product ON detail.itemcode = product.directioncode
+        AND product.isdel = 0
+        <where>
+            enterprise.enterprisestatus = 'ON'
+            and enterprise.validflag = 1
+            <if test="condition.name != null">
+                and enterprise.enterprisename like CONCAT('%',#{condition.name},'%')
+            </if>
+            <if test="condition.operator != null and condition.operator != ''">
+                and (enterprise.enterprisenumber =#{condition.operator}
+                <if test="condition.subList != null and condition.subList.size() > 0">
+                    <foreach collection="condition.subList" item="item" index="index" >
+                        or  enterprise.enterprisenumber = #{item}
+                    </foreach>
+                </if>
+                )
+            </if>
+            <if test="condition.type != null and condition.type != ''">
+                and enterprise.safetysupervision = #{condition.type}
+            </if>
+            <if test="condition.province != null and condition.province != ''">
+                and enterprise.province = #{condition.province}
+            </if>
+            <if test="condition.city != null and condition.city != ''">
+                and enterprise.city = #{condition.city}
+            </if>
+            <if test="condition.district != null and condition.district != ''">
+                and enterprise.district = #{condition.district}
+            </if>
+            <if test="condition.street != null and condition.street != ''">
+                and enterprise.street = #{condition.street}
+            </if>
+            <if test="condition.community != null and condition.community != ''">
+                and enterprise.committee = #{condition.community}
+            </if>
+        </where>
+
+        GROUP BY
+        enterprise.enterprisenumber,
+        product.directioncode
+        ) stemp
+        GROUP BY
+        companynumber
+        ) UNION ALL
+        (
+        SELECT
+        0 AS entrynum,
+        0 AS returnnum,
+        0 AS salenum,
+        IFNULL(SUM( num / boxnumber ),0) AS deliverynum,
+        0 AS returndeliverynum,
+        companynumber,
+        enterprisename
+        FROM
+        (
+        SELECT
+        SUM( detail.num ) AS num,
+        enterprise.enterprisenumber AS companynumber,
+        enterprise.enterprisename,
+        product.boxnumber
+        FROM
+        enterprise
+
+        LEFT JOIN deliveryorder AS delivery ON delivery.companynumber = enterprise.enterprisenumber
+        AND delivery.type = 1
+        AND delivery.operatat &gt;= #{condition.beginDate}
+        AND delivery.operatat &lt;= #{condition.endDate}
+        LEFT JOIN deliverydetail AS detail ON delivery.ordercode = detail.deliverycode
+        LEFT JOIN product ON detail.itemcode = product.directioncode
+        AND product.isdel = 0
+        <where>
+            enterprise.enterprisestatus = 'ON'
+            and enterprise.validflag = 1
+            <if test="condition.name != null">
+                and enterprise.enterprisename like CONCAT('%',#{condition.name},'%')
+            </if>
+            <if test="condition.operator != null and condition.operator != ''">
+                and (enterprise.enterprisenumber =#{condition.operator}
+                <if test="condition.subList != null and condition.subList.size() > 0">
+                    <foreach collection="condition.subList" item="item" index="index" >
+                        or  enterprise.enterprisenumber = #{item}
+                    </foreach>
+                </if>
+                )
+            </if>
+            <if test="condition.type != null and condition.type != ''">
+                and enterprise.safetysupervision = #{condition.type}
+            </if>
+            <if test="condition.province != null and condition.province != ''">
+                and enterprise.province = #{condition.province}
+            </if>
+            <if test="condition.city != null and condition.city != ''">
+                and enterprise.city = #{condition.city}
+            </if>
+            <if test="condition.district != null and condition.district != ''">
+                and enterprise.district = #{condition.district}
+            </if>
+            <if test="condition.street != null and condition.street != ''">
+                and enterprise.street = #{condition.street}
+            </if>
+            <if test="condition.community != null and condition.community != ''">
+                and enterprise.committee = #{condition.community}
+            </if>
+        </where>
+
+        GROUP BY
+        enterprise.enterprisenumber,
+        product.directioncode)deliverytemp
+        GROUP BY
+        companynumber
+        ) UNION ALL
+        (
+        SELECT
+        0 AS entrynum,
+        0 AS returnnum,
+        0 AS salenum,
+        0 AS deliverynum,
+        IFNULL(SUM( num / boxnumber ),0) AS returndeliverynum,
+        companynumber,
+        enterprisename
+        FROM
+        (
+        SELECT
+        SUM( detail.num ) AS num,
+        enterprise.enterprisenumber AS companynumber,
+        enterprise.enterprisename,
+        product.boxnumber
+        FROM
+        enterprise
+
+        LEFT JOIN deliveryorder AS delivery ON delivery.companynumber = enterprise.enterprisenumber
+        AND delivery.type = 2
+        AND delivery.operatat &gt;= #{condition.beginDate}
+        AND delivery.operatat &lt;= #{condition.endDate}
+        LEFT JOIN deliverydetail AS detail ON delivery.ordercode = detail.deliverycode
+        LEFT JOIN product ON detail.itemcode = product.directioncode
+        AND product.isdel = 0
+        <where>
+            enterprise.enterprisestatus = 'ON'
+            and enterprise.validflag = 1
+            <if test="condition.name != null">
+                and enterprise.enterprisename like CONCAT('%',#{condition.name},'%')
+            </if>
+            <if test="condition.operator != null and condition.operator != ''">
+                and (enterprise.enterprisenumber =#{condition.operator}
+                <if test="condition.subList != null and condition.subList.size() > 0">
+                    <foreach collection="condition.subList" item="item" index="index" >
+                        or  enterprise.enterprisenumber = #{item}
+                    </foreach>
+                </if>
+                )
+            </if>
+            <if test="condition.type != null and condition.type != ''">
+                and enterprise.safetysupervision = #{condition.type}
+            </if>
+            <if test="condition.province != null and condition.province != ''">
+                and enterprise.province = #{condition.province}
+            </if>
+            <if test="condition.city != null and condition.city != ''">
+                and enterprise.city = #{condition.city}
+            </if>
+            <if test="condition.district != null and condition.district != ''">
+                and enterprise.district = #{condition.district}
+            </if>
+            <if test="condition.street != null and condition.street != ''">
+                and enterprise.street = #{condition.street}
+            </if>
+            <if test="condition.community != null and condition.community != ''">
+                and enterprise.committee = #{condition.community}
+            </if>
+        </where>
+        GROUP BY
+        enterprise.enterprisenumber,
+        product.directioncode )deliverytemp
+        GROUP BY
+        companynumber
+        )
+        ) temp
+        GROUP BY
+        companynumber
+    </select>
+
+    <select id="selectSaleDetailDataGrid" resultType="com.gk.firework.Domain.Vo.StockVo">
+        SELECT
+        name,
+        directioncode,
+        manufacturer,
+        boxnumber,
+        SUM( entrynum ) AS entryNum,
+        SUM( returnnum ) AS returnNum,
+        SUM( salenum ) AS saleNum,
+        SUM( deliverynum ) AS deliveryNum,
+        SUM( returndeliverynum ) AS returnDeliveryNum,
+        companynumber,
+        enterprisename
+        FROM
+        (
+        SELECT
+        product.name,
+        product.directioncode,
+        product.manufacturer,
+        product.boxnumber,
+        sum( detail.num)/ product.boxnumber AS entrynum,
+        0 AS returnnum,
+        0 AS salenum,
+        0 AS deliverynum,
+        0 AS returndeliverynum,
+        entry.companynumber,
+        enterprise.enterprisename
+        FROM
+        entrydetail AS detail
+        LEFT JOIN entryorder AS entry ON entry.`code` = detail.entryorder
+        LEFT JOIN product ON detail.itemcode = product.directioncode and product.isdel = 0
+        LEFT JOIN enterprise ON enterprise.enterprisenumber = entry.companynumber
+        <where>
+            entry.type = 1
+            and entry.entrydate &gt;= #{condition.beginDate}
+            and entry.entrydate &lt;= #{condition.endDate}
+            <if test="condition.name != null">
+                and product.name like CONCAT('%',#{condition.name},'%')
+            </if>
+            <if test="condition.manufacturer != null">
+                and product.manufacturer = #{condition.manufacturer}
+            </if>
+            <if test="condition.directionCode != null">
+                and product.directioncode = #{condition.directionCode}
+            </if>
+            <if test="condition.companyNumber != null">
+                and enterprise.enterprisenumber = #{condition.companyNumber}
+            </if>
+        </where>
+        GROUP BY
+        entry.companynumber,product.directioncode
+
+        UNION ALL
+        (
+        SELECT
+        product.name,
+        product.directioncode,
+        product.manufacturer,
+        product.boxnumber,
+        0 AS entrynum,
+        sum( detail.num)/ product.boxnumber AS returnnum,
+        0 AS salenum,
+        0 AS deliverynum,
+        0 AS returndeliverynum,
+        entry.companynumber,
+        enterprise.enterprisename
+        FROM
+        entrydetail AS detail
+        LEFT JOIN entryorder AS entry ON entry.`code` = detail.entryorder
+        LEFT JOIN product ON detail.itemcode = product.directioncode and product.isdel = 0
+        LEFT JOIN enterprise ON enterprise.enterprisenumber = entry.companynumber
+        <where>
+            entry.type = 2
+            and entry.entrydate &gt;= #{condition.beginDate}
+            and entry.entrydate &lt;= #{condition.endDate}
+            <if test="condition.name != null">
+                and product.name like CONCAT('%',#{condition.name},'%')
+            </if>
+            <if test="condition.manufacturer != null">
+                and product.manufacturer = #{condition.manufacturer}
+            </if>
+            <if test="condition.directionCode != null">
+                and product.directioncode = #{condition.directionCode}
+            </if>
+            <if test="condition.companyNumber != null">
+                and enterprise.enterprisenumber = #{condition.companyNumber}
+            </if>
+        </where>
+        GROUP BY
+        entry.companynumber,product.directioncode
+        ) UNION ALL
+        (
+        SELECT
+        product.name,
+        product.directioncode,
+        product.manufacturer,
+        product.boxnumber,
+        0 AS entrynum,
+        0 AS returnnum,
+        count( 1 ) / product.boxnumber AS salenum,
+        0 AS deliverynum,
+        0 AS returndeliverynum,
+        sale.companynumber,
+        enterprise.enterprisename
+        FROM
+        saleorderdetail AS detail
+        LEFT JOIN saleorder AS sale ON sale.`code` = detail.ordercode
+        LEFT JOIN product ON detail.itemcode = product.directioncode and product.isdel = 0
+        LEFT JOIN enterprise on sale.companynumber = enterprise.enterprisenumber
+        <where>
+            1=1
+            AND sale.createdat &gt;= #{condition.beginDate}
+            AND sale.createdat &lt;= #{condition.endDate}
+            <if test="condition.name != null">
+                and product.name like CONCAT('%',#{condition.name},'%')
+            </if>
+            <if test="condition.manufacturer != null">
+                and product.manufacturer = #{condition.manufacturer}
+            </if>
+            <if test="condition.directionCode != null">
+                and product.directioncode = #{condition.directionCode}
+            </if>
+            <if test="condition.companyNumber != null">
+                and enterprise.enterprisenumber = #{condition.companyNumber}
+            </if>
+        </where>
+
+        GROUP BY
+        sale.companynumber,
+        product.directioncode
+        )
+        UNION ALL
+        (
+        SELECT
+        product.name,
+        product.directioncode,
+        product.manufacturer,
+        product.boxnumber,
+        0 AS entrynum,
+        0 AS returnnum,
+        0 AS salenum,
+        SUM( detail.num )/product.boxnumber AS deliverynum,
+        0 AS returndeliverynum,
+        delivery.companynumber,
+        enterprise.enterprisename
+        FROM
+        deliverydetail AS detail
+        LEFT JOIN deliveryorder AS delivery ON delivery.ordercode = detail.deliverycode
+        LEFT JOIN product ON detail.itemcode = product.directioncode and product.isdel = 0
+        LEFT JOIN enterprise on delivery.companynumber = enterprise.enterprisenumber
+        <where>
+            delivery.type = 1
+            AND delivery.operatat &gt;= #{condition.beginDate}
+            AND delivery.operatat &lt;= #{condition.endDate}
+            <if test="condition.name != null">
+                and product.name like CONCAT('%',#{condition.name},'%')
+            </if>
+            <if test="condition.manufacturer != null">
+                and product.manufacturer = #{condition.manufacturer}
+            </if>
+            <if test="condition.directionCode != null">
+                and product.directioncode = #{condition.directionCode}
+            </if>
+            <if test="condition.companyNumber != null">
+                and enterprise.enterprisenumber = #{condition.companyNumber}
+            </if>
+        </where>
+
+        GROUP BY
+        delivery.companynumber,
+        product.directioncode
+        ) UNION ALL
+        (
+        SELECT
+        product.name,
+        product.directioncode,
+        product.manufacturer,
+        product.boxnumber,
+        0 AS entrynum,
+        0 AS returnnum,
+        0 AS salenum,
+        0 AS deliverynum,
+        SUM( detail.num )/product.boxnumber AS returndeliverynum,
+        delivery.companynumber,
+        enterprise.enterprisename
+        FROM
+        deliverydetail AS detail
+        LEFT JOIN deliveryorder AS delivery ON delivery.ordercode = detail.deliverycode
+        LEFT JOIN product ON detail.itemcode = product.directioncode and product.isdel = 0
+        LEFT JOIN enterprise on delivery.companynumber = enterprise.enterprisenumber
+        <where>
+            delivery.type = 2
+            AND delivery.operatat &gt;= #{condition.beginDate}
+            AND delivery.operatat &lt;= #{condition.endDate}
+            <if test="condition.name != null">
+                and product.name like CONCAT('%',#{condition.name},'%')
+            </if>
+            <if test="condition.manufacturer != null">
+                and product.manufacturer = #{condition.manufacturer}
+            </if>
+            <if test="condition.directionCode != null">
+                and product.directioncode = #{condition.directionCode}
+            </if>
+            <if test="condition.companyNumber != null">
+                and enterprise.enterprisenumber = #{condition.companyNumber}
+            </if>
+        </where>
+        GROUP BY
+        delivery.companynumber,
+        product.directioncode
+        )
+        ) temp
+        GROUP BY
+        companynumber,
+        directioncode
+    </select>
+    <select id="selectCurrentFireStatus" resultType="com.gk.firework.Domain.StockInfo">
+
+     select stock.*
+     from (
+        <foreach collection="codes" index="index" item="item"
+                 separator="union all" >
+        <trim suffixOverrides="union all">
+            select #{item}
+            <if test="index == 0">
+                code
+            </if>
+        </trim>
+        </foreach>
+        ) as code
+      , stock${slice}  as stock
+       where stock.directioncode = code.code
+       <if test="params.status != null">
+          and stock.status = #{params.status}
+       </if>
+       <if test="params.owner != null and params.owner != ''">
+          and stock.owner != ''
+       </if>
+       <if test="params.owner != null and params.owner == ''">
+          and stock.owner = ''
+       </if>
+
+
+
+
+    </select>
+    <select id="selectEnterpriseStocks" resultType="com.gk.firework.Domain.Vo.StockVo">
+        SELECT
+        `owner`,
+        SUM(stockNum) as stockNum,
+        enterpriseName,
+        enterpriseNumber,
+        province,
+        city,
+        district,
+        IFNULL(MAX(CASE type WHEN '爆竹类' THEN stockNum END ),0)firecracker ,
+        IFNULL(MAX(CASE type WHEN '喷花类' THEN stockNum END ),0)spray ,
+        IFNULL(MAX(CASE type WHEN '旋转类' THEN stockNum END ),0)rotation ,
+        IFNULL(MAX(CASE type WHEN '吐珠类' THEN stockNum END ),0)bead ,
+        IFNULL(MAX(CASE type WHEN '玩具类' THEN stockNum END ),0)toy ,
+        IFNULL(MAX(CASE type WHEN '组合烟花类' THEN stockNum END ),0)combined
+        FROM (
+
+        SELECT
+        enterprise.id as `owner`,
+        temp.type,
+        IFNULL(SUM( stockNum ),0) AS stockNum,
+        enterprise.enterprisename,
+        enterprise.enterprisenumber,
+        enterprise.province,
+        enterprise.city,
+        enterprise.district
+
+        FROM(
+        SELECT
+        stock.`owner`,
+        count(1)/product.boxnumber as stockNum,
+        enterprise.enterprisename as enterpriseName,
+        enterprise.enterprisenumber as enterpriseNumber,
+        product.type
+        FROM
+        stock as stock
+        LEFT JOIN enterprise on enterprise.id = stock.`owner`
+        left join product on product.id = stock.productid and product.isdel = 0
+        <where>
+            `status` = ''
+            and stock.`owner` != ''
+            and enterprise.validflag = 1
+            and enterprise.enterprisestatus = 'ON'
+            <if test="condition.name != null and condition.name != ''">
+                and enterprise.enterprisename like CONCAT('%',#{condition.name},'%')
+            </if>
+            <if test="condition.operator != null and condition.operator != ''">
+                and (enterprise.enterprisenumber =#{condition.operator}
+                <if test="condition.subList != null and condition.subList.size() > 0">
+                    <foreach collection="condition.subList" item="item" index="index" >
+                        or  enterprise.enterprisenumber = #{item}
+                    </foreach>
+                </if>
+                )
+            </if>
+            <if test="condition.type != null and condition.type != ''">
+                and enterprise.safetysupervision = #{condition.type}
+            </if>
+            <if test="condition.province != null and condition.province != ''">
+                and enterprise.province = #{condition.province}
+            </if>
+            <if test="condition.city != null and condition.city != ''">
+                and enterprise.city = #{condition.city}
+            </if>
+            <if test="condition.district != null and condition.district != ''">
+                and enterprise.district = #{condition.district}
+            </if>
+            <if test="condition.street != null and condition.street != ''">
+                and enterprise.street = #{condition.street}
+            </if>
+            <if test="condition.community != null and condition.community != ''">
+                and enterprise.committee = #{condition.community}
+            </if>
+        </where>
+        GROUP BY `owner`,productid
+        <foreach collection="list" item="item" index="index">
+            union all
+            (
+            SELECT
+            stock.`owner`,
+            count(1)/product.boxnumber as stockNum,
+            enterprise.enterprisename as enterpriseName,
+            enterprise.enterprisenumber as enterpriseNumber,
+            product.type
+            FROM
+            stock_slice${item} as stock
+            LEFT JOIN enterprise on enterprise.id = stock.`owner`
+            LEFT JOIN product on product.id = stock.productid and product.isdel = 0
+            <where>
+                `status` = ''
+                and stock.`owner` != ''
+                and enterprise.validflag = 1
+                and enterprise.enterprisestatus = 'ON'
+                <if test="condition.name != null and condition.name != ''">
+                    and enterprise.enterprisename like CONCAT('%',#{condition.name},'%')
+                </if>
+                <if test="condition.operator != null and condition.operator != ''">
+                    and (enterprise.enterprisenumber =#{condition.operator}
+                    <if test="condition.subList != null and condition.subList.size() > 0">
+                        <foreach collection="condition.subList" item="item" index="index" >
+                            or  enterprise.enterprisenumber = #{item}
+                        </foreach>
+                    </if>
+                    )
+                </if>
+                <if test="condition.type != null  and condition.type != ''">
+                    and enterprise.safetysupervision = #{condition.type}
+                </if>
+                <if test="condition.province != null and condition.province != ''">
+                    and enterprise.province = #{condition.province}
+                </if>
+                <if test="condition.city != null and condition.city != ''">
+                    and enterprise.city = #{condition.city}
+                </if>
+                <if test="condition.district != null and condition.district != ''">
+                    and enterprise.district = #{condition.district}
+                </if>
+                <if test="condition.street != null and condition.street != ''">
+                    and enterprise.street = #{condition.street}
+                </if>
+                <if test="condition.community != null and condition.community != ''">
+                    and enterprise.committee = #{condition.community}
+                </if>
+
+            </where>
+            GROUP BY `owner`,productid
+            )
+        </foreach>
+        )as temp
+        RIGHT JOIN enterprise on temp.enterpriseName = enterprise.enterprisename
+        <where>
+            1=1
+            and enterprise.validflag = 1
+            and enterprise.enterprisestatus = 'ON'
+            <if test="condition.name != null  and condition.name != ''">
+                and enterprise.enterprisename like CONCAT('%',#{condition.name},'%')
+            </if>
+            <if test="condition.operator != null  and condition.operator != ''">
+                and (enterprise.enterprisenumber =#{condition.operator}
+                <if test="condition.subList != null and condition.subList.size() > 0">
+                    <foreach collection="condition.subList" item="item" index="index" >
+                        or  enterprise.enterprisenumber = #{item}
+                    </foreach>
+                </if>
+                )
+            </if>
+            <if test="condition.type != null  and condition.type != ''">
+                and enterprise.safetysupervision = #{condition.type}
+            </if>
+            <if test="condition.province != null  and condition.province != ''">
+                and enterprise.province = #{condition.province}
+            </if>
+            <if test="condition.city != null  and condition.city != ''">
+                and enterprise.city = #{condition.city}
+            </if>
+            <if test="condition.district != null  and condition.district != ''">
+                and enterprise.district = #{condition.district}
+            </if>
+            <if test="condition.street != null  and condition.street != ''">
+                and enterprise.street = #{condition.street}
+            </if>
+            <if test="condition.community != null  and condition.community != ''">
+                and enterprise.committee = #{condition.community}
+            </if>
+        </where>
+        GROUP BY
+        enterprise.enterprisename,
+        temp.type)temp1
+        GROUP BY enterprisename
+    </select>
+    <select id="selectEnterpriseStock" resultType="com.gk.firework.Domain.Vo.StockVo">
+        SELECT
+        enterprise.id as `owner`,
+        IFNULL(SUM( stockNum ),0) AS stockNum,
+        enterprise.enterprisename,
+        enterprise.enterprisenumber,
+        enterprise.province,
+        enterprise.city,
+        enterprise.district
+
+        FROM(
+        SELECT
+        stock.`owner`,
+        count(1)/product.boxnumber as stockNum,
+        enterprise.enterprisename as enterpriseName,
+        enterprise.enterprisenumber as enterpriseNumber
+        FROM
+        stock as stock
+        LEFT JOIN enterprise on enterprise.id = stock.`owner`
+        left join product on product.id = stock.productid and product.isdel = 0
+        <where>
+            `status` = ''
+            and stock.`owner` != ''
+            and enterprise.id = #{id}
+        </where>
+        GROUP BY `owner`,productid
+        <foreach collection="list" item="item" index="index">
+            union all
+            (
+            SELECT
+            stock.`owner`,
+            count(1)/product.boxnumber as stockNum,
+            enterprise.enterprisename as enterpriseName,
+            enterprise.enterprisenumber as enterpriseNumber
+            FROM
+            stock_slice${item} as stock
+            LEFT JOIN enterprise on enterprise.id = stock.`owner`
+            LEFT JOIN product on product.id = stock.productid and product.isdel = 0
+            <where>
+                `status` = ''
+                and stock.`owner` != ''
+                and enterprise.id = #{id}
+
+            </where>
+            GROUP BY `owner`,productid
+            )
+        </foreach>
+        )as temp
+        LEFT JOIN enterprise on temp.enterpriseName = enterprise.enterprisename
+        GROUP BY
+        enterprise.enterprisename
+    </select>
+
+
+    <select id="selectEnterpriseSaleDataCount" resultType="java.util.Map">
+        select
+        sum(tmp.entryNum) entryNum,
+        sum(tmp.returnNum) returnNum,
+        sum(tmp.saleNum) saleNum,
+        sum(tmp.deliveryNum) deliveryNum,
+        sum(tmp.returnDeliveryNum) returnDeliveryNum
+        from
+        (
+        SELECT
+        SUM( entrynum ) AS entryNum,
+        SUM( returnnum ) AS returnNum,
+        SUM( salenum ) AS saleNum,
+        SUM( deliverynum ) AS deliveryNum,
+        SUM( returndeliverynum ) AS returnDeliveryNum,
+        companynumber as enterpriseNumber,
+        enterprisename
+        FROM
+        (
+        SELECT
+        IFNULL(SUM( num / boxnumber ),0) AS entrynum,
+        0 AS returnnum,
+        0 AS salenum,
+        0 AS deliverynum,
+        0 AS returndeliverynum,
+        companynumber,
+        enterprisename
+        FROM
+        (
+        SELECT
+        SUM( detail.num ) AS num,
+        enterprise.enterprisenumber AS companynumber,
+        enterprise.enterprisename,
+        product.boxnumber
+        FROM
+        enterprise
+        LEFT JOIN entryorder AS entry ON entry.companynumber = enterprise.enterprisenumber
+        and entry.type = 1
+        and entry.entrydate &gt;= #{condition.beginDate}
+        and entry.entrydate &lt;= #{condition.endDate}
+        LEFT JOIN entrydetail AS detail ON detail.entryorder = entry.`code`
+        LEFT JOIN product ON detail.itemcode = product.directioncode and product.isdel = 0
+        <where>
+            enterprise.enterprisestatus = 'ON'
+            and enterprise.validflag = 1
+            <if test="condition.name != null">
+                and enterprise.enterprisename like CONCAT('%',#{condition.name},'%')
+            </if>
+            <if test="condition.operator != null  and condition.operator != ''">
+                and (enterprise.enterprisenumber =#{condition.operator}
+                <if test="condition.subList != null and condition.subList.size() > 0">
+                    <foreach collection="condition.subList" item="item" index="index" >
+                        or  enterprise.enterprisenumber = #{item}
+                    </foreach>
+                </if>
+                )
+            </if>
+            <if test="condition.type != null  and condition.type != ''">
+                and enterprise.safetysupervision = #{condition.type}
+            </if>
+            <if test="condition.province != null  and condition.province != ''">
+                and enterprise.province = #{condition.province}
+            </if>
+            <if test="condition.city != null  and condition.city != ''">
+                and enterprise.city = #{condition.city}
+            </if>
+            <if test="condition.district != null  and condition.district != ''">
+                and enterprise.district = #{condition.district}
+            </if>
+            <if test="condition.street != null  and condition.street != ''">
+                and enterprise.street = #{condition.street}
+            </if>
+            <if test="condition.community != null  and condition.community != ''">
+                and enterprise.committee = #{condition.community}
+            </if>
+        </where>
+
+
+        GROUP BY
+        enterprise.enterprisenumber,product.directioncode)entrytemp
+        GROUP BY companynumber
+
+        UNION ALL
+        (
+        SELECT
+        0 AS entrynum,
+        IFNULL(SUM( num / boxnumber ),0) AS returnnum,
+        0 AS salenum,
+        0 AS deliverynum,
+        0 AS returndeliverynum,
+        companynumber,
+        enterprisename
+        FROM
+        (
+        SELECT
+        SUM( detail.num ) AS num,
+        enterprise.enterprisenumber AS companynumber,
+        enterprise.enterprisename,
+        product.boxnumber
+        FROM
+        enterprise
+        LEFT JOIN entryorder AS entry ON entry.companynumber = enterprise.enterprisenumber
+        and entry.type = 2
+        and entry.entrydate &gt;= #{condition.beginDate}
+        and entry.entrydate &lt;= #{condition.endDate}
+        LEFT JOIN entrydetail AS detail ON detail.entryorder = entry.`code`
+        LEFT JOIN product ON detail.itemcode = product.directioncode and product.isdel = 0
+        <where>
+            enterprise.enterprisestatus = 'ON'
+            and enterprise.validflag = 1
+            <if test="condition.name != null">
+                and enterprise.enterprisename like CONCAT('%',#{condition.name},'%')
+            </if>
+            <if test="condition.operator != null and condition.operator != ''">
+                and (enterprise.enterprisenumber =#{condition.operator}
+                <if test="condition.subList != null and condition.subList.size() > 0">
+                    <foreach collection="condition.subList" item="item" index="index" >
+                        or  enterprise.enterprisenumber = #{item}
+                    </foreach>
+                </if>
+                )
+            </if>
+            <if test="condition.type != null and condition.type != ''">
+                and enterprise.safetysupervision = #{condition.type}
+            </if>
+            <if test="condition.province != null and condition.province != ''">
+                and enterprise.province = #{condition.province}
+            </if>
+            <if test="condition.city != null and condition.city != ''">
+                and enterprise.city = #{condition.city}
+            </if>
+            <if test="condition.district != null and condition.district != ''">
+                and enterprise.district = #{condition.district}
+            </if>
+            <if test="condition.street != null and condition.street != ''">
+                and enterprise.street = #{condition.street}
+            </if>
+            <if test="condition.community != null and condition.community != ''">
+                and enterprise.committee = #{condition.community}
+            </if>
+        </where>
+
+
+        GROUP BY
+        enterprise.enterprisenumber,product.directioncode)entrytemp
+        GROUP BY companynumber
+        ) UNION ALL
+        (
+        SELECT
+        0 AS entrynum,
+        0 AS returnnum,
+        IFNULL(SUM( salenum ),0),
+        0 AS deliverynum,
+        0 AS returndeliverynum,
+        companynumber,
+        enterprisename
+        FROM
+        (
+        SELECT
+        ( count( 1 )/ product.boxnumber ) AS salenum,
+        enterprise.enterprisenumber AS companynumber,
+        enterprise.enterprisename
+        FROM
+        enterprise
+        LEFT JOIN saleorder AS sale ON sale.companynumber = enterprise.enterprisenumber
+        AND sale.createdat &gt;= #{condition.beginDate}
+        AND sale.createdat &lt;= #{condition.endDate}
+        LEFT JOIN saleorderdetail AS detail ON sale.`code` = detail.ordercode
+        LEFT JOIN product ON detail.itemcode = product.directioncode
+        AND product.isdel = 0
+        <where>
+            enterprise.enterprisestatus = 'ON'
+            and enterprise.validflag = 1
+            <if test="condition.name != null">
+                and enterprise.enterprisename like CONCAT('%',#{condition.name},'%')
+            </if>
+            <if test="condition.operator != null and condition.operator != ''">
+                and (enterprise.enterprisenumber =#{condition.operator}
+                <if test="condition.subList != null and condition.subList.size() > 0">
+                    <foreach collection="condition.subList" item="item" index="index" >
+                        or  enterprise.enterprisenumber = #{item}
+                    </foreach>
+                </if>
+                )
+            </if>
+            <if test="condition.type != null and condition.type != ''">
+                and enterprise.safetysupervision = #{condition.type}
+            </if>
+            <if test="condition.province != null and condition.province != ''">
+                and enterprise.province = #{condition.province}
+            </if>
+            <if test="condition.city != null and condition.city != ''">
+                and enterprise.city = #{condition.city}
+            </if>
+            <if test="condition.district != null and condition.district != ''">
+                and enterprise.district = #{condition.district}
+            </if>
+            <if test="condition.street != null and condition.street != ''">
+                and enterprise.street = #{condition.street}
+            </if>
+            <if test="condition.community != null and condition.community != ''">
+                and enterprise.committee = #{condition.community}
+            </if>
+        </where>
+
+        GROUP BY
+        enterprise.enterprisenumber,
+        product.directioncode
+        ) stemp
+        GROUP BY
+        companynumber
+        ) UNION ALL
+        (
+        SELECT
+        0 AS entrynum,
+        0 AS returnnum,
+        0 AS salenum,
+        IFNULL(SUM( num / boxnumber ),0) AS deliverynum,
+        0 AS returndeliverynum,
+        companynumber,
+        enterprisename
+        FROM
+        (
+        SELECT
+        SUM( detail.num ) AS num,
+        enterprise.enterprisenumber AS companynumber,
+        enterprise.enterprisename,
+        product.boxnumber
+        FROM
+        enterprise
+
+        LEFT JOIN deliveryorder AS delivery ON delivery.companynumber = enterprise.enterprisenumber
+        AND delivery.type = 1
+        AND delivery.operatat &gt;= #{condition.beginDate}
+        AND delivery.operatat &lt;= #{condition.endDate}
+        LEFT JOIN deliverydetail AS detail ON delivery.ordercode = detail.deliverycode
+        LEFT JOIN product ON detail.itemcode = product.directioncode
+        AND product.isdel = 0
+        <where>
+            enterprise.enterprisestatus = 'ON'
+            and enterprise.validflag = 1
+            <if test="condition.name != null">
+                and enterprise.enterprisename like CONCAT('%',#{condition.name},'%')
+            </if>
+            <if test="condition.operator != null and condition.operator != ''">
+                and (enterprise.enterprisenumber =#{condition.operator}
+                <if test="condition.subList != null and condition.subList.size() > 0">
+                    <foreach collection="condition.subList" item="item" index="index" >
+                        or  enterprise.enterprisenumber = #{item}
+                    </foreach>
+                </if>
+                )
+            </if>
+            <if test="condition.type != null and condition.type != ''">
+                and enterprise.safetysupervision = #{condition.type}
+            </if>
+            <if test="condition.province != null and condition.province != ''">
+                and enterprise.province = #{condition.province}
+            </if>
+            <if test="condition.city != null and condition.city != ''">
+                and enterprise.city = #{condition.city}
+            </if>
+            <if test="condition.district != null and condition.district != ''">
+                and enterprise.district = #{condition.district}
+            </if>
+            <if test="condition.street != null and condition.street != ''">
+                and enterprise.street = #{condition.street}
+            </if>
+            <if test="condition.community != null and condition.community != ''">
+                and enterprise.committee = #{condition.community}
+            </if>
+        </where>
+
+        GROUP BY
+        enterprise.enterprisenumber,
+        product.directioncode)deliverytemp
+        GROUP BY
+        companynumber
+        ) UNION ALL
+        (
+        SELECT
+        0 AS entrynum,
+        0 AS returnnum,
+        0 AS salenum,
+        0 AS deliverynum,
+        IFNULL(SUM( num / boxnumber ),0) AS returndeliverynum,
+        companynumber,
+        enterprisename
+        FROM
+        (
+        SELECT
+        SUM( detail.num ) AS num,
+        enterprise.enterprisenumber AS companynumber,
+        enterprise.enterprisename,
+        product.boxnumber
+        FROM
+        enterprise
+
+        LEFT JOIN deliveryorder AS delivery ON delivery.companynumber = enterprise.enterprisenumber
+        AND delivery.type = 2
+        AND delivery.operatat &gt;= #{condition.beginDate}
+        AND delivery.operatat &lt;= #{condition.endDate}
+        LEFT JOIN deliverydetail AS detail ON delivery.ordercode = detail.deliverycode
+        LEFT JOIN product ON detail.itemcode = product.directioncode
+        AND product.isdel = 0
+        <where>
+            enterprise.enterprisestatus = 'ON'
+            and enterprise.validflag = 1
+            <if test="condition.name != null">
+                and enterprise.enterprisename like CONCAT('%',#{condition.name},'%')
+            </if>
+            <if test="condition.operator != null and condition.operator != ''">
+                and (enterprise.enterprisenumber =#{condition.operator}
+                <if test="condition.subList != null and condition.subList.size() > 0">
+                    <foreach collection="condition.subList" item="item" index="index" >
+                        or  enterprise.enterprisenumber = #{item}
+                    </foreach>
+                </if>
+                )
+            </if>
+            <if test="condition.type != null and condition.type != ''">
+                and enterprise.safetysupervision = #{condition.type}
+            </if>
+            <if test="condition.province != null and condition.province != ''">
+                and enterprise.province = #{condition.province}
+            </if>
+            <if test="condition.city != null and condition.city != ''">
+                and enterprise.city = #{condition.city}
+            </if>
+            <if test="condition.district != null and condition.district != ''">
+                and enterprise.district = #{condition.district}
+            </if>
+            <if test="condition.street != null and condition.street != ''">
+                and enterprise.street = #{condition.street}
+            </if>
+            <if test="condition.community != null and condition.community != ''">
+                and enterprise.committee = #{condition.community}
+            </if>
+        </where>
+        GROUP BY
+        enterprise.enterprisenumber,
+        product.directioncode )deliverytemp
+        GROUP BY
+        companynumber
+        )
+        ) temp
+        GROUP BY
+        companynumber
+        ) as tmp
+    </select>
+    <select id="selectEnterpriseAllStock" resultType="com.gk.firework.Domain.StockInfo">
+        SELECT
+               stock.*
+        FROM stock
+        LEFT JOIN enterprise on enterprise.id = stock.`owner`
+        LEFT JOIN product on product.id = stock.productid and product.isdel = 0
+        <where>
+            `status` = ''
+            and stock.`owner` != ''
+            and enterprise.validflag = 1
+            and enterprise.enterprisestatus = 'ON'
+            and `owner` = #{owner}
+        </where>
+        <foreach collection="list" item="item" index="index">
+            union all
+            (
+            SELECT
+            stock.*
+            FROM
+            stock_slice${item} as stock
+            LEFT JOIN enterprise on enterprise.id = stock.`owner`
+            LEFT JOIN product on product.id = stock.productid and product.isdel = 0
+            <where>
+                `status` = ''
+                and stock.`owner` != ''
+                and enterprise.validflag = 1
+                and enterprise.enterprisestatus = 'ON'
+                and `owner` = #{owner}
+            </where>
+            )
+        </foreach>
+    </select>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/TransportCarrierMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/TransportCarrierMapper.xml
new file mode 100644
index 0000000..f108f57
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/TransportCarrierMapper.xml
@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.TransportCarrierMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.TransportCarrier" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="companyname" property="companyname" jdbcType="VARCHAR" />
+    <result column="number" property="number" jdbcType="VARCHAR" />
+    <result column="address" property="address" jdbcType="VARCHAR" />
+    <result column="name" property="name" jdbcType="VARCHAR" />
+    <result column="phone" property="phone" jdbcType="VARCHAR" />
+    <result column="validtime" property="validtime" jdbcType="TIMESTAMP" />
+    <result column="createby" property="createby" jdbcType="BIGINT" />
+    <result column="createbyname" property="createbyname" jdbcType="VARCHAR" />
+    <result column="updateby" property="updateby" jdbcType="BIGINT" />
+    <result column="updatebyname" property="updatebyname" jdbcType="VARCHAR" />
+    <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+    <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, companyname, number, address, name, phone, validtime, createby, createbyname, 
+    updateby, updatebyname, updatetime, createtime, validflag
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select 
+    <include refid="Base_Column_List" />
+    from transportcarrier
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from transportcarrier
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.TransportCarrier" >
+    <!--          -->
+    insert into transportcarrier
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="companyname != null" >
+        companyname,
+      </if>
+      <if test="number != null" >
+        number,
+      </if>
+      <if test="address != null" >
+        address,
+      </if>
+      <if test="name != null" >
+        name,
+      </if>
+      <if test="phone != null" >
+        phone,
+      </if>
+      <if test="validtime != null" >
+        validtime,
+      </if>
+      <if test="createby != null" >
+        createby,
+      </if>
+      <if test="createbyname != null" >
+        createbyname,
+      </if>
+      <if test="updateby != null" >
+        updateby,
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname,
+      </if>
+      <if test="updatetime != null" >
+        updatetime,
+      </if>
+      <if test="createtime != null" >
+        createtime,
+      </if>
+      <if test="validflag != null" >
+        validflag,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="companyname != null" >
+        #{companyname,jdbcType=VARCHAR},
+      </if>
+      <if test="number != null" >
+        #{number,jdbcType=VARCHAR},
+      </if>
+      <if test="address != null" >
+        #{address,jdbcType=VARCHAR},
+      </if>
+      <if test="name != null" >
+        #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="phone != null" >
+        #{phone,jdbcType=VARCHAR},
+      </if>
+      <if test="validtime != null" >
+        #{validtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updateby != null" >
+        #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createtime != null" >
+        #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="validflag != null" >
+        #{validflag,jdbcType=BIT},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.TransportCarrier" >
+    <!--          -->
+    update transportcarrier
+    <set >
+      <if test="companyname != null" >
+        companyname = #{companyname,jdbcType=VARCHAR},
+      </if>
+      <if test="number != null" >
+        number = #{number,jdbcType=VARCHAR},
+      </if>
+      <if test="address != null" >
+        address = #{address,jdbcType=VARCHAR},
+      </if>
+      <if test="name != null" >
+        name = #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="phone != null" >
+        phone = #{phone,jdbcType=VARCHAR},
+      </if>
+      <if test="validtime != null" >
+        validtime = #{validtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        createby = #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        createbyname = #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updateby != null" >
+        updateby = #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createtime != null" >
+        createtime = #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="validflag != null" >
+        validflag = #{validflag,jdbcType=BIT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.TransportCarrier" >
+    <!--          -->
+    update transportcarrier
+    set companyname = #{companyname,jdbcType=VARCHAR},
+      number = #{number,jdbcType=VARCHAR},
+      address = #{address,jdbcType=VARCHAR},
+      name = #{name,jdbcType=VARCHAR},
+      phone = #{phone,jdbcType=VARCHAR},
+      validtime = #{validtime,jdbcType=TIMESTAMP},
+      createby = #{createby,jdbcType=BIGINT},
+      createbyname = #{createbyname,jdbcType=VARCHAR},
+      updateby = #{updateby,jdbcType=BIGINT},
+      updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      createtime = #{createtime,jdbcType=TIMESTAMP},
+      validflag = #{validflag,jdbcType=BIT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/TransportCertFileMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/TransportCertFileMapper.xml
new file mode 100644
index 0000000..b272d95
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/TransportCertFileMapper.xml
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.TransportCertFileMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.TransportCertFile" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="certificatecode" property="certificatecode" jdbcType="VARCHAR" />
+    <result column="url" property="url" jdbcType="VARCHAR" />
+    <result column="type" property="type" jdbcType="VARCHAR" />
+    <result column="filename" property="filename" jdbcType="VARCHAR" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, certificatecode, url, type, filename, validflag
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select 
+    <include refid="Base_Column_List" />
+    from transportcertfile
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from transportcertfile
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.gk.firework.Domain.TransportCertFile" >
+    <!--          -->
+    insert into transportcertfile (id, certificatecode, url, 
+      type, filename, validflag
+      )
+    values (#{id,jdbcType=BIGINT}, #{certificatecode,jdbcType=VARCHAR}, #{url,jdbcType=VARCHAR}, 
+      #{type,jdbcType=VARCHAR}, #{filename,jdbcType=VARCHAR}, #{validflag,jdbcType=BIT}
+      )
+  </insert>
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.TransportCertFile" >
+    <!--          -->
+    insert into transportcertfile
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="certificatecode != null" >
+        certificatecode,
+      </if>
+      <if test="url != null" >
+        url,
+      </if>
+      <if test="type != null" >
+        type,
+      </if>
+      <if test="filename != null" >
+        filename,
+      </if>
+      <if test="validflag != null" >
+        validflag,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="certificatecode != null" >
+        #{certificatecode,jdbcType=VARCHAR},
+      </if>
+      <if test="url != null" >
+        #{url,jdbcType=VARCHAR},
+      </if>
+      <if test="type != null" >
+        #{type,jdbcType=VARCHAR},
+      </if>
+      <if test="filename != null" >
+        #{filename,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        #{validflag,jdbcType=BIT},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.TransportCertFile" >
+    <!--          -->
+    update transportcertfile
+    <set >
+      <if test="certificatecode != null" >
+        certificatecode = #{certificatecode,jdbcType=VARCHAR},
+      </if>
+      <if test="url != null" >
+        url = #{url,jdbcType=VARCHAR},
+      </if>
+      <if test="type != null" >
+        type = #{type,jdbcType=VARCHAR},
+      </if>
+      <if test="filename != null" >
+        filename = #{filename,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        validflag = #{validflag,jdbcType=BIT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.TransportCertFile" >
+    <!--          -->
+    update transportcertfile
+    set certificatecode = #{certificatecode,jdbcType=VARCHAR},
+      url = #{url,jdbcType=VARCHAR},
+      type = #{type,jdbcType=VARCHAR},
+      filename = #{filename,jdbcType=VARCHAR},
+      validflag = #{validflag,jdbcType=BIT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/TransportCertMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/TransportCertMapper.xml
new file mode 100644
index 0000000..1f46da0
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/TransportCertMapper.xml
@@ -0,0 +1,367 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.TransportCertMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.TransportCert" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="code" property="code" jdbcType="VARCHAR" />
+    <result column="enterprisenumber" property="enterprisenumber" jdbcType="VARCHAR" />
+    <result column="status" property="status" jdbcType="VARCHAR" />
+    <result column="processtime" property="processtime" jdbcType="TIMESTAMP" />
+    <result column="processperson" property="processperson" jdbcType="VARCHAR" />
+    <result column="carnumber" property="carnumber" jdbcType="VARCHAR" />
+    <result column="receivercompanyname" property="receivercompanyname" jdbcType="VARCHAR" />
+    <result column="receiveraddress" property="receiveraddress" jdbcType="VARCHAR" />
+    <result column="receiverprincipalname" property="receiverprincipalname" jdbcType="VARCHAR" />
+    <result column="receiverprincipalphone" property="receiverprincipalphone" jdbcType="VARCHAR" />
+    <result column="contractcode" property="contractcode" jdbcType="VARCHAR" />
+    <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
+    <result column="createby" property="createby" jdbcType="BIGINT" />
+    <result column="createbyname" property="createbyname" jdbcType="VARCHAR" />
+    <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+    <result column="updateby" property="updateby" jdbcType="BIGINT" />
+    <result column="updatebyname" property="updatebyname" jdbcType="VARCHAR" />
+    <collection property="transportFile"
+                ofType="java.util.List"
+                 select="selectFile"
+                 column="ccode=code">
+
+    </collection>
+    <collection property="transportPerson"
+                ofType="java.util.List"
+                select="selectPerson"
+                column="ccode=code"
+    >
+
+    </collection>
+    <collection property="transportProduct"
+                ofType="java.util.List"
+                select="selectProduct"
+                column="ccode=code">
+
+    </collection>
+
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, code, enterprisenumber, status, processtime, processperson, carnumber, receivercompanyname,
+    receiveraddress, receiverprincipalname, receiverprincipalphone, contractcode, createtime, 
+    createby, createbyname, updatetime, updateby, updatebyname
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select 
+    <include refid="Base_Column_List" />
+    from transportcert
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+    <select id="selectPages" resultMap="BaseResultMap">
+      select tc.*
+      from transportcert as tc
+      left join enterprise as e on e.enterprisenumber = tc.enterprisenumber and e.validflag = 1
+      where tc.validflag = 1
+      <choose>
+        <when test="params.enterprisenumber != null and params.enterprisenumber != ''">
+          and tc.enterprisenumber = #{params.enterprisenumber}
+        </when>
+        <otherwise>
+          <if test="params.enterprisename != null and params.enterprisename != ''">
+            and e.enterprisename like concat("%",#{params.enterprisename},"%")
+          </if>
+          <if test="params.safetysupervision != null and params.safetysupervision != ''">
+            and e.safetysupervision = #{params.safetysupervision}
+          </if>
+          <if test="params.province != null and params.province != ''">
+            and e.province = #{params.province}
+          </if>
+          <if test="params.city != null and params.city != ''">
+            and e.city = #{params.city}
+          </if>
+          <if test="params.district != null and params.district != ''">
+            and e.district = #{params.district}
+          </if>
+          <if test="params.street != null and params.street != ''">
+            and e.street = #{params.street}
+          </if>
+          <if test="params.committee != null and params.committee != ''">
+            and e.committee = #{params.committee}
+          </if>
+        </otherwise>
+      </choose>
+      <if test="params.filterProvince != null and params.filterProvince  != ''">
+        and e.province = #{params.filterProvince}
+      </if>
+      <if test="params.filterCity != null and  params.filterCity  != ''">
+        and e.city = #{params.filterCity}
+      </if>
+      <if test="params.filterDistrict != null and params.filterDistrict  != ''">
+        and e.district = #{params.filterDistrict}
+      </if>
+      <if test="params.filterStreet != null and params.filterStreet  != ''">
+        and e.street = #{params.filterStreet}
+      </if>
+      <if test="params.filterCommittee != null and params.filterCommittee  != ''">
+        and e.committee = #{params.filterCommittee}
+      </if>
+      <if test="params.code !=null and params.code != ''">
+        and tc.code like concat("%",#{params.code},"%")
+      </if>
+      order by tc.createtime
+    </select>
+
+  <select id="selectFile" parameterType="java.util.Map" resultType="com.gk.firework.Domain.TransportCertFile" >
+    select id,
+    certificatecode,
+    url,
+    type,
+    filename
+    from transportcertfile
+    where certificatecode = #{ccode}
+    and validflag = 1
+  </select>
+
+  <select id="selectPerson" parameterType="java.util.Map" resultType="com.gk.firework.Domain.TransportCertificatePerson" >
+    select id,
+    certificatecode,
+    personid,
+    personname,
+    personidentify,
+    validtime,
+    number,
+    phone,
+    type
+    from transportcertificateperson
+    where certificatecode = #{ccode}
+    and validflag = 1
+    order by id asc
+  </select>
+
+  <select id="selectProduct" parameterType="java.util.Map" resultType="com.gk.firework.Domain.TransportCertProduct" >
+    select id,
+    certificatecode,
+    productcode,
+    productnum,
+    num,
+    type,
+    name,
+    level,
+    packing,
+    specification
+    from transportcertproduct
+    where certificatecode = #{ccode}
+    and validflag = 1
+    order by id asc
+  </select>
+    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from transportcert
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.TransportCert" >
+    <!--          -->
+    insert into transportcert
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="code != null" >
+        code,
+      </if>
+      <if test="enterprisenumber != null" >
+        enterprisenumber,
+      </if>
+      <if test="status != null" >
+        status,
+      </if>
+      <if test="processtime != null" >
+        processtime,
+      </if>
+      <if test="processperson != null" >
+        processperson,
+      </if>
+      <if test="carnumber != null" >
+        carnumber,
+      </if>
+      <if test="receivercompanyname != null" >
+        receivercompanyname,
+      </if>
+      <if test="receiveraddress != null" >
+        receiveraddress,
+      </if>
+      <if test="receiverprincipalname != null" >
+        receiverprincipalname,
+      </if>
+      <if test="receiverprincipalphone != null" >
+        receiverprincipalphone,
+      </if>
+      <if test="contractcode != null" >
+        contractcode,
+      </if>
+      <if test="createtime != null" >
+        createtime,
+      </if>
+      <if test="createby != null" >
+        createby,
+      </if>
+      <if test="createbyname != null" >
+        createbyname,
+      </if>
+      <if test="updatetime != null" >
+        updatetime,
+      </if>
+      <if test="updateby != null" >
+        updateby,
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="code != null" >
+        #{code,jdbcType=VARCHAR},
+      </if>
+      <if test="enterprisenumber != null" >
+        #{enterprisenumber,jdbcType=VARCHAR},
+      </if>
+      <if test="status != null" >
+        #{status,jdbcType=VARCHAR},
+      </if>
+      <if test="processtime != null" >
+        #{processtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="processperson != null" >
+        #{processperson,jdbcType=VARCHAR},
+      </if>
+      <if test="carnumber != null" >
+        #{carnumber,jdbcType=VARCHAR},
+      </if>
+      <if test="receivercompanyname != null" >
+        #{receivercompanyname,jdbcType=VARCHAR},
+      </if>
+      <if test="receiveraddress != null" >
+        #{receiveraddress,jdbcType=VARCHAR},
+      </if>
+      <if test="receiverprincipalname != null" >
+        #{receiverprincipalname,jdbcType=VARCHAR},
+      </if>
+      <if test="receiverprincipalphone != null" >
+        #{receiverprincipalphone,jdbcType=VARCHAR},
+      </if>
+      <if test="contractcode != null" >
+        #{contractcode,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        #{updatebyname,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.TransportCert" >
+    <!--          -->
+    update transportcert
+    <set >
+      <if test="code != null" >
+        code = #{code,jdbcType=VARCHAR},
+      </if>
+      <if test="enterprisenumber != null" >
+        enterprisenumber = #{enterprisenumber,jdbcType=VARCHAR},
+      </if>
+      <if test="status != null" >
+        status = #{status,jdbcType=VARCHAR},
+      </if>
+      <if test="processtime != null" >
+        processtime = #{processtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="processperson != null" >
+        processperson = #{processperson,jdbcType=VARCHAR},
+      </if>
+      <if test="carnumber != null" >
+        carnumber = #{carnumber,jdbcType=VARCHAR},
+      </if>
+      <if test="receivercompanyname != null" >
+        receivercompanyname = #{receivercompanyname,jdbcType=VARCHAR},
+      </if>
+      <if test="receiveraddress != null" >
+        receiveraddress = #{receiveraddress,jdbcType=VARCHAR},
+      </if>
+      <if test="receiverprincipalname != null" >
+        receiverprincipalname = #{receiverprincipalname,jdbcType=VARCHAR},
+      </if>
+      <if test="receiverprincipalphone != null" >
+        receiverprincipalphone = #{receiverprincipalphone,jdbcType=VARCHAR},
+      </if>
+      <if test="contractcode != null" >
+        contractcode = #{contractcode,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        createtime = #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        createby = #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        createbyname = #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="updateby != null" >
+        updateby = #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.TransportCert" >
+    <!--          -->
+    update transportcert
+    set code = #{code,jdbcType=VARCHAR},
+      enterprisenumber = #{enterprisenumber,jdbcType=VARCHAR},
+      status = #{status,jdbcType=VARCHAR},
+      processtime = #{processtime,jdbcType=TIMESTAMP},
+      processperson = #{processperson,jdbcType=VARCHAR},
+      carnumber = #{carnumber,jdbcType=VARCHAR},
+      receivercompanyname = #{receivercompanyname,jdbcType=VARCHAR},
+      receiveraddress = #{receiveraddress,jdbcType=VARCHAR},
+      receiverprincipalname = #{receiverprincipalname,jdbcType=VARCHAR},
+      receiverprincipalphone = #{receiverprincipalphone,jdbcType=VARCHAR},
+      contractcode = #{contractcode,jdbcType=VARCHAR},
+      createtime = #{createtime,jdbcType=TIMESTAMP},
+      createby = #{createby,jdbcType=BIGINT},
+      createbyname = #{createbyname,jdbcType=VARCHAR},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      updateby = #{updateby,jdbcType=BIGINT},
+      updatebyname = #{updatebyname,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+
+  <select id="selectWarnList" resultMap="BaseResultMap">
+    select
+    transportcert.*
+    from transportcert
+    <where>
+      createtime &gt;= #{start}
+      and createtime &lt;= #{end}
+    </where>
+  </select>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/TransportCertProductMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/TransportCertProductMapper.xml
new file mode 100644
index 0000000..c8603d0
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/TransportCertProductMapper.xml
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.TransportCertProductMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.TransportCertProduct" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="certificatecode" property="certificatecode" jdbcType="VARCHAR" />
+    <result column="productcode" property="productcode" jdbcType="VARCHAR" />
+    <result column="productnum" property="productnum" jdbcType="INTEGER" />
+    <result column="type" property="type" jdbcType="VARCHAR" />
+    <result column="name" property="name" jdbcType="VARCHAR" />
+    <result column="level" property="level" jdbcType="VARCHAR" />
+    <result column="packing" property="packing" jdbcType="VARCHAR" />
+    <result column="specification" property="specification" jdbcType="VARCHAR" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+    <result column="num" property="num" jdbcType="INTEGER" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, certificatecode, productcode, productnum, type, name, level, packing, specification, 
+    validflag, num
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select 
+    <include refid="Base_Column_List" />
+    from transportcertproduct
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from transportcertproduct
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <insert id="insert" parameterType="com.gk.firework.Domain.TransportCertProduct" >
+    <!--          -->
+    insert into transportcertproduct (id, certificatecode, productcode, 
+      productnum, type, name, 
+      level, packing, specification, 
+      validflag, num)
+    values (#{id,jdbcType=BIGINT}, #{certificatecode,jdbcType=VARCHAR}, #{productcode,jdbcType=VARCHAR}, 
+      #{productnum,jdbcType=INTEGER}, #{type,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, 
+      #{level,jdbcType=VARCHAR}, #{packing,jdbcType=VARCHAR}, #{specification,jdbcType=VARCHAR}, 
+      #{validflag,jdbcType=BIT}, #{num,jdbcType=INTEGER})
+  </insert>
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.TransportCertProduct" >
+    <!--          -->
+    insert into transportcertproduct
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="certificatecode != null" >
+        certificatecode,
+      </if>
+      <if test="productcode != null" >
+        productcode,
+      </if>
+      <if test="productnum != null" >
+        productnum,
+      </if>
+      <if test="type != null" >
+        type,
+      </if>
+      <if test="name != null" >
+        name,
+      </if>
+      <if test="level != null" >
+        level,
+      </if>
+      <if test="packing != null" >
+        packing,
+      </if>
+      <if test="specification != null" >
+        specification,
+      </if>
+      <if test="validflag != null" >
+        validflag,
+      </if>
+      <if test="num != null" >
+        num,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="certificatecode != null" >
+        #{certificatecode,jdbcType=VARCHAR},
+      </if>
+      <if test="productcode != null" >
+        #{productcode,jdbcType=VARCHAR},
+      </if>
+      <if test="productnum != null" >
+        #{productnum,jdbcType=INTEGER},
+      </if>
+      <if test="type != null" >
+        #{type,jdbcType=VARCHAR},
+      </if>
+      <if test="name != null" >
+        #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="level != null" >
+        #{level,jdbcType=VARCHAR},
+      </if>
+      <if test="packing != null" >
+        #{packing,jdbcType=VARCHAR},
+      </if>
+      <if test="specification != null" >
+        #{specification,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        #{validflag,jdbcType=BIT},
+      </if>
+      <if test="num != null" >
+        #{num,jdbcType=INTEGER},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.TransportCertProduct" >
+    <!--          -->
+    update transportcertproduct
+    <set >
+      <if test="certificatecode != null" >
+        certificatecode = #{certificatecode,jdbcType=VARCHAR},
+      </if>
+      <if test="productcode != null" >
+        productcode = #{productcode,jdbcType=VARCHAR},
+      </if>
+      <if test="productnum != null" >
+        productnum = #{productnum,jdbcType=INTEGER},
+      </if>
+      <if test="type != null" >
+        type = #{type,jdbcType=VARCHAR},
+      </if>
+      <if test="name != null" >
+        name = #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="level != null" >
+        level = #{level,jdbcType=VARCHAR},
+      </if>
+      <if test="packing != null" >
+        packing = #{packing,jdbcType=VARCHAR},
+      </if>
+      <if test="specification != null" >
+        specification = #{specification,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        validflag = #{validflag,jdbcType=BIT},
+      </if>
+      <if test="num != null" >
+        num = #{num,jdbcType=INTEGER},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.TransportCertProduct" >
+    <!--          -->
+    update transportcertproduct
+    set certificatecode = #{certificatecode,jdbcType=VARCHAR},
+      productcode = #{productcode,jdbcType=VARCHAR},
+      productnum = #{productnum,jdbcType=INTEGER},
+      type = #{type,jdbcType=VARCHAR},
+      name = #{name,jdbcType=VARCHAR},
+      level = #{level,jdbcType=VARCHAR},
+      packing = #{packing,jdbcType=VARCHAR},
+      specification = #{specification,jdbcType=VARCHAR},
+      validflag = #{validflag,jdbcType=BIT},
+      num = #{num,jdbcType=INTEGER}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/TransportCertificateApproachMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/TransportCertificateApproachMapper.xml
new file mode 100644
index 0000000..c7a255e
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/TransportCertificateApproachMapper.xml
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.TransportCertificateApproachMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.TransportCertificateApproach" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="certificatecode" property="certificatecode" jdbcType="VARCHAR" />
+    <result column="province" property="province" jdbcType="VARCHAR" />
+    <result column="city" property="city" jdbcType="VARCHAR" />
+    <result column="district" property="district" jdbcType="VARCHAR" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, certificatecode, province, city, district, validflag
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select 
+    <include refid="Base_Column_List" />
+    from transportcertificateapproach
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from transportcertificateapproach
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <update id="deleteByCertificateCode" parameterType="java.lang.String">
+    update transportcertificateapproach
+    set validflag = 0
+    where certificatecode= #{code}
+  </update>
+    <insert id="insert" parameterType="com.gk.firework.Domain.TransportCertificateApproach" >
+    <!--          -->
+    insert into transportcertificateapproach (id, certificatecode, province, 
+      city, district, validflag
+      )
+    values (#{id,jdbcType=BIGINT}, #{certificatecode,jdbcType=VARCHAR}, #{province,jdbcType=VARCHAR}, 
+      #{city,jdbcType=VARCHAR}, #{district,jdbcType=VARCHAR}, #{validflag,jdbcType=BIT}
+      )
+  </insert>
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.TransportCertificateApproach" >
+    <!--          -->
+    insert into transportcertificateapproach
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="certificatecode != null" >
+        certificatecode,
+      </if>
+      <if test="province != null" >
+        province,
+      </if>
+      <if test="city != null" >
+        city,
+      </if>
+      <if test="district != null" >
+        district,
+      </if>
+      <if test="validflag != null" >
+        validflag,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="certificatecode != null" >
+        #{certificatecode,jdbcType=VARCHAR},
+      </if>
+      <if test="province != null" >
+        #{province,jdbcType=VARCHAR},
+      </if>
+      <if test="city != null" >
+        #{city,jdbcType=VARCHAR},
+      </if>
+      <if test="district != null" >
+        #{district,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        #{validflag,jdbcType=BIT},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.TransportCertificateApproach" >
+    <!--          -->
+    update transportcertificateapproach
+    <set >
+      <if test="certificatecode != null" >
+        certificatecode = #{certificatecode,jdbcType=VARCHAR},
+      </if>
+      <if test="province != null" >
+        province = #{province,jdbcType=VARCHAR},
+      </if>
+      <if test="city != null" >
+        city = #{city,jdbcType=VARCHAR},
+      </if>
+      <if test="district != null" >
+        district = #{district,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        validflag = #{validflag,jdbcType=BIT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.TransportCertificateApproach" >
+    <!--          -->
+    update transportcertificateapproach
+    set certificatecode = #{certificatecode,jdbcType=VARCHAR},
+      province = #{province,jdbcType=VARCHAR},
+      city = #{city,jdbcType=VARCHAR},
+      district = #{district,jdbcType=VARCHAR},
+      validflag = #{validflag,jdbcType=BIT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/TransportCertificateArrivalRecordMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/TransportCertificateArrivalRecordMapper.xml
new file mode 100644
index 0000000..d12529c
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/TransportCertificateArrivalRecordMapper.xml
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.TransportCertificateArrivalRecordMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.TransportCertificateArrivalRecord" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="certificatecode" property="certificatecode" jdbcType="VARCHAR" />
+    <result column="productname" property="productname" jdbcType="VARCHAR" />
+    <result column="productcode" property="productcode" jdbcType="VARCHAR" />
+    <result column="createby" property="createby" jdbcType="BIGINT" />
+    <result column="createbyname" property="createbyname" jdbcType="VARCHAR" />
+    <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, certificatecode, productname, productcode, createby, createbyname, createtime,
+    validflag
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select
+    <include refid="Base_Column_List" />
+    from transportcertificatearrivalrecord
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+    <select id="selectTransportArrivalPages" resultType="com.gk.firework.Domain.Vo.TransportArrivalSum">
+
+      select
+      record.certificatecode,
+      sum(record.arrivalnum)  arrivalsum,
+      record.createbyname,
+      record.createtime
+      from transportcertificatearrivalrecord as record
+      where
+      record.validflag = 1
+      and record.createbyname = #{params.enterprisenumber}
+      group by  record.certificatecode
+      order by record.createtime desc
+    </select>
+    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from transportcertificatearrivalrecord
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.TransportCertificateArrivalRecord" >
+    <!--          -->
+    insert into transportcertificatearrivalrecord
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="certificatecode != null" >
+        certificatecode,
+      </if>
+      <if test="productname != null" >
+        productname,
+      </if>
+      <if test="productcode != null" >
+        productcode,
+      </if>
+      <if test="createby != null" >
+        createby,
+      </if>
+      <if test="createbyname != null" >
+        createbyname,
+      </if>
+      <if test="createtime != null" >
+        createtime,
+      </if>
+      <if test="validflag != null" >
+        validflag,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="certificatecode != null" >
+        #{certificatecode,jdbcType=VARCHAR},
+      </if>
+      <if test="productname != null" >
+        #{productname,jdbcType=VARCHAR},
+      </if>
+      <if test="productcode != null" >
+        #{productcode,jdbcType=VARCHAR},
+      </if>
+      <if test="createby != null" >
+        #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="validflag != null" >
+        #{validflag,jdbcType=BIT},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.TransportCertificateArrivalRecord" >
+    <!--          -->
+    update transportcertificatearrivalrecord
+    <set >
+      <if test="certificatecode != null" >
+        certificatecode = #{certificatecode,jdbcType=VARCHAR},
+      </if>
+      <if test="productname != null" >
+        productname = #{productname,jdbcType=VARCHAR},
+      </if>
+      <if test="productcode != null" >
+        productcode = #{productcode,jdbcType=VARCHAR},
+      </if>
+      <if test="createby != null" >
+        createby = #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        createbyname = #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="createtime != null" >
+        createtime = #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="validflag != null" >
+        validflag = #{validflag,jdbcType=BIT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.TransportCertificateArrivalRecord" >
+    <!--          -->
+    update transportcertificatearrivalrecord
+    set certificatecode = #{certificatecode,jdbcType=VARCHAR},
+      productname = #{productname,jdbcType=VARCHAR},
+      productcode = #{productcode,jdbcType=VARCHAR},
+      createby = #{createby,jdbcType=BIGINT},
+      createbyname = #{createbyname,jdbcType=VARCHAR},
+      createtime = #{createtime,jdbcType=TIMESTAMP},
+      validflag = #{validflag,jdbcType=BIT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/TransportCertificateFileMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/TransportCertificateFileMapper.xml
new file mode 100644
index 0000000..f9538ff
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/TransportCertificateFileMapper.xml
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.TransportCertificateFileMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.TransportCertificateFile" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="certificatecode" property="certificatecode" jdbcType="VARCHAR" />
+    <result column="url1" property="url1" jdbcType="VARCHAR" />
+    <result column="url2" property="url2" jdbcType="VARCHAR" />
+    <result column="url3" property="url3" jdbcType="VARCHAR" />
+    <result column="url4" property="url4" jdbcType="VARCHAR" />
+    <result column="url5" property="url5" jdbcType="VARCHAR" />
+    <result column="url6" property="url6" jdbcType="VARCHAR" />
+    <result column="url7" property="url7" jdbcType="VARCHAR" />
+    <result column="url8" property="url8" jdbcType="VARCHAR" />
+    <result column="url9" property="url9" jdbcType="VARCHAR" />
+    <result column="url10" property="url10" jdbcType="VARCHAR" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, certificatecode, url1, url2, url3, url4, url5, url6, url7, url8, url9, url10, 
+    validflag
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select 
+    <include refid="Base_Column_List" />
+    from transportcertificatefile
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from transportcertificatefile
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <update id="deleteByCertificateCode" parameterType="java.lang.String">
+    update transportcertificatefile
+    set validflag = 0
+    where certificatecode= #{code}
+  </update>
+
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.TransportCertificateFile" >
+    <!--          -->
+    insert into transportcertificatefile
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="certificatecode != null" >
+        certificatecode,
+      </if>
+      <if test="url1 != null" >
+        url1,
+      </if>
+      <if test="url2 != null" >
+        url2,
+      </if>
+      <if test="url3 != null" >
+        url3,
+      </if>
+      <if test="url4 != null" >
+        url4,
+      </if>
+      <if test="url5 != null" >
+        url5,
+      </if>
+      <if test="url6 != null" >
+        url6,
+      </if>
+      <if test="url7 != null" >
+        url7,
+      </if>
+      <if test="url8 != null" >
+        url8,
+      </if>
+      <if test="url9 != null" >
+        url9,
+      </if>
+      <if test="url10 != null" >
+        url10,
+      </if>
+      <if test="validflag != null" >
+        validflag,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="certificatecode != null" >
+        #{certificatecode,jdbcType=VARCHAR},
+      </if>
+      <if test="url1 != null" >
+        #{url1,jdbcType=VARCHAR},
+      </if>
+      <if test="url2 != null" >
+        #{url2,jdbcType=VARCHAR},
+      </if>
+      <if test="url3 != null" >
+        #{url3,jdbcType=VARCHAR},
+      </if>
+      <if test="url4 != null" >
+        #{url4,jdbcType=VARCHAR},
+      </if>
+      <if test="url5 != null" >
+        #{url5,jdbcType=VARCHAR},
+      </if>
+      <if test="url6 != null" >
+        #{url6,jdbcType=VARCHAR},
+      </if>
+      <if test="url7 != null" >
+        #{url7,jdbcType=VARCHAR},
+      </if>
+      <if test="url8 != null" >
+        #{url8,jdbcType=VARCHAR},
+      </if>
+      <if test="url9 != null" >
+        #{url9,jdbcType=VARCHAR},
+      </if>
+      <if test="url10 != null" >
+        #{url10,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        #{validflag,jdbcType=BIT},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.TransportCertificateFile" >
+    <!--          -->
+    update transportcertificatefile
+    <set >
+      <if test="certificatecode != null" >
+        certificatecode = #{certificatecode,jdbcType=VARCHAR},
+      </if>
+      <if test="url1 != null" >
+        url1 = #{url1,jdbcType=VARCHAR},
+      </if>
+      <if test="url2 != null" >
+        url2 = #{url2,jdbcType=VARCHAR},
+      </if>
+      <if test="url3 != null" >
+        url3 = #{url3,jdbcType=VARCHAR},
+      </if>
+      <if test="url4 != null" >
+        url4 = #{url4,jdbcType=VARCHAR},
+      </if>
+      <if test="url5 != null" >
+        url5 = #{url5,jdbcType=VARCHAR},
+      </if>
+      <if test="url6 != null" >
+        url6 = #{url6,jdbcType=VARCHAR},
+      </if>
+      <if test="url7 != null" >
+        url7 = #{url7,jdbcType=VARCHAR},
+      </if>
+      <if test="url8 != null" >
+        url8 = #{url8,jdbcType=VARCHAR},
+      </if>
+      <if test="url9 != null" >
+        url9 = #{url9,jdbcType=VARCHAR},
+      </if>
+      <if test="url10 != null" >
+        url10 = #{url10,jdbcType=VARCHAR},
+      </if>
+      <if test="validflag != null" >
+        validflag = #{validflag,jdbcType=BIT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.TransportCertificateFile" >
+    <!--          -->
+    update transportcertificatefile
+    set certificatecode = #{certificatecode,jdbcType=VARCHAR},
+      url1 = #{url1,jdbcType=VARCHAR},
+      url2 = #{url2,jdbcType=VARCHAR},
+      url3 = #{url3,jdbcType=VARCHAR},
+      url4 = #{url4,jdbcType=VARCHAR},
+      url5 = #{url5,jdbcType=VARCHAR},
+      url6 = #{url6,jdbcType=VARCHAR},
+      url7 = #{url7,jdbcType=VARCHAR},
+      url8 = #{url8,jdbcType=VARCHAR},
+      url9 = #{url9,jdbcType=VARCHAR},
+      url10 = #{url10,jdbcType=VARCHAR},
+      validflag = #{validflag,jdbcType=BIT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/TransportCertificateMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/TransportCertificateMapper.xml
new file mode 100644
index 0000000..30cb3e8
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/TransportCertificateMapper.xml
@@ -0,0 +1,481 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.TransportCertificateMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.TransportCertificate" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="type" property="type" jdbcType="VARCHAR" />
+    <result column="code" property="code" jdbcType="VARCHAR" />
+    <result column="enterprisenumber" property="enterprisenumber" jdbcType="VARCHAR" />
+    <result column="contractcode" property="contractcode" jdbcType="VARCHAR" />
+    <result column="salecompanyid" property="salecompanyid" jdbcType="BIGINT" />
+    <result column="salecompanyname" property="salecompanyname" jdbcType="VARCHAR" />
+    <result column="productionlicense" property="productionlicense" jdbcType="VARCHAR" />
+    <result column="contractnumber" property="contractnumber" jdbcType="VARCHAR" />
+    <result column="shippercompanyname" property="shippercompanyname" jdbcType="VARCHAR" />
+    <result column="shipperaddress" property="shipperaddress" jdbcType="VARCHAR" />
+    <result column="shipperprincipalname" property="shipperprincipalname" jdbcType="VARCHAR" />
+    <result column="shipperprincipalphone" property="shipperprincipalphone" jdbcType="VARCHAR" />
+    <result column="shippermanagername" property="shippermanagername" jdbcType="VARCHAR" />
+    <result column="shippermanageridentify" property="shippermanageridentify" jdbcType="VARCHAR" />
+    <result column="shippermanagerphone" property="shippermanagerphone" jdbcType="VARCHAR" />
+    <result column="receivercompanyname" property="receivercompanyname" jdbcType="VARCHAR" />
+    <result column="receiveraddress" property="receiveraddress" jdbcType="VARCHAR" />
+    <result column="receiverprincipalname" property="receiverprincipalname" jdbcType="VARCHAR" />
+    <result column="receiverprincipalphone" property="receiverprincipalphone" jdbcType="VARCHAR" />
+    <result column="carrierid" property="carrierid" jdbcType="BIGINT" />
+    <result column="carriercompanyname" property="carriercompanyname" jdbcType="VARCHAR" />
+    <result column="carrieraddress" property="carrieraddress" jdbcType="VARCHAR" />
+    <result column="carrierprincipalname" property="carrierprincipalname" jdbcType="VARCHAR" />
+    <result column="carrierprincipalphone" property="carrierprincipalphone" jdbcType="VARCHAR" />
+    <result column="otherdeparture" property="otherdeparture" jdbcType="VARCHAR" />
+    <result column="otherdestination" property="otherdestination" jdbcType="VARCHAR" />
+    <result column="othershipstarttime" property="othershipstarttime" jdbcType="TIMESTAMP" />
+    <result column="othershipendtime" property="othershipendtime" jdbcType="TIMESTAMP" />
+    <result column="othermemo" property="othermemo" jdbcType="VARCHAR" />
+    <association property="transportFile"
+                 javaType="com.gk.firework.Domain.TransportCertificateFile"
+                 select="selectFile"
+                 column="ccode=code">
+
+    </association>
+    <collection property="transportPerson"
+                ofType="java.util.List"
+                select="selectPerson"
+                column="ccode=code"
+                >
+
+    </collection>
+    <collection property="transportProduct"
+                ofType="java.util.List"
+                select="selectProduct"
+                column="ccode=code">
+
+    </collection>
+    <collection property="transportApproach"
+                ofType="java.util.List"
+                select="selectApproach"
+                column="ccode=code">
+
+    </collection>
+
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, type, salecompanyid, salecompanyname, productionlicense, contractnumber, shippercompanyname,
+    shipperaddress, shipperprincipalname, shippermanagername, shippermanageridentify,
+    shippermanagerphone, receivercompanyname, receiveraddress, receiverprincipalname,
+    receiverprincipalphone, carrierid, carriercompanyname, otherdeparture, otherdestination,
+    othershipstarttime, othershipendtime, otherapproach, othermemo
+  </sql>
+
+  <select id="selectPages" resultMap="BaseResultMap">
+        select tc.*
+        from transportcertificate as tc
+        left join enterprise as e on e.enterprisenumber = tc.enterprisenumber and e.validflag = 1
+        where tc.validflag = 1
+        <choose>
+          <when test="params.enterprisenumber != null and params.enterprisenumber != ''">
+            and tc.enterprisenumber = #{params.enterprisenumber}
+          </when>
+          <otherwise>
+            <if test="params.enterprisename != null and params.enterprisename != ''">
+              and e.enterprisename like concat("%",#{params.enterprisename},"%")
+            </if>
+            <if test="params.safetysupervision != null and params.safetysupervision != ''">
+              and e.safetysupervision = #{params.safetysupervision}
+            </if>
+            <if test="params.province != null and params.province != ''">
+              and e.province = #{params.province}
+            </if>
+            <if test="params.city != null and params.city != ''">
+              and e.city = #{params.city}
+            </if>
+            <if test="params.district != null and params.district != ''">
+              and e.district = #{params.district}
+            </if>
+            <if test="params.street != null and params.street != ''">
+              and e.street = #{params.street}
+            </if>
+            <if test="params.committee != null and params.committee != ''">
+              and e.committee = #{params.committee}
+            </if>
+          </otherwise>
+        </choose>
+    <if test="params.filterProvince != null and params.filterProvince  != ''">
+      and e.province = #{params.filterProvince}
+    </if>
+    <if test="params.filterCity != null and  params.filterCity  != ''">
+      and e.city = #{params.filterCity}
+    </if>
+    <if test="params.filterDistrict != null and params.filterDistrict  != ''">
+      and e.district = #{params.filterDistrict}
+    </if>
+    <if test="params.filterStreet != null and params.filterStreet  != ''">
+      and e.street = #{params.filterStreet}
+    </if>
+    <if test="params.filterCommittee != null and params.filterCommittee  != ''">
+      and e.committee = #{params.filterCommittee}
+    </if>
+    <if test="params.code !=null and params.code != ''">
+       and tc.code like concat("%",#{params.code},"%")
+    </if>
+    <if test="params.page != null and params.page != ''">
+      and tc.status != #{params.tosubmmit}
+    </if>
+    order by tc.createtime
+    </select>
+  <select id="selectPerson" parameterType="java.util.Map" resultType="com.gk.firework.Domain.TransportCertificatePerson" >
+    select id,
+    certificatecode,
+    personid,
+    personname,
+    personidentify,
+    validtime,
+    number,
+    phone,
+    type
+    from transportcertificateperson
+    where certificatecode = #{ccode}
+    and validflag = 1
+    order by id asc
+  </select>
+
+  <select id="selectProduct" parameterType="java.util.Map" resultType="com.gk.firework.Domain.TransportCertificateProduct" >
+    select id,
+    certificatecode,
+    productcode,
+    productnum,
+    num,
+    type,
+    name,
+    level,
+    packing,
+    specification,
+    arrivalnum
+    from transportcertificateproduct
+    where certificatecode = #{ccode}
+    and validflag = 1
+    order by id asc
+  </select>
+
+  <select id="selectApproach" parameterType="java.util.Map" resultType="com.gk.firework.Domain.TransportCertificateApproach" >
+    select id,
+    certificatecode,
+    province,
+    city,
+    district
+    from transportcertificateapproach
+    where certificatecode = #{ccode}
+    and validflag = 1
+    order by id asc
+  </select>
+
+  <select id="selectFile" parameterType="java.util.Map" resultType="com.gk.firework.Domain.TransportCertificateFile" >
+    select id,
+    certificatecode,
+    url1,
+    url2,
+    url3,
+    url4,
+    url5,
+    url6,
+    url7,
+    url8,
+    url9,
+    url10
+    from transportcertificatefile
+    where certificatecode = #{ccode}
+    and validflag = 1
+  </select>
+
+
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select
+    <include refid="Base_Column_List" />
+    from transportcertificate
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <select id="getOneById" resultMap="BaseResultMap">
+    select *
+    from transportcertificate
+    where id = #{id}
+  </select>
+  <select id="selectByCode" resultMap="BaseResultMap">
+        select *
+        from transportcertificate
+        where code = #{code}
+  </select>
+  <select id="selectWarnList" resultMap="BaseResultMap">
+    select *
+    from transportcertificate
+    <where>
+      createtime &gt;= #{start}
+      and createtime &lt;= #{end}
+    </where>
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from transportcertificate
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+
+
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.TransportCertificate" >
+    <!--          -->
+    insert into transportcertificate
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="type != null" >
+        type,
+      </if>
+      <if test="salecompanyid != null" >
+        salecompanyid,
+      </if>
+      <if test="salecompanyname != null" >
+        salecompanyname,
+      </if>
+      <if test="productionlicense != null" >
+        productionlicense,
+      </if>
+      <if test="contractnumber != null" >
+        contractnumber,
+      </if>
+      <if test="shippercompanyname != null" >
+        shippercompanyname,
+      </if>
+      <if test="shipperaddress != null" >
+        shipperaddress,
+      </if>
+      <if test="shipperprincipalname != null" >
+        shipperprincipalname,
+      </if>
+      <if test="shippermanagername != null" >
+        shippermanagername,
+      </if>
+      <if test="shippermanageridentify != null" >
+        shippermanageridentify,
+      </if>
+      <if test="shippermanagerphone != null" >
+        shippermanagerphone,
+      </if>
+      <if test="receivercompanyname != null" >
+        receivercompanyname,
+      </if>
+      <if test="receiveraddress != null" >
+        receiveraddress,
+      </if>
+      <if test="receiverprincipalname != null" >
+        receiverprincipalname,
+      </if>
+      <if test="receiverprincipalphone != null" >
+        receiverprincipalphone,
+      </if>
+      <if test="carrierid != null" >
+        carrierid,
+      </if>
+      <if test="carriercompanyname != null" >
+        carriercompanyname,
+      </if>
+      <if test="otherdeparture != null" >
+        otherdeparture,
+      </if>
+      <if test="otherdestination != null" >
+        otherdestination,
+      </if>
+      <if test="othershipstarttime != null" >
+        othershipstarttime,
+      </if>
+      <if test="othershipendtime != null" >
+        othershipendtime,
+      </if>
+      <if test="otherapproach != null" >
+        otherapproach,
+      </if>
+      <if test="othermemo != null" >
+        othermemo,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="type != null" >
+        #{type,jdbcType=VARCHAR},
+      </if>
+      <if test="salecompanyid != null" >
+        #{salecompanyid,jdbcType=BIGINT},
+      </if>
+      <if test="salecompanyname != null" >
+        #{salecompanyname,jdbcType=VARCHAR},
+      </if>
+      <if test="productionlicense != null" >
+        #{productionlicense,jdbcType=VARCHAR},
+      </if>
+      <if test="contractnumber != null" >
+        #{contractnumber,jdbcType=VARCHAR},
+      </if>
+      <if test="shippercompanyname != null" >
+        #{shippercompanyname,jdbcType=VARCHAR},
+      </if>
+      <if test="shipperaddress != null" >
+        #{shipperaddress,jdbcType=VARCHAR},
+      </if>
+      <if test="shipperprincipalname != null" >
+        #{shipperprincipalname,jdbcType=VARCHAR},
+      </if>
+      <if test="shippermanagername != null" >
+        #{shippermanagername,jdbcType=VARCHAR},
+      </if>
+      <if test="shippermanageridentify != null" >
+        #{shippermanageridentify,jdbcType=VARCHAR},
+      </if>
+      <if test="shippermanagerphone != null" >
+        #{shippermanagerphone,jdbcType=VARCHAR},
+      </if>
+      <if test="receivercompanyname != null" >
+        #{receivercompanyname,jdbcType=VARCHAR},
+      </if>
+      <if test="receiveraddress != null" >
+        #{receiveraddress,jdbcType=VARCHAR},
+      </if>
+      <if test="receiverprincipalname != null" >
+        #{receiverprincipalname,jdbcType=VARCHAR},
+      </if>
+      <if test="receiverprincipalphone != null" >
+        #{receiverprincipalphone,jdbcType=VARCHAR},
+      </if>
+      <if test="carrierid != null" >
+        #{carrierid,jdbcType=BIGINT},
+      </if>
+      <if test="carriercompanyname != null" >
+        #{carriercompanyname,jdbcType=VARCHAR},
+      </if>
+      <if test="otherdeparture != null" >
+        #{otherdeparture,jdbcType=VARCHAR},
+      </if>
+      <if test="otherdestination != null" >
+        #{otherdestination,jdbcType=VARCHAR},
+      </if>
+      <if test="othershipstarttime != null" >
+        #{othershipstarttime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="othershipendtime != null" >
+        #{othershipendtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="otherapproach != null" >
+        #{otherapproach,jdbcType=VARCHAR},
+      </if>
+      <if test="othermemo != null" >
+        #{othermemo,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.TransportCertificate" >
+    <!--          -->
+    update transportcertificate
+    <set >
+      <if test="type != null" >
+        type = #{type,jdbcType=VARCHAR},
+      </if>
+      <if test="salecompanyid != null" >
+        salecompanyid = #{salecompanyid,jdbcType=BIGINT},
+      </if>
+      <if test="salecompanyname != null" >
+        salecompanyname = #{salecompanyname,jdbcType=VARCHAR},
+      </if>
+      <if test="productionlicense != null" >
+        productionlicense = #{productionlicense,jdbcType=VARCHAR},
+      </if>
+      <if test="contractnumber != null" >
+        contractnumber = #{contractnumber,jdbcType=VARCHAR},
+      </if>
+      <if test="shippercompanyname != null" >
+        shippercompanyname = #{shippercompanyname,jdbcType=VARCHAR},
+      </if>
+      <if test="shipperaddress != null" >
+        shipperaddress = #{shipperaddress,jdbcType=VARCHAR},
+      </if>
+      <if test="shipperprincipalname != null" >
+        shipperprincipalname = #{shipperprincipalname,jdbcType=VARCHAR},
+      </if>
+      <if test="shippermanagername != null" >
+        shippermanagername = #{shippermanagername,jdbcType=VARCHAR},
+      </if>
+      <if test="shippermanageridentify != null" >
+        shippermanageridentify = #{shippermanageridentify,jdbcType=VARCHAR},
+      </if>
+      <if test="shippermanagerphone != null" >
+        shippermanagerphone = #{shippermanagerphone,jdbcType=VARCHAR},
+      </if>
+      <if test="receivercompanyname != null" >
+        receivercompanyname = #{receivercompanyname,jdbcType=VARCHAR},
+      </if>
+      <if test="receiveraddress != null" >
+        receiveraddress = #{receiveraddress,jdbcType=VARCHAR},
+      </if>
+      <if test="receiverprincipalname != null" >
+        receiverprincipalname = #{receiverprincipalname,jdbcType=VARCHAR},
+      </if>
+      <if test="receiverprincipalphone != null" >
+        receiverprincipalphone = #{receiverprincipalphone,jdbcType=VARCHAR},
+      </if>
+      <if test="carrierid != null" >
+        carrierid = #{carrierid,jdbcType=BIGINT},
+      </if>
+      <if test="carriercompanyname != null" >
+        carriercompanyname = #{carriercompanyname,jdbcType=VARCHAR},
+      </if>
+      <if test="otherdeparture != null" >
+        otherdeparture = #{otherdeparture,jdbcType=VARCHAR},
+      </if>
+      <if test="otherdestination != null" >
+        otherdestination = #{otherdestination,jdbcType=VARCHAR},
+      </if>
+      <if test="othershipstarttime != null" >
+        othershipstarttime = #{othershipstarttime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="othershipendtime != null" >
+        othershipendtime = #{othershipendtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="otherapproach != null" >
+        otherapproach = #{otherapproach,jdbcType=VARCHAR},
+      </if>
+      <if test="othermemo != null" >
+        othermemo = #{othermemo,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.TransportCertificate" >
+    <!--          -->
+    update transportcertificate
+    set type = #{type,jdbcType=VARCHAR},
+      salecompanyid = #{salecompanyid,jdbcType=BIGINT},
+      salecompanyname = #{salecompanyname,jdbcType=VARCHAR},
+      productionlicense = #{productionlicense,jdbcType=VARCHAR},
+      contractnumber = #{contractnumber,jdbcType=VARCHAR},
+      shippercompanyname = #{shippercompanyname,jdbcType=VARCHAR},
+      shipperaddress = #{shipperaddress,jdbcType=VARCHAR},
+      shipperprincipalname = #{shipperprincipalname,jdbcType=VARCHAR},
+      shippermanagername = #{shippermanagername,jdbcType=VARCHAR},
+      shippermanageridentify = #{shippermanageridentify,jdbcType=VARCHAR},
+      shippermanagerphone = #{shippermanagerphone,jdbcType=VARCHAR},
+      receivercompanyname = #{receivercompanyname,jdbcType=VARCHAR},
+      receiveraddress = #{receiveraddress,jdbcType=VARCHAR},
+      receiverprincipalname = #{receiverprincipalname,jdbcType=VARCHAR},
+      receiverprincipalphone = #{receiverprincipalphone,jdbcType=VARCHAR},
+      carrierid = #{carrierid,jdbcType=BIGINT},
+      carriercompanyname = #{carriercompanyname,jdbcType=VARCHAR},
+      otherdeparture = #{otherdeparture,jdbcType=VARCHAR},
+      otherdestination = #{otherdestination,jdbcType=VARCHAR},
+      othershipstarttime = #{othershipstarttime,jdbcType=TIMESTAMP},
+      othershipendtime = #{othershipendtime,jdbcType=TIMESTAMP},
+      otherapproach = #{otherapproach,jdbcType=VARCHAR},
+      othermemo = #{othermemo,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/TransportCertificatePersonMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/TransportCertificatePersonMapper.xml
new file mode 100644
index 0000000..2cea0de
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/TransportCertificatePersonMapper.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gk.firework.Mapper.TransportCertificatePersonMapper">
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.TransportCertificatePerson">
+    <!--          -->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="certificatecode" jdbcType="VARCHAR" property="certificatecode" />
+    <result column="personid" jdbcType="BIGINT" property="personid" />
+    <result column="personname" jdbcType="VARCHAR" property="personname" />
+    <result column="personidentify" jdbcType="VARCHAR" property="personidentify" />
+    <result column="validtime" jdbcType="TIMESTAMP" property="validtime" />
+    <result column="number" jdbcType="VARCHAR" property="number" />
+    <result column="phone" jdbcType="VARCHAR" property="phone" />
+    <result column="type" jdbcType="VARCHAR" property="type" />
+    <result column="validflag" jdbcType="BIT" property="validflag" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--          -->
+    id, certificatecode, personid, personname, personidentify, validtime, number, phone, 
+    validflag
+  </sql>
+  <update id="deleteByCertificateCode" parameterType="java.lang.String">
+    update transportcertificateperson
+    set validflag = 0
+    where certificatecode= #{code}
+  </update>
+
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/TransportCertificateProductMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/TransportCertificateProductMapper.xml
new file mode 100644
index 0000000..3109d47
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/TransportCertificateProductMapper.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gk.firework.Mapper.TransportCertificateProductMapper">
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.TransportCertificateProduct">
+    <!--          -->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="certificatecode" jdbcType="VARCHAR" property="certificatecode" />
+    <result column="productcode" jdbcType="VARCHAR" property="productcode" />
+    <result column="num" jdbcType="INTEGER" property="num" />
+    <result column="type" jdbcType="VARCHAR" property="type" />
+    <result column="name" jdbcType="VARCHAR" property="name" />
+    <result column="level" jdbcType="VARCHAR" property="level" />
+    <result column="packing" jdbcType="VARCHAR" property="packing" />
+    <result column="specification" jdbcType="VARCHAR" property="specification" />
+    <result column="validflag" jdbcType="BIT" property="validflag" />
+  </resultMap>
+  <update id="deleteByCertificateCode"  parameterType="java.lang.String">
+    update transportcertificateproduct
+    set validflag = 0
+    where certificatecode= #{code}
+  </update>
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/TransportPersonMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/TransportPersonMapper.xml
new file mode 100644
index 0000000..bc2572d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/TransportPersonMapper.xml
@@ -0,0 +1,190 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.TransportPersonMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.TransportPerson" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="type" property="type" jdbcType="VARCHAR" />
+    <result column="name" property="name" jdbcType="VARCHAR" />
+    <result column="identify" property="identify" jdbcType="VARCHAR" />
+    <result column="certificate" property="certificate" jdbcType="VARCHAR" />
+    <result column="validtime" property="validtime" jdbcType="TIMESTAMP" />
+    <result column="createby" property="createby" jdbcType="BIGINT" />
+    <result column="createbyname" property="createbyname" jdbcType="VARCHAR" />
+    <result column="updateby" property="updateby" jdbcType="BIGINT" />
+    <result column="updatebyname" property="updatebyname" jdbcType="VARCHAR" />
+    <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+    <result column="createtime" property="createtime" jdbcType="TIMESTAMP" />
+    <result column="phone" property="phone" jdbcType="VARCHAR" />
+    <result column="validflag" property="validflag" jdbcType="BIT" />
+    <result column="belongid" property="belongid" jdbcType="BIGINT" />
+    <result column="belongname" property="belongname" jdbcType="VARCHAR" />
+  </resultMap>
+
+  <insert id="insertSelective" parameterType="com.gk.firework.Domain.TransportPerson" >
+    <!--          -->
+    insert into transportperson
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        id,
+      </if>
+      <if test="type != null" >
+        type,
+      </if>
+      <if test="name != null" >
+        name,
+      </if>
+      <if test="identify != null" >
+        identify,
+      </if>
+      <if test="certificate != null" >
+        certificate,
+      </if>
+      <if test="validtime != null" >
+        validtime,
+      </if>
+      <if test="createby != null" >
+        createby,
+      </if>
+      <if test="createbyname != null" >
+        createbyname,
+      </if>
+      <if test="updateby != null" >
+        updateby,
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname,
+      </if>
+      <if test="updatetime != null" >
+        updatetime,
+      </if>
+      <if test="createtime != null" >
+        createtime,
+      </if>
+      <if test="validflag != null" >
+        validflag,
+      </if>
+      <if test="belongid != null" >
+        belongid,
+      </if>
+      <if test="belongname != null" >
+        belongname,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="id != null" >
+        #{id,jdbcType=BIGINT},
+      </if>
+      <if test="type != null" >
+        #{type,jdbcType=VARCHAR},
+      </if>
+      <if test="name != null" >
+        #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="identify != null" >
+        #{identify,jdbcType=VARCHAR},
+      </if>
+      <if test="certificate != null" >
+        #{certificate,jdbcType=VARCHAR},
+      </if>
+      <if test="validtime != null" >
+        #{validtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updateby != null" >
+        #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createtime != null" >
+        #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="validflag != null" >
+        #{validflag,jdbcType=BIT},
+      </if>
+      <if test="belongid != null" >
+        #{belongid,jdbcType=BIGINT},
+      </if>
+      <if test="belongname != null" >
+        #{belongname,jdbcType=VARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.TransportPerson" >
+    <!--          -->
+    update transportperson
+    <set >
+      <if test="type != null" >
+        type = #{type,jdbcType=VARCHAR},
+      </if>
+      <if test="name != null" >
+        name = #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="identify != null" >
+        identify = #{identify,jdbcType=VARCHAR},
+      </if>
+      <if test="certificate != null" >
+        certificate = #{certificate,jdbcType=VARCHAR},
+      </if>
+      <if test="validtime != null" >
+        validtime = #{validtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createby != null" >
+        createby = #{createby,jdbcType=BIGINT},
+      </if>
+      <if test="createbyname != null" >
+        createbyname = #{createbyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updateby != null" >
+        updateby = #{updateby,jdbcType=BIGINT},
+      </if>
+      <if test="updatebyname != null" >
+        updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      </if>
+      <if test="updatetime != null" >
+        updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="createtime != null" >
+        createtime = #{createtime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="validflag != null" >
+        validflag = #{validflag,jdbcType=BIT},
+      </if>
+      <if test="belongid != null" >
+        belongid = #{belongid,jdbcType=BIGINT},
+      </if>
+      <if test="belongname != null" >
+        belongname = #{belongname,jdbcType=VARCHAR},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.TransportPerson" >
+    <!--          -->
+    update transportperson
+    set type = #{type,jdbcType=VARCHAR},
+      name = #{name,jdbcType=VARCHAR},
+      identify = #{identify,jdbcType=VARCHAR},
+      certificate = #{certificate,jdbcType=VARCHAR},
+      validtime = #{validtime,jdbcType=TIMESTAMP},
+      createby = #{createby,jdbcType=BIGINT},
+      createbyname = #{createbyname,jdbcType=VARCHAR},
+      updateby = #{updateby,jdbcType=BIGINT},
+      updatebyname = #{updatebyname,jdbcType=VARCHAR},
+      updatetime = #{updatetime,jdbcType=TIMESTAMP},
+      createtime = #{createtime,jdbcType=TIMESTAMP},
+      validflag = #{validflag,jdbcType=BIT},
+      belongid = #{belongid,jdbcType=BIGINT},
+      belongname = #{belongname,jdbcType=VARCHAR}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/UserDeadlineLog.xml b/src/main/java/com/gk/firework/Mapper/mybatis/UserDeadlineLog.xml
new file mode 100644
index 0000000..0624d17
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/UserDeadlineLog.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.UserDeadlineLogMapper" >
+
+
+
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/UserInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/UserInfoMapper.xml
new file mode 100644
index 0000000..97199d7
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/UserInfoMapper.xml
@@ -0,0 +1,417 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.UserInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.UserInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="username" property="username" jdbcType="VARCHAR" />
+    <result column="password" property="password" jdbcType="VARCHAR" />
+    <result column="email" property="email" jdbcType="VARCHAR" />
+    <result column="phone" property="phone" jdbcType="VARCHAR" />
+    <result column="mobile" property="mobile" jdbcType="VARCHAR" />
+    <result column="company" property="company" jdbcType="VARCHAR" />
+    <result column="department" property="department" jdbcType="VARCHAR" />
+    <result column="job" property="job" jdbcType="VARCHAR" />
+    <result column="createdby" property="createdby" jdbcType="VARCHAR" />
+    <result column="createddate" property="createddate" jdbcType="TIMESTAMP" />
+    <result column="lastmodifiedby" property="lastmodifiedby" jdbcType="VARCHAR" />
+    <result column="lastmodifieddate" property="lastmodifieddate" jdbcType="TIMESTAMP" />
+    <result column="province" property="province" jdbcType="VARCHAR" />
+    <result column="city" property="city" jdbcType="VARCHAR" />
+    <result column="area" property="area" jdbcType="VARCHAR" />
+    <result column="town" property="town" jdbcType="VARCHAR" />
+    <result column="community" property="community" jdbcType="VARCHAR" />
+    <result column="companyid" property="companyid" jdbcType="BIGINT" />
+    <result column="status" property="status" jdbcType="TINYINT" />
+    <result column="expiredate" property="expiredate" jdbcType="TIMESTAMP" />
+    <result column="isdel" property="isdel" jdbcType="TINYINT" />
+    <result column="issale" property="issale" jdbcType="TINYINT" />
+    <result column="type" property="type" jdbcType="INTEGER" />
+    <result column="deadline" property="deadline" jdbcType="TIMESTAMP" />
+  </resultMap>
+
+  <resultMap id="UserVo" type="com.gk.firework.Domain.Vo.UserVo" >
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="username" property="username" jdbcType="VARCHAR" />
+    <result column="password" property="password" jdbcType="VARCHAR" />
+    <result column="email" property="email" jdbcType="VARCHAR" />
+    <result column="phone" property="phone" jdbcType="VARCHAR" />
+    <result column="mobile" property="mobile" jdbcType="VARCHAR" />
+    <result column="company" property="company" jdbcType="VARCHAR" />
+    <result column="department" property="department" jdbcType="VARCHAR" />
+    <result column="job" property="job" jdbcType="VARCHAR" />
+    <result column="createdby" property="createdby" jdbcType="VARCHAR" />
+    <result column="createddate" property="createddate" jdbcType="TIMESTAMP" />
+    <result column="lastmodifiedby" property="lastmodifiedby" jdbcType="VARCHAR" />
+    <result column="lastmodifieddate" property="lastmodifieddate" jdbcType="TIMESTAMP" />
+    <result column="province" property="province" jdbcType="VARCHAR" />
+    <result column="city" property="city" jdbcType="VARCHAR" />
+    <result column="area" property="area" jdbcType="VARCHAR" />
+    <result column="town" property="town" jdbcType="VARCHAR" />
+    <result column="code" property="code" jdbcType="VARCHAR" />
+    <result column="community" property="community" jdbcType="VARCHAR" />
+    <result column="companyid" property="companyid" jdbcType="BIGINT" />
+    <result column="companynumber" property="companynumber" jdbcType="VARCHAR" />
+    <result column="status" property="status" jdbcType="TINYINT" />
+    <result column="expiredate" property="expiredate" jdbcType="TIMESTAMP" />
+    <result column="isdel" property="isdel" jdbcType="TINYINT" />
+    <result column="issale" property="issale" jdbcType="TINYINT" />
+    <result column="type" property="type" jdbcType="INTEGER" />
+    <result column="deadline" property="deadline" jdbcType="TIMESTAMP" />
+    <collection property="authorizationCodes"
+                javaType="java.util.List"
+                ofType="com.gk.firework.Domain.AuthorizationInfo"
+                column="companynumber"
+                select="selectAuth">
+      <id column="auth_id" property="id" jdbcType="BIGINT" />
+      <result column="enterprisenumber" property="enterprisenumber" jdbcType="VARCHAR" />
+      <result column="authcode" property="authcode" jdbcType="VARCHAR" />
+      <result column="authcodeprefix" property="authcodeprefix" jdbcType="VARCHAR" />
+      <result column="contractcode" property="contractcode" jdbcType="VARCHAR" />
+      <result column="createdat" property="createdat" jdbcType="TIMESTAMP" />
+      <result column="createdby" property="createdby" jdbcType="VARCHAR" />
+      <result column="safetysupervision" property="safetysupervision" jdbcType="VARCHAR" />
+      <result column="flag" property="flag" jdbcType="TINYINT" />
+      <result column="lasttime" property="lasttime" jdbcType="TIMESTAMP" />
+      <result column="auth_status" property="status" jdbcType="TINYINT" />
+    </collection>
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, username, password, email, phone, mobile, company, department, job, createdby,
+    createddate, lastmodifiedby, lastmodifieddate, province, city, area, town, community,
+    companyid, status, expiredate, isdel, issale,type
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select
+    <include refid="Base_Column_List" />
+    from user
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from user
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <delete id="deleteOneByCompanyId" parameterType="java.lang.Long">
+    update user
+    set isdel = 1
+    where companyid = #{companyId}
+  </delete>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.UserInfo" >
+    <!--          -->
+    update user
+    <set >
+      <if test="username != null" >
+        username = #{username,jdbcType=VARCHAR},
+      </if>
+      <if test="password != null" >
+        password = #{password,jdbcType=VARCHAR},
+      </if>
+      <if test="email != null" >
+        email = #{email,jdbcType=VARCHAR},
+      </if>
+      <if test="phone != null" >
+        phone = #{phone,jdbcType=VARCHAR},
+      </if>
+      <if test="mobile != null" >
+        mobile = #{mobile,jdbcType=VARCHAR},
+      </if>
+      <if test="company != null" >
+        company = #{company,jdbcType=VARCHAR},
+      </if>
+      <if test="department != null" >
+        department = #{department,jdbcType=VARCHAR},
+      </if>
+      <if test="job != null" >
+        job = #{job,jdbcType=VARCHAR},
+      </if>
+      <if test="createdby != null" >
+        createdby = #{createdby,jdbcType=VARCHAR},
+      </if>
+      <if test="createddate != null" >
+        createddate = #{createddate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="lastmodifiedby != null" >
+        lastmodifiedby = #{lastmodifiedby,jdbcType=VARCHAR},
+      </if>
+      <if test="lastmodifieddate != null" >
+        lastmodifieddate = #{lastmodifieddate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="province != null" >
+        province = #{province,jdbcType=VARCHAR},
+      </if>
+      <if test="city != null" >
+        city = #{city,jdbcType=VARCHAR},
+      </if>
+      <if test="area != null" >
+        area = #{area,jdbcType=VARCHAR},
+      </if>
+      <if test="town != null" >
+        town = #{town,jdbcType=VARCHAR},
+      </if>
+      <if test="community != null" >
+        community = #{community,jdbcType=VARCHAR},
+      </if>
+      <if test="companyid != null" >
+        companyid = #{companyid,jdbcType=BIGINT},
+      </if>
+      <if test="companynumber != null" >
+        #{companynumber,jdbcType=VARCHAR},
+      </if>
+      <if test="status != null" >
+        status = #{status,jdbcType=TINYINT},
+      </if>
+      <if test="expiredate != null" >
+        expiredate = #{expiredate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="isdel != null" >
+        isdel = #{isdel,jdbcType=TINYINT},
+      </if>
+      <if test="issale != null" >
+        issale = #{issale,jdbcType=TINYINT},
+      </if>
+      <if test="type != null">
+        type = #{type,jdbcType=INTEGER},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.UserInfo" >
+    <!--          -->
+    update user
+    set username = #{username,jdbcType=VARCHAR},
+      password = #{password,jdbcType=VARCHAR},
+      email = #{email,jdbcType=VARCHAR},
+      phone = #{phone,jdbcType=VARCHAR},
+      mobile = #{mobile,jdbcType=VARCHAR},
+      company = #{company,jdbcType=VARCHAR},
+      department = #{department,jdbcType=VARCHAR},
+      job = #{job,jdbcType=VARCHAR},
+      createdby = #{createdby,jdbcType=VARCHAR},
+      createddate = #{createddate,jdbcType=TIMESTAMP},
+      lastmodifiedby = #{lastmodifiedby,jdbcType=VARCHAR},
+      lastmodifieddate = #{lastmodifieddate,jdbcType=TIMESTAMP},
+      province = #{province,jdbcType=VARCHAR},
+      city = #{city,jdbcType=VARCHAR},
+      area = #{area,jdbcType=VARCHAR},
+      town = #{town,jdbcType=VARCHAR},
+      community = #{community,jdbcType=VARCHAR},
+      companyid = #{companyid,jdbcType=BIGINT},
+      status = #{status,jdbcType=TINYINT},
+      expiredate = #{expiredate,jdbcType=TIMESTAMP},
+      isdel = #{isdel,jdbcType=TINYINT},
+      issale = #{issale,jdbcType=TINYINT},
+      type  = #{type,jdbcType=INTEGER}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateDeadlineByCompanyId">
+        update user
+        set deadline = #{deadline}
+        where companyid = #{companyid}
+        and isdel = 0
+
+  </update>
+  <update id="updateDeadline2NullByComapnyId">
+     update user
+        set deadline = null
+        where companyid = #{companyid}
+        and isdel = 0
+  </update>
+  <select id="selectByLoginname" resultType="com.gk.firework.Domain.Vo.UserVo" parameterType="java.lang.String">
+    select
+     id, username, password, email, phone, mobile, company, department, job,province, city, area, town,
+     community,companyid, status, expiredate, issale,type
+    from user
+    where username = #{username,jdbcType=VARCHAR}
+    and isdel = 0
+  </select>
+  <select id="selectRoleByUser" resultType="com.gk.firework.Config.Oauth2.OauthRole">
+    SELECT
+	ar.id,
+	ar.NAME,
+	ar.code,
+	ar.btnaccess
+    FROM
+	userroles AS aur
+    LEFT JOIN role AS ar ON ar.id = aur.roleid
+    WHERE
+	aur.userid = #{id,jdbcType=INTEGER}
+  </select>
+  <select id="selectUserDataGrid" resultMap="UserVo">
+    select
+    user.id,
+    user.username,
+    user.password,
+    user.email,
+    user.phone,
+    user.mobile,
+    user.company,
+    user.department,
+    user.job,
+    user.province,
+    user.city,
+    user.area,
+    user.town,
+    user.code,
+    user.community,
+    user.companyid,
+    user.status,
+    user.expiredate,
+    user.issale,
+    user.type,
+    user.lastmodifiedby,
+    user.lastmodifieddate,
+    user.companynumber,
+    user.deadline,
+    enterprise.safetysupervision safetysupervision
+    from user as user
+    left join enterprise as enterprise on user.companyid = enterprise.id
+    <where>
+      user.isdel = 0
+      and user.issale = #{record.issale}
+      <if test="record.username != null and record.username !=''">
+       and user.username = #{record.username,jdbcType=VARCHAR}
+      </if>
+      <if test="record.company != null and record.company !=''">
+        and user.company like concat ('%',#{record.company,jdbcType=VARCHAR},'%')
+      </if>
+      <if test="record.department != null and record.department !=''">
+        and user.department like concat ('%',#{record.department,jdbcType=VARCHAR},'%')
+      </if>
+      <if test="record.job != null and record.job !=''">
+        and user.job like concat ('%',#{record.job,jdbcType=VARCHAR},'%')
+      </if>
+      <if test="record.iscompany == 0">
+        and user.companyid is null
+      </if>
+      <if test="record.iscompany == 1">
+        and user.companyid is not null
+      </if>
+      <if test="record.type != 1">
+        and user.type != 1
+      </if>
+      <if test="record.companyid != null">
+        and user.companyid = #{record.companyid}
+      </if>
+      <if test="record.province != null and record.province !=''">
+        and user.province = #{record.province,jdbcType=VARCHAR}
+      </if>
+      <if test="record.city != null and record.city !=''">
+        and user.city = #{record.city,jdbcType=VARCHAR}
+      </if>
+      <if test="record.area != null and record.area !=''">
+        and user.area = #{record.area,jdbcType=VARCHAR}
+      </if>
+      <if test="record.town != null and record.town !=''">
+        and user.town = #{record.town,jdbcType=VARCHAR}
+      </if>
+      <if test="record.community != null and record.community !=''">
+        and user.community = #{record.community,jdbcType=VARCHAR}
+      </if>
+
+      <if test="record.provinceSee != null and record.provinceSee !=''">
+        and user.province = #{record.provinceSee,jdbcType=VARCHAR}
+      </if>
+      <if test="record.citySee != null and record.citySee !=''">
+        and user.city = #{record.citySee,jdbcType=VARCHAR}
+      </if>
+      <if test="record.areaSee != null and record.areaSee !=''">
+        and user.area = #{record.areaSee,jdbcType=VARCHAR}
+      </if>
+      <if test="record.townSee != null and record.townSee !=''">
+        and user.town = #{record.townSee,jdbcType=VARCHAR}
+      </if>
+      <if test="record.communitySee != null and record.communitySee !=''">
+        and user.community = #{record.communitySee,jdbcType=VARCHAR}
+      </if>
+      <if test="record.safetysupervision != null and record.safetysupervision !=''">
+        and enterprise.safetysupervision = #{record.safetysupervision}
+      </if>
+
+    </where>
+  </select>
+
+  <select id="selectAuth"  resultType="com.gk.firework.Domain.AuthorizationInfo">
+    select  *
+    from authorization
+    where enterprisenumber = #{companynumber}
+  </select>
+
+  <select id="selectUserInfo" resultType="com.gk.firework.Domain.UserInfo">
+    select *
+    from user
+    <where>
+      1=1
+      and isdel = 0
+      <if test="id != null">
+        and id != #{id}
+      </if>
+      <if test="username != null and username !=''">
+        and username = #{username}
+      </if>
+    </where>
+  </select>
+  <select id="getOneByCompanyId" resultType="com.gk.firework.Domain.UserInfo" parameterType="java.lang.Long">
+    select *
+    from user
+    where  isdel = 0
+    and companyid = #{companyId}
+  </select>
+  <select id="selectSupervise" resultType="com.gk.firework.Domain.UserInfo">
+    select *
+    from user
+    <where>
+      isdel = 0
+      and companyid is null
+      and status is null
+      and issale = 0
+      <if test="province != null and province != ''">
+        and province = #{province}
+      </if>
+      <if test="city != null and city != ''">
+        and city = #{city}
+      </if>
+      <if test="area != null and area !=''">
+        and area = #{area}
+      </if>
+      <if test="town != null and town !=''">
+        and town = #{town}
+      </if>
+      <if test="community != null and community !=''">
+        and community = #{community}
+      </if>
+    </where>
+    limit 1
+  </select>
+  <select id="selectUserVoByName" resultType="com.gk.firework.Domain.Vo.UserVo">
+    select
+    `user`. id,
+	`user`.username,
+	`user`.`password`,
+	`user`.email,
+	`user`.phone,
+	`user`.mobile,
+	`user`.company,
+	`user`.department,
+	`user`.job,
+	`user`.province,
+	`user`.city,
+	`user`.area,
+	`user`.town,
+	`user`.community,
+	`user`.companyid,
+	`user`.`status`,
+	`user`.expiredate,
+	`user`.issale,
+	`user`.`type`,
+	`user`.companynumber,
+	`user`.deadline,
+	enterprise.safetysupervision as roleType
+    from `user`
+    left join enterprise on enterprise.enterprisenumber = `user`.companynumber
+    where username = #{username,jdbcType=VARCHAR}
+    and isdel = 0
+  </select>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/UserRolesInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/UserRolesInfoMapper.xml
new file mode 100644
index 0000000..e974305
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/UserRolesInfoMapper.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.UserRolesInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.UserRolesInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="userid" property="userid" jdbcType="BIGINT" />
+    <result column="roleid" property="roleid" jdbcType="BIGINT" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, userid, roleid
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select
+    <include refid="Base_Column_List" />
+    from userroles
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >
+    <!--          -->
+    delete from userroles
+    where id = #{id,jdbcType=BIGINT}
+  </delete>
+  <delete id="deleteByUserId">
+    delete from userroles
+    where userid = #{userid,jdbcType=BIGINT}
+  </delete>
+  <update id="updateByPrimaryKeySelective" parameterType="com.gk.firework.Domain.UserRolesInfo" >
+    <!--          -->
+    update userroles
+    <set >
+      <if test="userid != null" >
+        userid = #{userid,jdbcType=BIGINT},
+      </if>
+      <if test="roleid != null" >
+        roleid = #{roleid,jdbcType=BIGINT},
+      </if>
+    </set>
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.gk.firework.Domain.UserRolesInfo" >
+    <!--          -->
+    update userroles
+    set userid = #{userid,jdbcType=BIGINT},
+      roleid = #{roleid,jdbcType=BIGINT}
+    where id = #{id,jdbcType=BIGINT}
+  </update>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/WarnContentInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/WarnContentInfoMapper.xml
new file mode 100644
index 0000000..6866686
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/WarnContentInfoMapper.xml
@@ -0,0 +1,265 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.WarnContentInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.WarnContentInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="warntype" property="warntype" jdbcType="VARCHAR" />
+    <result column="warnlevel" property="warnlevel" jdbcType="VARCHAR" />
+    <result column="warncontent" property="warncontent" jdbcType="VARCHAR" />
+    <result column="customid" property="customid" jdbcType="BIGINT" />
+    <result column="enterpriseid" property="enterpriseid" jdbcType="BIGINT" />
+    <result column="ismend" property="ismend" jdbcType="TINYINT" />
+    <result column="isneed" property="isneed" jdbcType="TINYINT" />
+    <result column="issend" property="issend" jdbcType="TINYINT" />
+    <result column="modifiedby" property="modifiedby" jdbcType="VARCHAR" />
+    <result column="modifieddate" property="modifieddate" jdbcType="TIMESTAMP" />
+    <result column="createddate" property="createddate" jdbcType="TIMESTAMP" />
+    <result column="period" property="period" jdbcType="INTEGER" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    id, warntype, warnlevel, warncontent, customid, enterpriseid, ismend, isneed, issend, modifiedby, modifieddate,createddate, period
+  </sql>
+    <insert id="insertBatch">
+        insert into
+        warncontent
+        <trim prefix="(" suffix=") values" suffixOverrides=",">
+          warntype,
+          warnlevel,
+          warncontent,
+          customid,
+          enterpriseid,
+          ismend,
+          isneed,
+          issend,
+          modifiedby,
+          modifieddate,
+          createddate,
+          period,
+        </trim>
+        <foreach collection="list" item="item" open="(" close=")" separator=",">
+          <trim prefix="(" suffix=")" suffixOverrides=",">
+          #{item.warntype},
+          #{item.warnlevel},
+          #{item.warncontent},
+          #{item.customid},
+          #{item.ismend},
+          #{item.isneed},
+          #{item.issend},
+          #{item.modifiedby},
+          #{item.modifieddate},
+          #{item.createddate},
+          #{item.period},
+          </trim>
+        </foreach>
+
+
+    </insert>
+    <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    select
+    <include refid="Base_Column_List" />
+    from warncontent
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <select id="selectStockDataGrid" resultType="com.gk.firework.Domain.Vo.WarnContentVo">
+    SELECT
+    warncontent.*,
+    enterprise.safetysupervision as enterprisetype,
+    enterprise.enterprisename,
+    enterprise.enterprisenumber,
+    enterprise.officeaddress
+    from warncontent
+    LEFT JOIN enterprise ON enterprise.id = warncontent.enterpriseid
+    <where>
+      1=1
+      <if test="condition.warntype != null and condition.warntype !=''">
+        and  warncontent.warntype = #{condition.warntype}
+      </if>
+      <if test="condition.ismend != null">
+        and warncontent.ismend = #{ismend}
+      </if>
+      <if test="condition.starttime != null and condition.starttime !=''">
+        and  warncontent.modifieddate &gt;= #{condition.starttime}
+      </if>
+      <if test="condition.endtime != null and condition.endtime !=''">
+        and  warncontent.modifieddate &lt;= #{condition.endtime}
+      </if>
+      <if test="condition.warnlevel != null and condition.warnlevel !=''">
+        and  warncontent.warnlevel = #{condition.warnlevel}
+      </if>
+      <if test="condition.enterprisename != null and condition.enterprisename !=''">
+        and enterprise.enterprisename LIKE CONCAT('%',#{condition.enterprisename},'%')
+      </if>
+      <if test="condition.enterprisetype != null and condition.enterprisetype !=''">
+        and  enterprise.safetysupervision = #{condition.enterprisetype}
+      </if>
+      <if test="condition.province != null and condition.province !=''">
+        and  enterprise.province = #{condition.province}
+      </if>
+      <if test="condition.city != null and condition.city !=''">
+        and  enterprise.city = #{condition.city}
+      </if>
+      <if test="condition.area != null and condition.area !=''">
+        and  enterprise.district = #{condition.area}
+      </if>
+      <if test="condition.town != null and condition.town !=''">
+        and  enterprise.street = #{condition.town}
+      </if>
+      <if test="condition.community != null and condition.community !=''">
+        and  enterprise.committee = #{condition.community}
+      </if>
+    </where>
+  </select>
+  <select id="selectPurchaseDataGrid" resultType="com.gk.firework.Domain.Vo.WarnContentVo">
+    SELECT
+    warncontent.*,
+    customer.idcardnum as idcard,
+    customer.`name` as purchasename,
+    customer.address as purchaseaddress
+    from warncontent
+    LEFT JOIN customer AS customer ON customer.id = warncontent.customid
+    <where>
+      1=1
+      <if test="condition.warntype != null and condition.warntype !=''">
+        and  warncontent.warntype = #{condition.warntype}
+      </if>
+      <if test="condition.ismend != null">
+        and warncontent.ismend = #{ismend}
+      </if>
+      <if test="condition.starttime != null and condition.starttime !=''">
+        and  warncontent.modifieddate &gt;= #{condition.starttime}
+      </if>
+      <if test="condition.endtime != null and condition.endtime !=''">
+        and  warncontent.modifieddate &lt;= #{condition.endtime}
+      </if>
+      <if test="condition.warnlevel != null and condition.warnlevel !=''">
+        and  warncontent.warnlevel = #{condition.warnlevel}
+      </if>
+      <if test="condition.customer != null and condition.customer !=''">
+        and  customer.`name` = #{condition.customer}
+      </if>
+      <if test="condition.idcard != null and condition.idcard !=''">
+        and  customer.idcardnum = #{condition.idcard}
+      </if>
+    </where>
+  </select>
+  <select id="selectByWarn" resultType="com.gk.firework.Domain.WarnContentInfo">
+    SELECT
+    <include refid="Base_Column_List" />
+    from warncontent
+    <where>
+      1=1
+      <if test="warntype != null and warntype !=''">
+        and warntype = #{warntype}
+      </if>
+      <if test="warnlevel != null and warnlevel !=''">
+        and  warnlevel = #{warnlevel}
+      </if>
+      <if test="customer != null">
+        and customid = #{customer}
+      </if>
+      <if test="warncontent != null and warncontent !=''">
+        and  warncontent = #{warncontent}
+      </if>
+    </where>
+    limit 1
+  </select>
+  <select id="selectByEnterpriseWarn" resultType="com.gk.firework.Domain.WarnContentInfo">
+    SELECT
+    <include refid="Base_Column_List" />
+    from warncontent
+    <where>
+      1=1
+      <if test="warntype != null and warntype !=''">
+        and warntype = #{warntype}
+      </if>
+      <if test="warnlevel != null and warnlevel !=''">
+        and warnlevel = #{warnlevel}
+      </if>
+      <if test="enterpriseid != null">
+        and enterpriseid = #{enterpriseid}
+      </if>
+      <if test="warncontent != null and warncontent !=''">
+        and warncontent = #{warncontent}
+      </if>
+    </where>
+    limit 1
+  </select>
+  <select id="selectNeedMail" resultType="com.gk.firework.Domain.Vo.WarnContentVo">
+    select
+        warncontent.*,
+        enterprise.enterprisename,
+        customer.`name` as purchasename,
+        customer.`name` as purchasename,
+        customer.idcardnum as idcard
+    from warncontent
+    LEFT JOIN enterprise ON enterprise.id = warncontent.enterpriseid
+    LEFT JOIN customer AS customer ON customer.id = warncontent.customid
+    where
+	    warncontent.isneed = 1
+    AND warncontent.issend = 0
+    AND warncontent.createddate &gt;= #{starttime}
+    AND warncontent.createddate &lt;= #{endtime}
+  </select>
+  <select id="selectIsNotMend" resultType="com.gk.firework.Domain.Vo.WarnContentVo">
+    select
+        warncontent.*,
+        enterprise.enterprisename,
+        enterprise.officeaddress,
+        customer.`name` as purchasename,
+        customer.`name` as purchasename,
+        customer.idcardnum as idcard,
+        customer.address as purchaseaddress
+    from warncontent
+    LEFT JOIN enterprise ON enterprise.id = warncontent.enterpriseid
+    LEFT JOIN customer AS customer ON customer.id = warncontent.customid
+    where
+	    warncontent.ismend = 0
+	    and warncontent.warnlevel = '报警'
+    order by warncontent.createddate DESC
+  </select>
+  <select id="selectWarningDataGrid" resultType="com.gk.firework.Domain.Vo.WarnContentVo">
+    SELECT
+    warncontent.*,
+    enterprise.safetysupervision as enterprisetype,
+    enterprise.enterprisename,
+    enterprise.enterprisenumber,
+    enterprise.officeaddress,
+    customer.idcardnum as idcard,
+    customer.`name` as purchasename,
+    customer.address as purchaseaddress
+    from warncontent
+    LEFT JOIN enterprise ON enterprise.id = warncontent.enterpriseid
+    LEFT JOIN customer AS customer ON customer.id = warncontent.customid
+    <where>
+      1=1
+      <if test="condition.warntype != null and condition.warntype !=''">
+        and  warncontent.warntype = #{condition.warntype}
+      </if>
+      <if test="condition.ismend != null">
+        and warncontent.ismend = #{ismend}
+      </if>
+      <if test="condition.starttime != null and condition.starttime !=''">
+        and  warncontent.modifieddate &gt;= #{condition.starttime}
+      </if>
+      <if test="condition.endtime != null and condition.endtime !=''">
+        and  warncontent.modifieddate &lt;= #{condition.endtime}
+      </if>
+      <if test="condition.warnlevel != null and condition.warnlevel !=''">
+        and  warncontent.warnlevel = #{condition.warnlevel}
+      </if>
+      <if test="condition.customer != null and condition.customer !=''">
+        and  customer.`name` = #{condition.customer}
+      </if>
+      <if test="condition.idcard != null and condition.idcard !=''">
+        and  customer.idcardnum = #{condition.idcard}
+      </if>
+      <if test="condition.enterprisename != null and condition.enterprisename !=''">
+        and enterprise.enterprisename LIKE CONCAT('%',#{condition.enterprisename},'%')
+      </if>
+      <if test="condition.enterprisetype != null and condition.enterprisetype !=''">
+        and  enterprise.safetysupervision = #{condition.enterprisetype}
+      </if>
+    </where>
+  </select>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Mapper/mybatis/WarningInfoMapper.xml b/src/main/java/com/gk/firework/Mapper/mybatis/WarningInfoMapper.xml
new file mode 100644
index 0000000..a9e3a9d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Mapper/mybatis/WarningInfoMapper.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gk.firework.Mapper.WarningInfoMapper" >
+  <resultMap id="BaseResultMap" type="com.gk.firework.Domain.WarningInfo" >
+    <!--          -->
+    <id column="id" property="id" jdbcType="BIGINT" />
+    <result column="warntype" property="warntype" jdbcType="VARCHAR" />
+    <result column="period" property="period" jdbcType="INTEGER" />
+    <result column="enterprisetype" property="enterprisetype" jdbcType="VARCHAR" />
+    <result column="issms" property="issms" jdbcType="TINYINT" />
+    <result column="minimum" property="minimum" jdbcType="INTEGER" />
+    <result column="maximum" property="maximum" jdbcType="INTEGER" />
+    <result column="modifiedby" property="modifiedby" jdbcType="VARCHAR" />
+    <result column="modifieddate" property="modifieddate" jdbcType="TIMESTAMP" />
+  </resultMap>
+  <sql id="Base_Column_List" >
+    <!--          -->
+    id, warntype, period, enterprisetype, issms, minimum, maximum, modifiedby, modifieddate
+  </sql>
+  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
+    <!--          -->
+    select
+    <include refid="Base_Column_List" />
+    from warning
+    where id = #{id,jdbcType=BIGINT}
+  </select>
+  <select id="selectDataGrid" resultType="com.gk.firework.Domain.WarningInfo">
+    select
+    <include refid="Base_Column_List" />
+    from warning
+    <where>
+      1=1
+      <if test="condition.warntype != null and condition.warntype != ''">
+        and warntype = #{condition.warntype}
+      </if>
+      <if test="condition.enterprisetype != null and condition.enterprisetype != ''">
+        and enterprisetype = #{condition.enterprisetype}
+      </if>
+    </where>
+  </select>
+  <select id="selectByType" resultType="com.gk.firework.Domain.WarningInfo">
+    select
+    <include refid="Base_Column_List" />
+    from warning
+    where warntype = #{warntype}
+  </select>
+</mapper>
diff --git a/src/main/java/com/gk/firework/Scheduls/AssessTask/EnforcePunishmentTask.java b/src/main/java/com/gk/firework/Scheduls/AssessTask/EnforcePunishmentTask.java
new file mode 100644
index 0000000..48a79ee
--- /dev/null
+++ b/src/main/java/com/gk/firework/Scheduls/AssessTask/EnforcePunishmentTask.java
@@ -0,0 +1,101 @@
+package com.gk.firework.Scheduls.AssessTask;
+
+import com.gk.firework.Domain.AccessAssessApply;
+import com.gk.firework.Domain.Enterprise;
+import com.gk.firework.Domain.Enum.AssessPunishment;
+import com.gk.firework.Domain.Enum.EnterpriseStatus;
+import com.gk.firework.Domain.Enum.PunishStatus;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Service.AccessAssessApplyService;
+import com.gk.firework.Service.AssessApplyService;
+import com.gk.firework.Service.EnterpriseService;
+import com.gk.firework.Service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+/**
+* @Description: 0点执行处罚
+* @date 2021/7/12 9:51
+*/
+@Component
+@EnableScheduling
+public class EnforcePunishmentTask {
+
+
+    @Value("${com.gk.firework.schedules.all.switch}")
+    private Boolean switchBtn;
+    //销售评定
+    @Autowired
+    private AssessApplyService assessApplyService;
+    //准入评定
+    @Autowired
+    private AccessAssessApplyService accessAssessApplyService;
+    @Autowired
+    private EnterpriseService enterpriseService;
+    @Autowired
+    private UserService userService;
+
+    @Scheduled(cron = "0 0 0 * * ?")
+    public void EnforcePunishment() {
+        if (switchBtn) {
+            Date currentTime = new Date();
+
+            //1.销售评定审批结束已经处罚
+
+            //2.准入评定 公示14天处罚,获取截止日期大于等于当日的准入评定进行相对应的处罚
+            List<AccessAssessApply> allOverTimeData = accessAssessApplyService.selectAllOverTimeAccessAssessApply();
+            if (allOverTimeData.size() > 0) {
+                for (AccessAssessApply accessAssessApply : allOverTimeData) {
+                    //企业信息检查
+                    Enterprise enterprise = enterpriseService.selectEnterpriseByNumber(accessAssessApply.getEnterprisenumber());
+                    if (enterprise == null)  throw new BusinessException("单位编号:" + accessAssessApply.getEnterprisenumber() + ",企业信息为空");
+                    //用户检查
+                    List<UserInfo> userInfos = userService.selectByCompanyId(enterprise.getId(), (byte) 0);
+                    if (userInfos.size() != 2) throw new BusinessException("数据异常:用户对象个数不匹配");
+                    //除了吊销,都是过期
+                    if (accessAssessApply.getPunishmentmeasure() == AssessPunishment.M0) {
+                        this.deactivateEnterprise(enterprise, userInfos);
+                        accessAssessApply.setPunishstatus(PunishStatus.PUNISHING);
+                        accessAssessApplyService.updateById(accessAssessApply);
+                    }
+
+                    if (accessAssessApply.getPunishmentmeasure() != AssessPunishment.M0)
+                        this.deactivateUser(userInfos);
+                        accessAssessApply.setPunishstatus(PunishStatus.PUNISHING);
+                        accessAssessApplyService.updateById(accessAssessApply);
+
+                }
+            }
+        }
+    }
+
+    //停用企业
+    private void deactivateEnterprise(Enterprise enterprise,List<UserInfo> userInfos) {
+        //停用企业
+        enterpriseService.setEnterpriseStatus(EnterpriseStatus.OFF, enterprise.getId());
+        //停用用户
+        for (UserInfo user : userInfos) {
+            userService.deleteById(user.getId());
+        }
+    }
+
+
+    //用户过期
+    private void deactivateUser(List<UserInfo> userInfos) {
+        for (UserInfo user : userInfos) {
+            userService.deleteById(user.getId());
+        }
+    }
+
+
+
+
+}
diff --git a/src/main/java/com/gk/firework/Scheduls/AssessTask/RecoverFromPunishmentTask.java b/src/main/java/com/gk/firework/Scheduls/AssessTask/RecoverFromPunishmentTask.java
new file mode 100644
index 0000000..ad838ad
--- /dev/null
+++ b/src/main/java/com/gk/firework/Scheduls/AssessTask/RecoverFromPunishmentTask.java
@@ -0,0 +1,159 @@
+package com.gk.firework.Scheduls.AssessTask;
+
+import com.gk.firework.Domain.AccessAssessApply;
+import com.gk.firework.Domain.AssessApply;
+import com.gk.firework.Domain.Enterprise;
+import com.gk.firework.Domain.Enum.AssessPunishment;
+import com.gk.firework.Domain.Enum.EnterpriseStatus;
+import com.gk.firework.Domain.Enum.PunishStatus;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Service.AccessAssessApplyService;
+import com.gk.firework.Service.AssessApplyService;
+import com.gk.firework.Service.EnterpriseService;
+import com.gk.firework.Service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+/**
+* @Description: 0点执行从处罚中恢复
+* @date 2021/7/12 15:42
+*/
+@Component
+@EnableScheduling
+public class RecoverFromPunishmentTask {
+
+    @Value("${com.gk.firework.schedules.all.switch}")
+    private Boolean switchBtn;
+    //销售评定
+    @Autowired
+    private AssessApplyService assessApplyService;
+    //准入评定
+    @Autowired
+    private AccessAssessApplyService accessAssessApplyService;
+    @Autowired
+    private EnterpriseService enterpriseService;
+    @Autowired
+    private UserService userService;
+
+
+    @Scheduled(cron = "0 0 0 * * ?")
+    public void RecoverFromPunishment() {
+
+        if (switchBtn) {
+            Date currentTime = new Date();
+
+            //1.获取销售评定处罚中的单子
+            List<AssessApply> allPunishingSaleList = assessApplyService.selectAllPunishingSaleAssessApply();
+            if (allPunishingSaleList.size() > 0) {
+                for (AssessApply assessApply : allPunishingSaleList) {
+                    //企业信息检查
+                    Enterprise enterprise = enterpriseService.selectEnterpriseByNumber(assessApply.getEnterprisenumber());
+                    if (enterprise == null)  throw new BusinessException("单位编号:" + assessApply.getEnterprisenumber() + ",企业信息为空");
+                    //用户检查 处罚中的企业状态都为1
+                    List<UserInfo> userInfos = userService.selectByCompanyId(enterprise.getId(), (byte) 1);
+                    if (userInfos.size() != 2) throw new BusinessException("数据异常:用户对象个数不匹配");
+
+                    switch (assessApply.getPunishmentmeasure()) {
+                            case M0:
+                            throw new BusinessException("数据异常,处罚中没有吊销");
+                        case M1:
+                            this.recoverUserAndEndPunishment(userInfos,1,currentTime,assessApply);
+                            break;
+                        case M2:
+                            this.recoverUserAndEndPunishment(userInfos,3,currentTime,assessApply);
+                            break;
+                        case M3:
+                            this.recoverUserAndEndPunishment(userInfos,6,currentTime,assessApply);
+                            break;
+                    }
+                }
+            }
+
+
+            //2.获取准入评定处罚中的单子
+            List<AccessAssessApply> allPunishingAccessList = accessAssessApplyService.selectAllPunishingAccessAssessApply();
+            if (allPunishingAccessList.size() > 0) {
+                for (AccessAssessApply accessAssessApply : allPunishingAccessList) {
+                    //企业信息检查
+                    Enterprise enterprise = enterpriseService.selectEnterpriseByNumber(accessAssessApply.getEnterprisenumber());
+                    if (enterprise == null)  throw new BusinessException("单位编号:" + accessAssessApply.getEnterprisenumber() + ",企业信息为空");
+                    //用户检查 处罚中的企业状态都为1
+                    List<UserInfo> userInfos = userService.selectByCompanyId(enterprise.getId(), (byte) 1);
+                    if (userInfos.size() != 2) throw new BusinessException("数据异常:用户对象个数不匹配");
+
+                    switch (accessAssessApply.getPunishmentmeasure()) {
+                        case M0:
+                            throw new BusinessException("数据异常,处罚中没有吊销");
+                        case M1:
+                            this.recoverUserAndEndPunishment(userInfos, 1, currentTime, accessAssessApply);
+                            break;
+                        case M2:
+                            this.recoverUserAndEndPunishment(userInfos, 3, currentTime, accessAssessApply);
+                            break;
+                        case M3:
+                            this.recoverUserAndEndPunishment(userInfos, 6, currentTime, accessAssessApply);
+                            break;
+                    }
+                }
+            }
+        }
+
+    }
+
+
+    //停用企业
+    private void activateEnterprise(Enterprise enterprise,List<UserInfo> userInfos) {
+        //停用企业
+        enterpriseService.setEnterpriseStatus(EnterpriseStatus.ON, enterprise.getId());
+        //停用用户
+        for (UserInfo user : userInfos) {
+            userService.recoverOneById(user.getId());
+        }
+    }
+
+
+    //评定恢复
+    private void recoverUserAndEndPunishment(List<UserInfo> userInfos,int num,Date currentTime,AccessAssessApply accessAssessApply) {
+
+        if (addMonth(accessAssessApply.getDeadline(), num).after(currentTime)) {
+            //用户恢复
+            for (UserInfo user : userInfos) {
+                userService.recoverOneById(user.getId());
+            }
+            //单子处罚结束
+            accessAssessApply.setPunishstatus(PunishStatus.END);
+            accessAssessApplyService.updateById(accessAssessApply);
+        }
+    }
+
+    //销售恢复
+    private void recoverUserAndEndPunishment(List<UserInfo> userInfos,int num,Date currentTime,AssessApply assessApply) {
+
+        if (addMonth(assessApply.getApprovetime(), num).after(currentTime)) {
+            //用户恢复
+            for (UserInfo user : userInfos) {
+                userService.recoverOneById(user.getId());
+            }
+            //单子处罚结束
+            assessApply.setPunishstatus(PunishStatus.END);
+            assessApplyService.updateById(assessApply);
+        }
+    }
+
+
+    //往后推n个月
+    private Date addMonth(Date date,int n) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.add(Calendar.MONTH, n);
+        return calendar.getTime();
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Scheduls/DL/DeviceIdRobot.java b/src/main/java/com/gk/firework/Scheduls/DL/DeviceIdRobot.java
new file mode 100644
index 0000000..107f704
--- /dev/null
+++ b/src/main/java/com/gk/firework/Scheduls/DL/DeviceIdRobot.java
@@ -0,0 +1,68 @@
+package com.gk.firework.Scheduls.DL;
+
+
+import com.gk.firework.Domain.Enterprise;
+import com.gk.firework.Service.EnterpriseService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Component
+@EnableScheduling
+public class DeviceIdRobot {
+
+    private static  final int deviceSize = 32;
+    @Value("${com.gk.firework.schedules.single.switch}")
+    private Boolean switchBtn;
+    @Autowired
+    private EnterpriseService enterpriseService;
+
+
+
+    @Scheduled(cron = "0/3 * * * * ?") //每隔3秒执行一次
+    public void deviceIdRobot(){
+        if (!switchBtn) return;
+        List<Enterprise> result =  enterpriseService.selectAllDlCompanyCodeIsNotNull();
+        List<Enterprise> updates = null;
+        if (result.size() > 0) {
+            updates = new ArrayList<>();
+            for (Enterprise e : result) {
+                String enterprisenumber = e.getEnterprisenumber();
+                String dlcompanycode = e.getDlcompanycode();
+                String strs = dlcompanycode + enterprisenumber;
+                int length = strs.length();
+                if ( length < deviceSize) {
+                    String deviceId = addZeroForNum(strs);
+                    e.setDeviceid(deviceId);
+                }else{
+                    String deviceId = strs.substring(0, deviceSize);
+                    e.setDeviceid(deviceId);
+                }
+                updates.add(e);
+            }
+        }
+
+        if (updates != null && updates.size() > 0) {
+            enterpriseService.updateBatchById(updates);
+        }
+    }
+
+
+    private static String addZeroForNum(String str) {
+        int strLen = str.length();
+        if (strLen < DeviceIdRobot.deviceSize) {
+            StringBuilder sb = new StringBuilder();
+            sb.append(str);
+            while (sb.toString().length() < DeviceIdRobot.deviceSize) {
+                sb.append("0");
+                str = sb.toString();
+            }
+        }
+        return str;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Scheduls/DL/ReportOrderTask.java b/src/main/java/com/gk/firework/Scheduls/DL/ReportOrderTask.java
new file mode 100644
index 0000000..6d00523
--- /dev/null
+++ b/src/main/java/com/gk/firework/Scheduls/DL/ReportOrderTask.java
@@ -0,0 +1,382 @@
+package com.gk.firework.Scheduls.DL;
+
+import com.alibaba.fastjson.JSONObject;
+import com.gk.firework.Domain.CustomerInfo;
+import com.gk.firework.Domain.Enterprise;
+import com.gk.firework.Domain.SaleOrderDetailInfo;
+import com.gk.firework.Domain.SaleOrderInfo;
+import com.gk.firework.Domain.Utils.BeanUtils;
+import com.gk.firework.Domain.Utils.HttpUtils;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Service.*;
+import org.apache.axis.client.Call;
+import org.apache.axis.client.Service;
+import org.apache.axis.encoding.XMLType;
+import org.apache.log4j.LogManager;
+import org.apache.log4j.Logger;
+import org.joda.time.DateTime;
+import org.joda.time.format.DateTimeFormat;
+import org.joda.time.format.DateTimeFormatter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import sun.misc.BASE64Decoder;
+import sun.misc.BASE64Encoder;
+
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+import java.io.IOException;
+import java.util.*;
+
+/**
+ * @author : jingjy
+ * @date : 2022/1/26 17:15
+ */
+@Configuration
+@EnableScheduling
+//@ConditionalOnProperty(prefix = "scheduling",name = "enabled",havingValue = "true")
+public class ReportOrderTask {
+    private Logger logger = LogManager.getLogger(com.gk.firework.Scheduls.WarningTask.StockWarnTask.class);
+    private static final String url = "http://118.190.117.180:8888";
+    @Value("${com.gk.firework.schedules.single.switch}")
+    private Boolean switchBtn;
+    @Autowired
+    EnterpriseService enterpriseService;
+    @Autowired
+    SaleOrderService saleOrderService;
+    @Autowired
+    SaleOrderDetailService saleOrderDetailService;
+    @Autowired
+    StockService stockService;
+    @Autowired
+    CustomerService customerService;
+
+    //@Scheduled(cron = "0 0 2 * * ?") //每天凌晨两点执行一次
+    @Scheduled(cron = "0/10 * * * * ?") //每隔10秒执行一次
+    private void reportOrder() {
+        if (!switchBtn) return;
+        //1.获取需要上传的企业信息
+        List<Enterprise>enterprises = enterpriseService.selectSaleEnterpriseForUpload();
+        for (Enterprise enterprise : enterprises){
+            if (StringUtils.isBlank(enterprise.getDlcompanycode()) || StringUtils.isBlank(enterprise.getDeviceid())){
+                continue;
+            }
+
+            //2.获取握手密码
+            DlResult result = getHandshake(enterprise);
+            if (result == null || StringUtils.isBlank(result.getFwdz()) || StringUtils.isBlank(result.getWsmm())){
+                continue;
+            }
+            //获取企业未上传销售数据
+            List<SaleOrderInfo> orderInfos = saleOrderService.getWaitUploadOrderByEnterprise(enterprise);
+            if (orderInfos == null || orderInfos.size() == 0){
+                continue;
+            }
+
+            uploadOrders(orderInfos,result,enterprise);
+        }
+
+        //3.上传数据
+        //4.处理上传结果
+
+    }
+
+    private DlResult getHandshake(Enterprise enterprise){
+        String respnse = null;
+        DlResult result = new DlResult();
+        Map params = new HashMap();//请求参数
+        params.put("sbid", enterprise.getDeviceid());//
+        params.put("dwdm", enterprise.getDlcompanycode());//
+
+        try {
+            respnse = HttpUtils.net(url+"/lsjk/Sbrz", params, "GET");
+            JSONObject jsonResult = JSONObject.parseObject(respnse);
+            String wsmm = jsonResult.getString("wsmm");
+            String fwdz = jsonResult.getString("fwdz");
+            result.setFwdz(fwdz);
+            result.setWsmm(wsmm);
+            return result;
+        }catch (Exception e){
+            return result;
+        }
+    }
+
+    public void uploadOrders(List<SaleOrderInfo>orderInfos, DlResult result, Enterprise enterprise){
+
+        String servicesUrl = url+result.getFwdz();
+        for (SaleOrderInfo orderInfo : orderInfos){
+            Service service = new Service();
+            Call call = null;
+            /**
+             * <?xml version="1.0" encoding="GBK"?>
+             * <sb>
+             * <sjbs>YH</sjbs><!--数据标注 -->
+             * <jylx>XX</jylx><!-- 交易类型(03-运输入库、09-退货、10-零散销售) -->
+             * <sjscsj>20100630151617</sjscsj><!--数据生成时间(精确到秒) -->
+             * <dwdm>XXXX</dwdm><!--单位代码(和烟花系统确定对应关系) -->
+             * <cjsbid>XXXX</cjsbid ><!--条码采集设备ID(定长32,不足补0) -->
+             * <zjlx>1</zjlx><!--证件类型(1-身份证、2-其他) -->
+             * <zjhm>XXXX</zjhm><!--证件号码,定长18 -->
+             * <tms>
+             * <bh>XXX</bh><!--条码编号-->
+             * <sj>20100630151617</sj><!--采集时间(精确到秒)-->
+             * </tms>
+             * </sb>
+             */
+            try {
+                List<SaleOrderDetailInfo> detailInfos = saleOrderDetailService.selectByOrderCode(orderInfo.getCode());
+                CustomerInfo customerInfo = customerService.getById(orderInfo.getCustomer());
+                String date = new DateTime(orderInfo.getCreatedat()).toString("yyyyMMddHHmmss");
+                ReportEntity reportEntity = new ReportEntity();
+                reportEntity.setSjbs("YH");
+                reportEntity.setJylx("10");
+                reportEntity.setSjscsj(date);
+                reportEntity.setDwdm(enterprise.getDlcompanycode());
+                reportEntity.setCjsbid(enterprise.getDeviceid());
+                reportEntity.setZjlx("1");
+                reportEntity.setZjhm(customerInfo.getIdcardnum());
+
+                List<TmsEntity>tmsEntities = new ArrayList<>();
+                for (SaleOrderDetailInfo detailInfo : detailInfos){
+                    TmsEntity tmsEntity = new TmsEntity(detailInfo.getDirectioncode(),date);
+                    tmsEntities.add(tmsEntity);
+                }
+                reportEntity.setTms(tmsEntities);
+                String xml = BeanUtils.beanToXml(reportEntity,ReportEntity.class);
+                //String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><sb><sjbs>YH</sjbs><jylx>03</jylx><sjscsj>20160203221055</sjscsj><dwdm>ADW000000008422</dwdm><cjsbid>ADW000000008422652722194006466</cjsbid><zjlx>1</zjlx><zjhm>220283198201021916</zjhm><tms><bh>11230I4WY0F62203824</bh><sj>20160114195153</sj></tms><tms><bh>11230I4WY0F62203819</bh><sj>20160114195153</sj></tms><tms><bh>11230I4WY0F62203822</bh><sj>20160114195153</sj></tms><tms><bh>11230I4WY0F62203826</bh><sj>20160114195153</sj></tms><tms><bh>11230I4WY0F62203820</bh><sj>20160114195153</sj></tms><tms><bh>11230I4WY0F62203823</bh><sj>20160114195153</sj></tms><tms><bh>11230I4WY0F62203818</bh><sj>20160114195153</sj></tms><tms><bh>11230I4WY0F62203817</bh><sj>20160114195153</sj></tms><tms><bh>11230I4WY0F62203821</bh><sj>20160114195153</sj></tms></sb>";
+                BASE64Encoder encoder = new BASE64Encoder();
+                //String str = encoder.encode(sb.toString().trim().getBytes("utf-8"));
+                String str = encoder.encode(xml.getBytes("UTF-8"));
+                String cjsbid = enterprise.getDeviceid();//设备ID
+                String dwdm = enterprise.getDlcompanycode();//单位代码
+                String wsmm = result.getWsmm();//握手密码
+                call = (Call) service.createCall();
+                call.setTargetEndpointAddress(servicesUrl);
+                call.setTimeout(5 * 60 * 1000);// 超时设定5分钟抛出异常
+                call.setOperationName("lssjsb");// 调用方法
+                call.setReturnType(XMLType.XSD_STRING);// 指定返回类型
+                call.addParameter("str", org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);// 接口的参数
+                call.addParameter("sbid", org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);// 接口的参数
+                call.addParameter("dwdm", org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);// 接口的参数
+                call.addParameter("wsmm", org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);// 接口的参数
+                String callResult = (String) call.invoke(new Object[] { str,cjsbid, dwdm,wsmm });// 调用服务并返回存在的对应数据
+                BASE64Decoder decoder = new BASE64Decoder();
+                String xmlCode = null;
+                try {
+                    xmlCode = new String(decoder.decodeBuffer(callResult));
+                    DlReportResult reportResult = (DlReportResult) BeanUtils.xmlToBean(xmlCode,DlReportResult.class);
+                    DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("yyyyMMddHHmmss");
+                    DateTime dateTime = dateTimeFormatter.parseDateTime(reportResult.getSjscsj());
+                    Date uploadAt = dateTime.toDate();
+                    orderInfo.setIsupload((byte)1);
+                    orderInfo.setUploadat(uploadAt);
+                    orderInfo.setReturncode(reportResult.getFhlx());
+                } catch (IOException e1) {
+                    e1.printStackTrace();
+                    orderInfo.setReturncode("999");
+                    orderInfo.setIsupload((byte)2);
+                }
+            } catch (Exception e) {
+                System.out.println("调用webservice失败!" + e.getMessage());
+                orderInfo.setReturncode("998");
+                orderInfo.setIsupload((byte)2);
+            }
+            saleOrderService.updateById(orderInfo);
+        }
+
+
+    }
+}
+
+class DlResult{
+    private String wsmm;
+    private String fwdz;
+
+    DlResult() {
+    }
+
+    public DlResult(String wsmm, String fwdz) {
+        this.wsmm = wsmm;
+        this.fwdz = fwdz;
+    }
+
+    public String getWsmm() {
+        return wsmm;
+    }
+
+    public void setWsmm(String wsmm) {
+        this.wsmm = wsmm;
+    }
+
+    public String getFwdz() {
+        return fwdz;
+    }
+
+    public void setFwdz(String fwdz) {
+        this.fwdz = fwdz;
+    }
+
+}
+
+@XmlRootElement(name="fh")
+class ReportEntity{
+    private String sjbs;
+    private String jylx;
+    private String sjscsj;
+    private String dwdm;
+    private String cjsbid;
+    private String zjlx;
+    private String zjhm;
+    private List<TmsEntity> tms;
+
+    public String getSjbs() {
+        return sjbs;
+    }
+
+    public void setSjbs(String sjbs) {
+        this.sjbs = sjbs;
+    }
+
+    public String getJylx() {
+        return jylx;
+    }
+
+    public void setJylx(String jylx) {
+        this.jylx = jylx;
+    }
+
+    public String getSjscsj() {
+        return sjscsj;
+    }
+
+    public void setSjscsj(String sjscsj) {
+        this.sjscsj = sjscsj;
+    }
+
+    public String getDwdm() {
+        return dwdm;
+    }
+
+    public void setDwdm(String dwdm) {
+        this.dwdm = dwdm;
+    }
+
+    public String getCjsbid() {
+        return cjsbid;
+    }
+
+    public void setCjsbid(String cjsbid) {
+        this.cjsbid = cjsbid;
+    }
+
+    public String getZjlx() {
+        return zjlx;
+    }
+
+    public void setZjlx(String zjlx) {
+        this.zjlx = zjlx;
+    }
+
+    public String getZjhm() {
+        return zjhm;
+    }
+
+    public void setZjhm(String zjhm) {
+        this.zjhm = zjhm;
+    }
+
+    @XmlElement(name="tms")
+    public List<TmsEntity> getTms() {
+        return tms;
+    }
+
+    public void setTms(List<TmsEntity> tms) {
+        this.tms = tms;
+    }
+}
+
+@XmlRootElement(name="tms")
+class TmsEntity{
+    private String bh;
+
+    private String sj;
+
+    public String getBh() {
+        return bh;
+    }
+
+    public void setBh(String bh) {
+        this.bh = bh;
+    }
+
+    public TmsEntity() {
+    }
+
+    public TmsEntity(String bh, String sj) {
+        this.bh = bh;
+        this.sj = sj;
+    }
+
+    public String getSj() {
+        return sj;
+    }
+
+    public void setSj(String sj) {
+        this.sj = sj;
+    }
+}
+
+@XmlRootElement(name="fh")
+class DlReportResult{
+    private String sjbs;
+
+    private String cjsbid;
+
+    private String sjscsj;
+
+    private String fhlx;
+
+    private String fhsj;
+
+    public String getSjbs() {
+        return sjbs;
+    }
+
+    public void setSjbs(String sjbs) {
+        this.sjbs = sjbs;
+    }
+
+    public String getCjsbid() {
+        return cjsbid;
+    }
+
+    public void setCjsbid(String cjsbid) {
+        this.cjsbid = cjsbid;
+    }
+
+    public String getSjscsj() {
+        return sjscsj;
+    }
+
+    public void setSjscsj(String sjscsj) {
+        this.sjscsj = sjscsj;
+    }
+
+    public String getFhlx() {
+        return fhlx;
+    }
+
+    public void setFhlx(String fhlx) {
+        this.fhlx = fhlx;
+    }
+
+    public String getFhsj() {
+        return fhsj;
+    }
+
+    public void setFhsj(String fhsj) {
+        this.fhsj = fhsj;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Scheduls/DealSoldNoStock/DealSoldNoStock.java b/src/main/java/com/gk/firework/Scheduls/DealSoldNoStock/DealSoldNoStock.java
new file mode 100644
index 0000000..c4d8972
--- /dev/null
+++ b/src/main/java/com/gk/firework/Scheduls/DealSoldNoStock/DealSoldNoStock.java
@@ -0,0 +1,55 @@
+package com.gk.firework.Scheduls.DealSoldNoStock;
+
+import com.gk.firework.Domain.Enterprise;
+import com.gk.firework.Domain.SoldNoStockInfo;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Scheduls.GenerateCode.GenerateCodeTask;
+import com.gk.firework.Service.EnterpriseService;
+import com.gk.firework.Service.EntryService;
+import com.gk.firework.Service.SoldNoStockService;
+import com.gk.firework.Service.UserService;
+import org.apache.log4j.LogManager;
+import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+import java.util.List;
+
+/**
+ * @author : jingjy
+ * @date : 2021/4/14 15:05
+ */
+@Configuration
+@EnableScheduling
+@ConditionalOnProperty(prefix = "scheduling",name = "enabled",havingValue = "true")
+public class DealSoldNoStock {
+    private Logger logger = LogManager.getLogger(GenerateCodeTask.class);
+    @Autowired
+    private SoldNoStockService soldNoStockService;
+    @Autowired
+    private EnterpriseService enterpriseService;
+    @Autowired
+    private EntryService entryService;
+    @Autowired
+    private UserService userService;
+
+    @Scheduled(cron = "0 0 3 * * ?")
+//    @Scheduled(cron = "0/5 * * * * ?") //每隔5秒执行一次
+    public void entryPatch(){
+
+        List<Enterprise>enterprises = enterpriseService.selectSaleEnterprise();
+        for (Enterprise enterprise : enterprises){
+            List<SoldNoStockInfo>soldNoStockInfos = soldNoStockService.selectSoldNoStocksUnprocessed(enterprise);
+            if (soldNoStockInfos.size() == 0){
+                continue;
+            }
+            UserInfo userInfo = userService.selectByUser(soldNoStockInfos.get(0).getSalesperson());
+            userInfo.setUsername("系统生成");
+            String auth = "EYXWRK";
+            entryService.entryPatch(soldNoStockInfos,userInfo, auth);
+        }
+    }
+}
diff --git a/src/main/java/com/gk/firework/Scheduls/GenerateCode/GenerateCodeTask.java b/src/main/java/com/gk/firework/Scheduls/GenerateCode/GenerateCodeTask.java
new file mode 100644
index 0000000..1c8c3b7
--- /dev/null
+++ b/src/main/java/com/gk/firework/Scheduls/GenerateCode/GenerateCodeTask.java
@@ -0,0 +1,129 @@
+package com.gk.firework.Scheduls.GenerateCode;
+
+import com.gk.firework.Domain.ContractLogInfo;
+import com.gk.firework.Domain.ContractOrderInfo;
+import com.gk.firework.Domain.ProductCodeInfo;
+import com.gk.firework.Domain.ProductLocusInfo;
+import com.gk.firework.Domain.Vo.ContractStatus;
+import com.gk.firework.Domain.Vo.GenerateCode;
+import com.gk.firework.Domain.Vo.ProductVo;
+import com.gk.firework.Service.*;
+import org.apache.log4j.LogManager;
+import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+import java.io.UnsupportedEncodingException;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+
+@Configuration
+@EnableScheduling
+@ConditionalOnProperty(prefix = "scheduling",name = "enabled",havingValue = "true")
+public class GenerateCodeTask {
+    private Logger logger = LogManager.getLogger(GenerateCodeTask.class);
+    @Autowired
+    ContractDetailService contractDetailService;
+    @Autowired
+    ContractOrderService contractOrderService;
+    @Autowired
+    ContractLogService contractLogService;
+    @Autowired
+    ProductService productService;
+    @Autowired
+    ProductCodeService productCodeService;
+    @Autowired
+    ProductLocusService productLocusService;
+
+
+    @Scheduled(cron = "0/5 * * * * ?") //每隔5秒执行一次
+    private void GenerateCode() throws Exception {
+        SimpleDateFormat sdfnow = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        List<ContractOrderInfo> orderInfoList = contractOrderService.selectByStatus(ContractStatus.Confirm_Product,sdfnow.format(new Date()));
+        for (ContractOrderInfo contractOrderInfo : orderInfoList) {
+            //生成电子标签号码
+            List<ProductVo> productVoList = contractDetailService.selectByOrder(contractOrderInfo.getOrdercode());
+            for (ProductVo productVo : productVoList) {
+                //查询最新的箱码
+                String directionCode = productVo.getDirectionCode();
+                String four = GenerateCode.generateProduct();
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+                ProductCodeInfo productCodeInfo = productCodeService.selectByFourteen(directionCode + four,sdf.format(new Date()));
+
+                List<ProductCodeInfo> productCodeInfoList = new ArrayList<>();
+                Date now = new Date();
+                for (int i = 0; i < productVo.getNum(); i++) {
+                    int serial = 1;
+                    if (productCodeInfoList.size() > 0){
+                        serial = Integer.parseInt(productCodeInfoList.get(productCodeInfoList.size()-1).getOriginalcode().substring(14,19))
+                                + productCodeInfoList.get(productCodeInfoList.size()-1).getBoxnumber();
+                    }else if (productCodeInfo != null) {
+                            serial = Integer.parseInt(productCodeInfo.getOriginalcode().substring(14,19))
+                                    + productCodeInfo.getBoxnumber();
+                    }
+                    String serialNum = String.format("%05d", serial);
+
+                    String boxNum = String.format("%03d", productVo.getBoxNumber());
+                    ProductCodeInfo productCode = new ProductCodeInfo();
+                    productCode.setOrdercode(contractOrderInfo.getOrdercode());
+                    productCode.setOriginalcode(directionCode + four + serialNum + boxNum);
+                    productCode.setItemname(productVo.getName());
+                    productCode.setManufacturer(productVo.getManufacturer());
+
+                    BigDecimal explosiveContent = productVo.getExplosiveContent();
+                    Integer boxNumber = productVo.getBoxNumber();
+                    BigDecimal sum = explosiveContent.multiply(new BigDecimal(boxNumber));
+                    if (sum.compareTo(new BigDecimal(1000)) > 0) {
+                        BigDecimal explosive = sum.divide(new BigDecimal(1000),2, RoundingMode.HALF_UP);
+                        productCode.setExplosivecontent(explosive + "kg");
+                    } else {
+                        productCode.setExplosivecontent(sum + "g");
+                    }
+                    productCode.setBoxnumber(productVo.getBoxNumber());
+                    productCode.setType(productVo.getType());
+                    productCode.setLevel(productVo.getLevel());
+                    productCode.setCreatedby("自动生成");
+                    productCode.setCreateddate(new Date());
+                    productCode.setPrice(productVo.getPrice());
+                    productCodeInfoList.add(productCode);
+                    //电子合同生成电子标签号插入流向轨迹表
+                    ProductLocusInfo productLocusInfo = new ProductLocusInfo();
+                    productLocusInfo.setDirectioncode(productCode.getOriginalcode());
+                    productLocusInfo.setCreateddate(now);
+                    productLocusInfo.setModifieddate(now);
+                    //生产单位
+                    productLocusInfo.setContent(productCode.getManufacturer());
+                    productLocusInfo.setType(ProductLocusInfo.ELECTRONIC_LABEL_STATUS);
+                    productLocusInfo.setBoxcode(Integer.valueOf(productCode.getOriginalcode().substring(19,22)).toString());
+                    productLocusService.insertProductLocus(productLocusInfo);
+                }
+                productCodeService.insertBatch(productCodeInfoList);
+            }
+
+            contractOrderInfo.setStatus(ContractStatus.Generated);
+            contractOrderInfo.setModifieddate(new Date());
+            contractOrderService.updateById(contractOrderInfo);
+
+            ContractLogInfo contractLogInfo = new ContractLogInfo();
+            contractLogInfo.setOptlog("生成电子标签");
+            contractLogInfo.setOperator("后台生成");
+            contractLogInfo.setOrdercode(contractOrderInfo.getOrdercode());
+            contractLogInfo.setOperatordate(new Date());
+            contractLogService.save(contractLogInfo);
+
+        }
+    }
+
+
+
+
+}
diff --git a/src/main/java/com/gk/firework/Scheduls/ReportTask/AsyncGetStockTask.java b/src/main/java/com/gk/firework/Scheduls/ReportTask/AsyncGetStockTask.java
new file mode 100644
index 0000000..7b2ca89
--- /dev/null
+++ b/src/main/java/com/gk/firework/Scheduls/ReportTask/AsyncGetStockTask.java
@@ -0,0 +1,31 @@
+package com.gk.firework.Scheduls.ReportTask;
+
+import com.gk.firework.Service.HistoryStockService;
+import com.gk.firework.Service.StockService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+/**
+ * @author : jingjy
+ * @date : 2022/1/29 15:39
+ */
+@Configuration
+@EnableScheduling
+@ConditionalOnProperty(prefix = "scheduling",name = "enabled",havingValue = "true")
+public class AsyncGetStockTask {
+
+    @Autowired
+    private StockService stockService;
+
+    @Scheduled(cron = "0 0/10 * * * ?") //每隔十分钟执行一次
+//    @Scheduled(cron = "0/10 * * * * ?") //每隔十秒执行一次
+    public void AsyncGetStock(){
+        //1.查询当前库存并插入staticStock
+        stockService.saveOrUpdateCurrentStock("系统更新");
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Scheduls/ReportTask/HistoryStockRobot.java b/src/main/java/com/gk/firework/Scheduls/ReportTask/HistoryStockRobot.java
new file mode 100644
index 0000000..72eabeb
--- /dev/null
+++ b/src/main/java/com/gk/firework/Scheduls/ReportTask/HistoryStockRobot.java
@@ -0,0 +1,28 @@
+package com.gk.firework.Scheduls.ReportTask;
+
+import com.gk.firework.Service.HistoryStockService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+
+@Configuration
+@EnableScheduling
+@ConditionalOnProperty(prefix = "historystock.robot",name = "enabled",havingValue = "true")
+public class HistoryStockRobot {
+
+
+    @Autowired
+    private HistoryStockService historyStockService;
+    /**
+     * @Description: 历史库存数据保留到新表-historystock
+     */
+    @Scheduled(cron = "0 0 4 * * ?")
+//    @Scheduled(cron = "0/20 * * * * ?")
+    public void hisStockPersisting() {
+        historyStockService.hisStockPersisting();
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Scheduls/Task/CheckEnterpriseTask.java b/src/main/java/com/gk/firework/Scheduls/Task/CheckEnterpriseTask.java
new file mode 100644
index 0000000..e923b15
--- /dev/null
+++ b/src/main/java/com/gk/firework/Scheduls/Task/CheckEnterpriseTask.java
@@ -0,0 +1,145 @@
+package com.gk.firework.Scheduls.Task;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.gk.firework.Config.WebSocket.WebSocketServer;
+import com.gk.firework.Domain.Enterprise;
+import com.gk.firework.Domain.EnterpriseLicense;
+import com.gk.firework.Domain.EnterprisePerson;
+import com.gk.firework.Domain.Enum.EnterpriseSafetySupervision;
+import com.gk.firework.Domain.Enum.MsgContentType;
+import com.gk.firework.Domain.Enum.MsgType;
+import com.gk.firework.Domain.Enum.PersonnelCategory;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.Message;
+import com.gk.firework.Domain.Utils.SpringBeanUtil;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Service.EnterpriseLicenseService;
+import com.gk.firework.Service.EnterprisePersonService;
+import com.gk.firework.Service.EnterpriseService;
+import lombok.SneakyThrows;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+
+import javax.websocket.Session;
+import java.util.ArrayList;
+import java.util.Date;
+
+@Component("task")
+@Scope("prototype")
+public class CheckEnterpriseTask implements Runnable{
+
+    final static Logger logger= LoggerFactory.getLogger(CheckEnterpriseTask.class);
+
+    private UserInfo userInfo;
+
+
+    public CheckEnterpriseTask(UserInfo userInfo) {
+        this.userInfo = userInfo;
+    }
+
+    @SneakyThrows
+    @Override
+    public void run() {
+        String companynumber = userInfo.getCompanynumber();
+        Long companyid = userInfo.getCompanyid();
+        //普通企业
+        if (StringUtils.isNotBlank(companynumber)) {
+            logger.info("正在执行:检查企业信息是否完善");
+            Enterprise enterprise = SpringBeanUtil.getBean(EnterpriseService.class).selectEnterpriseByNumber(companynumber);
+            Message message = new Message(MsgType.NOTIFICATION,MsgContentType.INFO_UNDONE,Boolean.FALSE);
+            ArrayList<String> msgs = new ArrayList<>();
+            if (!checkEnterprise(enterprise)) msgs.add("企业相关信息还未完善");
+            if (!checkEnterpriseLicense(companyid)) msgs.add("许可证信息还未完善");
+            if (!checkSafetyPerson(companyid)) msgs.add("安全人员信息还未完善");
+            //长期店、短期店不用特种人员
+            if (!checkSpecialPerson(companyid)
+                    && (enterprise.getSafetysupervision().equals(EnterpriseSafetySupervision.PRODUCE)
+                    || enterprise.getSafetysupervision().equals(EnterpriseSafetySupervision.WHOLESALER))
+            ) msgs.add("特种人员信息还未完善");
+            if (msgs.size() > 0){
+                message.setMessage(msgs.toString());
+                WebSocketServer.sendMessage(userInfo.getId(), JSONObject.toJSONString(message));
+            }
+
+            //检查许可证过期
+            logger.info("正在执行:检查企业许可证是否过期");
+            if (enterprise.getValidendtime().before(new Date())) {
+                Message message2 = new Message(MsgType.NOTIFICATION,MsgContentType.LICENSE_EXPIRED,Boolean.FALSE);
+                message2.setMessage("您的许可证已到期,请重新录入许可证期限并上传许可证");
+                WebSocketServer.sendMessage(userInfo.getId(), JSONObject.toJSONString(message2));
+            }
+        }
+        //监管部门
+        if (StringUtils.isBlank(companynumber)) {
+            //查找管辖的所有企业的信息未完善的
+            logger.info("正在执行:检查企业信息未完善个数");
+            int undoneEnterprise = SpringBeanUtil.getBean(EnterpriseService.class).countAllUndoneEnterprise(userInfo);
+            if (undoneEnterprise > 0) {
+                Message message = new Message(MsgType.NOTIFICATION, MsgContentType.INFO_UNDONE, Boolean.TRUE);
+                message.setMessage(String.format("共有%d个企业未完善企业相关信息",undoneEnterprise));
+                WebSocketServer.sendMessage(userInfo.getId(), JSONObject.toJSONString(message));
+            }
+
+            logger.info("正在执行:检查所有许可证过期企业");
+            int expiredEnterprise = SpringBeanUtil.getBean(EnterpriseService.class).countAllEnterpriseExpired(userInfo);
+            if (expiredEnterprise > 0) {
+                Message message = new Message(MsgType.NOTIFICATION, MsgContentType.LICENSE_EXPIRED, Boolean.TRUE);
+                message.setMessage(String.format("共有%d个企业许可证已过期",expiredEnterprise));
+                WebSocketServer.sendMessage(userInfo.getId(), JSONObject.toJSONString(message));
+            }
+
+        }
+        logger.info("结束执行");
+
+    }
+
+    //检查企业信息完整
+    private boolean checkEnterprise(Enterprise enterprise) {
+        boolean flag = true;
+        //小提示
+        if (StringUtils.isBlank(enterprise.getOfficeaddress())) {
+            flag = false;
+        }
+        return flag;
+    }
+
+    //检查许可证 有无
+    private boolean checkEnterpriseLicense(Long enterpriseid) {
+        LambdaQueryWrapper<EnterpriseLicense> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(EnterpriseLicense::getEnterpriseid, enterpriseid)
+                .eq(EnterpriseLicense::getValidflag, true);
+        int count = SpringBeanUtil.getBean(EnterpriseLicenseService.class).count(queryWrapper);
+        return count != 0;
+    }
+
+
+    //检查安全人员
+    private boolean checkSafetyPerson(Long enterpriseid) {
+        LambdaQueryWrapper<EnterprisePerson> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(EnterprisePerson::getEnterpriseid, enterpriseid)
+                .eq(EnterprisePerson::getValidflag, true)
+                .eq(EnterprisePerson::getType, PersonnelCategory.SECURITY);
+        int count = SpringBeanUtil.getBean(EnterprisePersonService.class).count(queryWrapper);
+        return count != 0;
+    }
+
+    //检查特种人员
+    private boolean checkSpecialPerson(Long enterpriseid) {
+        LambdaQueryWrapper<EnterprisePerson> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(EnterprisePerson::getEnterpriseid, enterpriseid)
+                .eq(EnterprisePerson::getValidflag, true)
+                .eq(EnterprisePerson::getType, PersonnelCategory.SPECIAL);
+        int count = SpringBeanUtil.getBean(EnterprisePersonService.class).count(queryWrapper);
+        return count != 0;
+    }
+
+
+
+
+
+}
diff --git a/src/main/java/com/gk/firework/Scheduls/Test.java b/src/main/java/com/gk/firework/Scheduls/Test.java
new file mode 100644
index 0000000..e671157
--- /dev/null
+++ b/src/main/java/com/gk/firework/Scheduls/Test.java
@@ -0,0 +1,239 @@
+package com.gk.firework.Scheduls;
+
+import com.alibaba.fastjson.JSONObject;
+import com.gk.firework.Domain.Enterprise;
+import com.gk.firework.Domain.ProductInfo;
+import com.gk.firework.Domain.Utils.HexUtil;
+import com.gk.firework.Domain.Utils.HttpUtils;
+import com.gk.firework.Domain.Utils.SignUtils;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Service.EnterpriseService;
+import com.gk.firework.Service.ProductService;
+import org.apache.log4j.Logger;
+import org.apache.log4j.LogManager;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.math.BigDecimal;
+import java.net.*;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+import static org.bouncycastle.asn1.bc.BCObjectIdentifiers.bc;
+
+
+@Configuration      //1.主要用于标记配置类,兼备Component的效果。
+@EnableScheduling   // 2.开启定时任务
+public class Test {
+    private Logger logger = LogManager.getLogger(Test.class);
+    @Autowired
+    ProductService productService;
+    @Autowired
+    EnterpriseService enterpriseService;
+    //3.添加定时任务
+//    @Scheduled(cron = "0/5 * * * * ?")
+    //或直接指定时间间隔,例如:5秒
+//    @Scheduled(fixedRate=10000)
+    private void SocketServerTest() throws IOException {
+        // 1:建立服务器端的tcp socket服务,必须监听一个端口
+        ServerSocket ss = new ServerSocket(80);
+        // 2: 通过服务器端的socket对象的accept方法获取连接上的客户端对象
+        Socket s = null;
+        // 3:获取客户端的数据
+        while (true) {
+            // 接受Socket服务,如果有,没有则堵塞,等待
+            s = ss.accept();
+
+            SocketAddress socketAddress = s.getRemoteSocketAddress();
+            if (socketAddress instanceof InetSocketAddress) {
+                InetAddress inetAddress = ((InetSocketAddress)socketAddress).getAddress();
+                if (inetAddress instanceof Inet4Address) {
+                    System.out.println("IPV4" + inetAddress);
+                }else if (inetAddress instanceof Inet6Address){
+                    System.out.println("IPV6" + inetAddress);
+                }else {
+                    System.out.println("NOT an IP address.");
+                }
+            }else {
+                System.out.println("Not an internet protocol socket");
+            }
+
+//            System.out.println("accept success.......");
+            try {
+                // 通过服务器端Socket输出流,写数据,会传送到客户端Socket输入流中
+                OutputStream out = s.getOutputStream();
+                String retunStr = "01 03 00 3D 00 01 15 C6";
+                out.write(HexUtil.hexStrToByteArrs(retunStr));
+
+                // 从Socekt输入流中获取客户端发送过来的输出流
+                InputStream in = s.getInputStream();
+                byte[] buf = new byte[20];
+                int len = in.read(buf);
+                logger.info("从客户端传送来的数据如下:"+HexUtil.bytesToHexString(buf));
+                String s3 = HexUtil.bytesToHexString(buf).substring(9,11);
+                String s4 = HexUtil.bytesToHexString(buf).substring(12,14);
+                int i = Integer.parseInt(s3+s4,16);
+                BigDecimal voltage = new BigDecimal(i).divide(new BigDecimal(10),2,BigDecimal.ROUND_HALF_UP);
+                System.out.println("实时电压:"+voltage);
+            } catch (Exception e) {
+                e.printStackTrace();
+            } finally {
+                s.close();
+            }
+        }
+    }
+
+//    @Scheduled(fixedRate=10000)
+    private void generateSingature(){
+        Map<String, String> params = new HashMap<>();
+        String privateKey = "";
+
+        privateKey = SignUtils.getNonceStr(10);
+        params.put("/api/sendmessage",SignUtils.getTimestamp());
+
+        String signature =  SignUtils.createSign(params,privateKey);
+        System.out.println("签名数据: "+signature);
+
+    }
+
+//    @Scheduled(cron = "0/5 * * * * ?")
+    private void TestTask() throws IOException {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
+        String msg1 =
+                "&lt;tr class='alt'&gt;&lt;th&gt;序号&lt;/th&gt;&lt;th&gt;产品名称&lt;/th&gt;&lt;th&gt;流向码&lt;/th&gt;&lt;th&gt;进价&lt;/th&gt;&lt;th&gt;售价&lt;/th&gt;&lt;th&gt;生产厂家&lt;/th&gt;&lt;th&gt;规格&lt;/th&gt;&lt;th&gt;含药量&lt;/th&gt;&lt;th&gt;类型&lt;/th&gt;&lt;th&gt;产品级别&lt;/th&gt;&lt;th&gt;生产日期&lt;/th&gt;&lt;th&gt;操作&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;QJX落地生花&lt;/td&gt;&lt;td&gt;1213B139A0&lt;/td&gt;&lt;td&gt;30.00&lt;/td&gt;&lt;td&gt;30.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;B1&lt;/td&gt;&lt;td&gt;90&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2021/2/15 20:01:19&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=c4357d6f-b497-4a12-9710-9b4567dfedc9'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"c4357d6f-b497-4a12-9710-9b4567dfedc9\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;JQX奇幻空间&lt;/td&gt;&lt;td&gt;1213Ay39A0&lt;/td&gt;&lt;td&gt;60.00&lt;/td&gt;&lt;td&gt;60.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;Ay&lt;/td&gt;&lt;td&gt;84&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2021/2/15 19:58:55&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=ba523750-f59c-4a7d-85ae-a22110fe4335'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"ba523750-f59c-4a7d-85ae-a22110fe4335\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;X晴天娃娃芭比娃娃&lt;/td&gt;&lt;td&gt;1213B539A0&lt;/td&gt;&lt;td&gt;120.00&lt;/td&gt;&lt;td&gt;120.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;B5&lt;/td&gt;&lt;td&gt;120&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2021/2/15 19:56:07&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=65c75693-7ae9-4470-b263-d0fbed864cd6'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"65c75693-7ae9-4470-b263-d0fbed864cd6\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;X萌萌哒么么哒&lt;/td&gt;&lt;td&gt;1213B739A0&lt;/td&gt;&lt;td&gt;70.00&lt;/td&gt;&lt;td&gt;70.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;B7&lt;/td&gt;&lt;td&gt;80&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2021/2/15 19:54:13&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=a378a1d4-1bbf-49b6-9dd8-f153f8f9e38c'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"a378a1d4-1bbf-49b6-9dd8-f153f8f9e38c\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;JQX劲舞组合&lt;/td&gt;&lt;td&gt;1213Az39A0&lt;/td&gt;&lt;td&gt;73.00&lt;/td&gt;&lt;td&gt;73.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;Az&lt;/td&gt;&lt;td&gt;80&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2021/2/15 19:51:52&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=1c17adae-6381-422c-b52d-9d9388a6c293'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"1c17adae-6381-422c-b52d-9d9388a6c293\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;X功夫熊猫青蛙王子&lt;/td&gt;&lt;td&gt;1213B639A0&lt;/td&gt;&lt;td&gt;110.00&lt;/td&gt;&lt;td&gt;110.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;B6&lt;/td&gt;&lt;td&gt;140&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2021/2/15 19:49:33&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=84bdcea9-7822-467e-9923-c2f6c5d906b7'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"84bdcea9-7822-467e-9923-c2f6c5d906b7\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;JQX魔力森林&lt;/td&gt;&lt;td&gt;1213B339A0&lt;/td&gt;&lt;td&gt;78.00&lt;/td&gt;&lt;td&gt;78.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;B3&lt;/td&gt;&lt;td&gt;140&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2021/2/15 19:46:36&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=9646c661-ab27-4a94-a475-96b9bf121f5f'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"9646c661-ab27-4a94-a475-96b9bf121f5f\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;JQX金银满地&lt;/td&gt;&lt;td&gt;1213B239A0&lt;/td&gt;&lt;td&gt;35.00&lt;/td&gt;&lt;td&gt;35.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;B2&lt;/td&gt;&lt;td&gt;90&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2021/2/15 19:44:05&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=060b7672-f474-450a-8104-ceda3a353bad'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"060b7672-f474-450a-8104-ceda3a353bad\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;蘑菇宝贝&lt;/td&gt;&lt;td&gt;12137r39A0&lt;/td&gt;&lt;td&gt;72.00&lt;/td&gt;&lt;td&gt;72.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;7r&lt;/td&gt;&lt;td&gt;135&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2021/2/14 19:41:28&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=6c971117-696a-49dc-9f53-6e8fb08dc1f8'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"6c971117-696a-49dc-9f53-6e8fb08dc1f8\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;海底世界&lt;/td&gt;&lt;td&gt;1213A239A0&lt;/td&gt;&lt;td&gt;73.00&lt;/td&gt;&lt;td&gt;73.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;A2&lt;/td&gt;&lt;td&gt;116&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2021/2/14 19:39:03&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=52c1a2eb-d8ba-412e-aa66-439cfc4a184c'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"52c1a2eb-d8ba-412e-aa66-439cfc4a184c\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;全家福&lt;/td&gt;&lt;td&gt;12131F1605&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;醴陵市富招花炮实业有限公司&lt;/td&gt;&lt;td&gt;1F&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;2021/2/1 22:05:12&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=28872120-b09b-4395-821e-ff66054a8b3a'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"28872120-b09b-4395-821e-ff66054a8b3a\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;JQ喜洋洋晨光花&lt;/td&gt;&lt;td&gt;1624Au39A0&lt;/td&gt;&lt;td&gt;30.00&lt;/td&gt;&lt;td&gt;30.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;Au&lt;/td&gt;&lt;td&gt;70&lt;/td&gt;&lt;td&gt;线香类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2021/1/20 13:53:10&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=8d595f06-7017-4bec-b0ac-2bab8cb9f0e0'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"8d595f06-7017-4bec-b0ac-2bab8cb9f0e0\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;牛年大吉&lt;/td&gt;&lt;td&gt;12134E9024&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;浏阳市熊猫烟花有限公司&lt;/td&gt;&lt;td&gt;4E&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;2021/1/17 10:30:48&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=daf634c0-1147-4086-bcf1-b232b50ce61c'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"daf634c0-1147-4086-bcf1-b232b50ce61c\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;14&lt;/td&gt;&lt;td&gt;恒达彩虹棒(大号)&lt;/td&gt;&lt;td&gt;16238I39A0&lt;/td&gt;&lt;td&gt;35.00&lt;/td&gt;&lt;td&gt;35.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;8I&lt;/td&gt;&lt;td&gt;34&lt;/td&gt;&lt;td&gt;线香类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2021/1/11 14:01:36&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=59651b48-6505-433f-bb9f-6b3d9aa793d1'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"59651b48-6505-433f-bb9f-6b3d9aa793d1\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;15&lt;/td&gt;&lt;td&gt;恒达彩虹棒(小号)&lt;/td&gt;&lt;td&gt;1623Ar39A0&lt;/td&gt;&lt;td&gt;35.00&lt;/td&gt;&lt;td&gt;35.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;Ar&lt;/td&gt;&lt;td&gt;55&lt;/td&gt;&lt;td&gt;线香类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2021/1/11 13:59:43&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=e6aa9c31-2eb4-400b-baff-99446d3b465a'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"e6aa9c31-2eb4-400b-baff-99446d3b465a\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;JQ喜洋洋晨光花&lt;/td&gt;&lt;td&gt;1624As39A0&lt;/td&gt;&lt;td&gt;30.00&lt;/td&gt;&lt;td&gt;30.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;As&lt;/td&gt;&lt;td&gt;70&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2021/1/11 13:57:04&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=3d27c7ed-cba9-4e79-bed7-493009b3628c'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"3d27c7ed-cba9-4e79-bed7-493009b3628c\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;17&lt;/td&gt;&lt;td&gt;HQ06欢庆大地红&lt;/td&gt;&lt;td&gt;11230y5C50&lt;/td&gt;&lt;td&gt;270.00&lt;/td&gt;&lt;td&gt;270.00&lt;/td&gt;&lt;td&gt;浏阳市瑞丰花炮厂&lt;/td&gt;&lt;td&gt;0y&lt;/td&gt;&lt;td&gt;320&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2021/1/11 11:15:56&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=6040380b-0960-4e6c-88d5-27a22ea4dc06'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"6040380b-0960-4e6c-88d5-27a22ea4dc06\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;18&lt;/td&gt;&lt;td&gt;HQ05欢庆大地红&lt;/td&gt;&lt;td&gt;11230x5C50&lt;/td&gt;&lt;td&gt;135.00&lt;/td&gt;&lt;td&gt;135.00&lt;/td&gt;&lt;td&gt;浏阳市瑞丰花炮厂&lt;/td&gt;&lt;td&gt;0x&lt;/td&gt;&lt;td&gt;180&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2021/1/11 11:14:00&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=19a57460-bdff-4ec2-b978-e8c86b39a943'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"19a57460-bdff-4ec2-b978-e8c86b39a943\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;19&lt;/td&gt;&lt;td&gt;HQ02欢庆大地红&lt;/td&gt;&lt;td&gt;1123165C50&lt;/td&gt;&lt;td&gt;54.00&lt;/td&gt;&lt;td&gt;54.00&lt;/td&gt;&lt;td&gt;浏阳市瑞丰花炮厂&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;78&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2021/1/10 22:26:56&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=944e2104-222e-4494-911f-0c3a2ec8b206'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"944e2104-222e-4494-911f-0c3a2ec8b206\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;666发烽火啸&lt;/td&gt;&lt;td&gt;1213015VJ0&lt;/td&gt;&lt;td&gt;380.00&lt;/td&gt;&lt;td&gt;380.00&lt;/td&gt;&lt;td&gt;东信烟花集团有限公司&lt;/td&gt;&lt;td&gt;01&lt;/td&gt;&lt;td&gt;432&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2021/1/7 18:18:44&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=608a6a74-e058-43fc-a207-7ac8f890d664'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"608a6a74-e058-43fc-a207-7ac8f890d664\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;21&lt;/td&gt;&lt;td&gt;年年得利&lt;/td&gt;&lt;td&gt;1213085VJ0&lt;/td&gt;&lt;td&gt;55.00&lt;/td&gt;&lt;td&gt;55.00&lt;/td&gt;&lt;td&gt;东信烟花集团有限公司&lt;/td&gt;&lt;td&gt;08&lt;/td&gt;&lt;td&gt;42&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2021/1/7 18:16:52&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=6f341c76-1294-410c-8a28-3a902aa6cdcb'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"6f341c76-1294-410c-8a28-3a902aa6cdcb\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;22&lt;/td&gt;&lt;td&gt;星光闪闪&lt;/td&gt;&lt;td&gt;1213095VJ0&lt;/td&gt;&lt;td&gt;100.00&lt;/td&gt;&lt;td&gt;100.00&lt;/td&gt;&lt;td&gt;东信烟花集团有限公司&lt;/td&gt;&lt;td&gt;09&lt;/td&gt;&lt;td&gt;52&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2021/1/7 18:15:35&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=fdac8f7c-9cfe-4866-9723-bd7f3ea96271'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"fdac8f7c-9cfe-4866-9723-bd7f3ea96271\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;23&lt;/td&gt;&lt;td&gt;超级海盗&lt;/td&gt;&lt;td&gt;1213065VJ0&lt;/td&gt;&lt;td&gt;35.00&lt;/td&gt;&lt;td&gt;35.00&lt;/td&gt;&lt;td&gt;东信烟花集团有限公司&lt;/td&gt;&lt;td&gt;06&lt;/td&gt;&lt;td&gt;28&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2021/1/7 18:14:20&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=7bcdc949-7043-4f74-a816-895a15d2ac36'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"7bcdc949-7043-4f74-a816-895a15d2ac36\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;方方进财&lt;/td&gt;&lt;td&gt;1213075VJ0&lt;/td&gt;&lt;td&gt;88.00&lt;/td&gt;&lt;td&gt;88.00&lt;/td&gt;&lt;td&gt;东信烟花集团有限公司&lt;/td&gt;&lt;td&gt;07&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2021/1/7 18:13:06&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=0ea51b09-6dc6-4389-83f9-d5f4efbf92dd'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"0ea51b09-6dc6-4389-83f9-d5f4efbf92dd\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;25&lt;/td&gt;&lt;td&gt;幸福百分百&lt;/td&gt;&lt;td&gt;12130A5VJ0&lt;/td&gt;&lt;td&gt;110.00&lt;/td&gt;&lt;td&gt;110.00&lt;/td&gt;&lt;td&gt;东信烟花集团有限公司&lt;/td&gt;&lt;td&gt;0A&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2021/1/7 18:11:26&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=8d7fbbba-c338-4072-8afa-9c426b48f139'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"8d7fbbba-c338-4072-8afa-9c426b48f139\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;26&lt;/td&gt;&lt;td&gt;孔雀之舞&lt;/td&gt;&lt;td&gt;12130B5VJ0&lt;/td&gt;&lt;td&gt;50.00&lt;/td&gt;&lt;td&gt;50.00&lt;/td&gt;&lt;td&gt;东信烟花集团有限公司&lt;/td&gt;&lt;td&gt;0B&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2021/1/7 18:10:12&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=0942c8e7-38d3-45f3-a5c0-10ab901b9ee9'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"0942c8e7-38d3-45f3-a5c0-10ab901b9ee9\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;27&lt;/td&gt;&lt;td&gt;1000发风暴战士&lt;/td&gt;&lt;td&gt;1213035VJ0&lt;/td&gt;&lt;td&gt;600.00&lt;/td&gt;&lt;td&gt;600.00&lt;/td&gt;&lt;td&gt;东信烟花集团有限公司&lt;/td&gt;&lt;td&gt;03&lt;/td&gt;&lt;td&gt;650&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2021/1/7 18:08:28&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=98565805-84f9-43bf-8259-47d971d939ca'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"98565805-84f9-43bf-8259-47d971d939ca\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;28&lt;/td&gt;&lt;td&gt;潮流时代&lt;/td&gt;&lt;td&gt;1213055VJ0&lt;/td&gt;&lt;td&gt;108.00&lt;/td&gt;&lt;td&gt;108.00&lt;/td&gt;&lt;td&gt;东信烟花集团有限公司&lt;/td&gt;&lt;td&gt;05&lt;/td&gt;&lt;td&gt;95&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2021/1/7 18:07:07&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=8ba21022-2b30-43a9-9252-d40cbbbd126a'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"8ba21022-2b30-43a9-9252-d40cbbbd126a\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;29&lt;/td&gt;&lt;td&gt;招财进宝(混装)&lt;/td&gt;&lt;td&gt;19232j55X0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;2j&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2021/1/6 21:27:46&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=cc94d0e3-55c4-4b9d-b4e7-de70c346eb3e'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"cc94d0e3-55c4-4b9d-b4e7-de70c346eb3e\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;30&lt;/td&gt;&lt;td&gt;JQ快乐联盟&lt;/td&gt;&lt;td&gt;1923Ap39A0&lt;/td&gt;&lt;td&gt;23.00&lt;/td&gt;&lt;td&gt;23.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;Ap&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2021/1/5 15:29:50&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=be7b3532-239a-4679-a8e7-f7df98a13ff3'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"be7b3532-239a-4679-a8e7-f7df98a13ff3\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;31&lt;/td&gt;&lt;td&gt;摩尔庄园、彩旋花&lt;/td&gt;&lt;td&gt;12132F39A0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;2F&lt;/td&gt;&lt;td&gt;150&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2021/1/5 13:53:41&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=39710ee6-a1bc-44b4-a453-8589e72fc429'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"39710ee6-a1bc-44b4-a453-8589e72fc429\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;32&lt;/td&gt;&lt;td&gt;JQ六星芒&lt;/td&gt;&lt;td&gt;1913An39A0&lt;/td&gt;&lt;td&gt;163.00&lt;/td&gt;&lt;td&gt;163.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;An&lt;/td&gt;&lt;td&gt;228&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/12/18 9:54:05&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=776fb717-053d-48d2-90ad-29aef5b4fa75'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"776fb717-053d-48d2-90ad-29aef5b4fa75\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;33&lt;/td&gt;&lt;td&gt;JQ笛音炫舞&lt;/td&gt;&lt;td&gt;1313Am39A0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;Am&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;旋转类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/12/17 9:29:59&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=d6d64c99-f0da-43fc-b545-a940341d2934'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"d6d64c99-f0da-43fc-b545-a940341d2934\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;34&lt;/td&gt;&lt;td&gt;1号欢庆高级大地红&lt;/td&gt;&lt;td&gt;11232d55X0&lt;/td&gt;&lt;td&gt;36.00&lt;/td&gt;&lt;td&gt;36.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;2d&lt;/td&gt;&lt;td&gt;45&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/12/10 21:21:13&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=86bd78d3-cd3b-4f13-a796-2dac1458eee9'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"86bd78d3-cd3b-4f13-a796-2dac1458eee9\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;35&lt;/td&gt;&lt;td&gt;2号欢庆高级大地红&lt;/td&gt;&lt;td&gt;11232e55X0&lt;/td&gt;&lt;td&gt;72.00&lt;/td&gt;&lt;td&gt;72.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;2e&lt;/td&gt;&lt;td&gt;90&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/12/10 21:19:34&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=ad6ecae7-f20f-4f6b-96cb-1035e75d5c0f'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"ad6ecae7-f20f-4f6b-96cb-1035e75d5c0f\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;36&lt;/td&gt;&lt;td&gt;5号欢庆高级大地红&lt;/td&gt;&lt;td&gt;11232f55X0&lt;/td&gt;&lt;td&gt;180.00&lt;/td&gt;&lt;td&gt;180.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;2f&lt;/td&gt;&lt;td&gt;220&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/12/10 21:17:24&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=4246d9e2-d4bb-4631-afa5-ade48916f6f5'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"4246d9e2-d4bb-4631-afa5-ade48916f6f5\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;37&lt;/td&gt;&lt;td&gt;6号欢庆高级大地红&lt;/td&gt;&lt;td&gt;11232g55X0&lt;/td&gt;&lt;td&gt;360.00&lt;/td&gt;&lt;td&gt;360.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;2g&lt;/td&gt;&lt;td&gt;400&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/12/10 21:15:27&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=c1e35900-3517-489b-b362-b33048e130ba'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"c1e35900-3517-489b-b362-b33048e130ba\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;38&lt;/td&gt;&lt;td&gt;JQ圣诞树&lt;/td&gt;&lt;td&gt;1213Al39A0&lt;/td&gt;&lt;td&gt;55.00&lt;/td&gt;&lt;td&gt;55.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;A1&lt;/td&gt;&lt;td&gt;84&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/12/10 9:33:42&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=58723d1d-85f2-4ed1-94a7-aa45aa4fcbc9'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"58723d1d-85f2-4ed1-94a7-aa45aa4fcbc9\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;39&lt;/td&gt;&lt;td&gt;5号欢庆高级大地红&lt;/td&gt;&lt;td&gt;11233h0520&lt;/td&gt;&lt;td&gt;180.00&lt;/td&gt;&lt;td&gt;180.00&lt;/td&gt;&lt;td&gt;湖南明义烟花集团有限公司&lt;/td&gt;&lt;td&gt;3h&lt;/td&gt;&lt;td&gt;220&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/12/9 13:33:46&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=836e6134-643f-489c-bfb6-fac5bf38ab8b'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"836e6134-643f-489c-bfb6-fac5bf38ab8b\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;40&lt;/td&gt;&lt;td&gt;太阳花&lt;/td&gt;&lt;td&gt;1213Aa39A0&lt;/td&gt;&lt;td&gt;40.00&lt;/td&gt;&lt;td&gt;40.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;Aa&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/12/7 16:11:04&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=9c4d1939-a10c-49fa-9e4a-2b9aad2de0a9'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"9c4d1939-a10c-49fa-9e4a-2b9aad2de0a9\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;41&lt;/td&gt;&lt;td&gt;满地珍珠&lt;/td&gt;&lt;td&gt;1213Aj39A0&lt;/td&gt;&lt;td&gt;50.00&lt;/td&gt;&lt;td&gt;50.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;Aj&lt;/td&gt;&lt;td&gt;130&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/12/6 18:22:34&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=dba740f0-4a62-4ee2-84e3-3617b3984274'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"dba740f0-4a62-4ee2-84e3-3617b3984274\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;42&lt;/td&gt;&lt;td&gt;2号欢庆高级大地红&lt;/td&gt;&lt;td&gt;11233i0520&lt;/td&gt;&lt;td&gt;72.00&lt;/td&gt;&lt;td&gt;72.00&lt;/td&gt;&lt;td&gt;湖南明义烟花集团有限公司&lt;/td&gt;&lt;td&gt;3i&lt;/td&gt;&lt;td&gt;90&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/12/6 12:55:05&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=c431fb12-e73f-431f-ad58-5bed4f0f8cb2'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"c431fb12-e73f-431f-ad58-5bed4f0f8cb2\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;43&lt;/td&gt;&lt;td&gt;萌宝兄弟&lt;/td&gt;&lt;td&gt;1213Af39A0&lt;/td&gt;&lt;td&gt;43.00&lt;/td&gt;&lt;td&gt;43.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;01&lt;/td&gt;&lt;td&gt;45g&lt;/td&gt;&lt;td&gt;玩具类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/12/5 19:31:33&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=ecd15eff-b917-4a13-b393-051a9fd71d4b'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"ecd15eff-b917-4a13-b393-051a9fd71d4b\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;44&lt;/td&gt;&lt;td&gt;太空飞船&lt;/td&gt;&lt;td&gt;1213AY39A0&lt;/td&gt;&lt;td&gt;55.00&lt;/td&gt;&lt;td&gt;55.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;AY&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/12/5 16:16:15&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=4261c19e-89dd-42f6-8303-a351fd85f70e'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"4261c19e-89dd-42f6-8303-a351fd85f70e\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;45&lt;/td&gt;&lt;td&gt;萌宝兄弟&lt;/td&gt;&lt;td&gt;1213Af39A0&lt;/td&gt;&lt;td&gt;43.00&lt;/td&gt;&lt;td&gt;43.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;Af&lt;/td&gt;&lt;td&gt;45&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/12/5 15:32:02&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=ebc3d05c-5a73-42c6-9ce9-5262ab12eccd'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"ebc3d05c-5a73-42c6-9ce9-5262ab12eccd\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;46&lt;/td&gt;&lt;td&gt;百变星辰&lt;/td&gt;&lt;td&gt;1313Ag39A0&lt;/td&gt;&lt;td&gt;33.00&lt;/td&gt;&lt;td&gt;33.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;Ag&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;旋转类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/12/5 12:32:44&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=f160abae-5056-4843-b846-277072a393e3'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"f160abae-5056-4843-b846-277072a393e3\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;47&lt;/td&gt;&lt;td&gt;斯巴达勇士&lt;/td&gt;&lt;td&gt;1213AX39A0&lt;/td&gt;&lt;td&gt;155.00&lt;/td&gt;&lt;td&gt;155.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;AX&lt;/td&gt;&lt;td&gt;200&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/12/3 12:27:52&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=d7da4f35-a336-4a96-800f-43593f5519d5'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"d7da4f35-a336-4a96-800f-43593f5519d5\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;48&lt;/td&gt;&lt;td&gt;百变花筒&lt;/td&gt;&lt;td&gt;1213AW39A0&lt;/td&gt;&lt;td&gt;105.00&lt;/td&gt;&lt;td&gt;105.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;AW&lt;/td&gt;&lt;td&gt;150&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/12/3 9:24:13&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=7928789b-5839-4cb9-95e4-8ee85149963b'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"7928789b-5839-4cb9-95e4-8ee85149963b\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;120八方来财&lt;/td&gt;&lt;td&gt;19132155X0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;21&lt;/td&gt;&lt;td&gt;720&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/12/2 16:56:56&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=0f98f446-a22d-4e70-82e3-d10a3dac4c5c'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"0f98f446-a22d-4e70-82e3-d10a3dac4c5c\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;JQ满地红光&lt;/td&gt;&lt;td&gt;1323Ak39A0&lt;/td&gt;&lt;td&gt;40.00&lt;/td&gt;&lt;td&gt;40.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;Ak&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;旋转类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/12/1 14:05:32&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=0ea18fef-f217-4daa-9a88-8db4cce05faf'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"0ea18fef-f217-4daa-9a88-8db4cce05faf\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;51&lt;/td&gt;&lt;td&gt;JQ熊猫喷泉&lt;/td&gt;&lt;td&gt;12149b39A0&lt;/td&gt;&lt;td&gt;30.00&lt;/td&gt;&lt;td&gt;30.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;9b&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/12/1 13:46:51&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=d03a7dcf-a631-4060-a329-8f0ea25a31f3'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"d03a7dcf-a631-4060-a329-8f0ea25a31f3\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;52&lt;/td&gt;&lt;td&gt;JQ熊猫喷泉&lt;/td&gt;&lt;td&gt;12149b39A0&lt;/td&gt;&lt;td&gt;30.00&lt;/td&gt;&lt;td&gt;30.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;9b&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/12/1 9:39:20&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=c5ef9860-d721-4f12-afc6-1894a4b85660'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"c5ef9860-d721-4f12-afc6-1894a4b85660\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;53&lt;/td&gt;&lt;td&gt;6号欢庆高级大地红&lt;/td&gt;&lt;td&gt;11233P0520&lt;/td&gt;&lt;td&gt;360.00&lt;/td&gt;&lt;td&gt;360.00&lt;/td&gt;&lt;td&gt;湖南明义烟花集团有限公司&lt;/td&gt;&lt;td&gt;3P&lt;/td&gt;&lt;td&gt;425&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/11/30 13:36:32&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=b79a07d1-e0b0-4df4-8283-8f740000cd91'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"b79a07d1-e0b0-4df4-8283-8f740000cd91\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;54&lt;/td&gt;&lt;td&gt;1号欢庆高级大地红&lt;/td&gt;&lt;td&gt;11233N0520&lt;/td&gt;&lt;td&gt;36.00&lt;/td&gt;&lt;td&gt;36.00&lt;/td&gt;&lt;td&gt;湖南明义烟花集团有限公司&lt;/td&gt;&lt;td&gt;3N&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/11/26 13:34:17&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=3abd2899-ec64-4ecc-8466-3b4c3e7c7c9c'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"3abd2899-ec64-4ecc-8466-3b4c3e7c7c9c\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;55&lt;/td&gt;&lt;td&gt;牛气冲天福满门&lt;/td&gt;&lt;td&gt;12134D9024&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;浏阳市熊猫烟花有限公司&lt;/td&gt;&lt;td&gt;4D&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;2020/11/6 15:25:54&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=b6ebbc4f-027f-4f62-92e5-f88fded0389b'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"b6ebbc4f-027f-4f62-92e5-f88fded0389b\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;56&lt;/td&gt;&lt;td&gt;金牛纳福&lt;/td&gt;&lt;td&gt;12134A9024&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;浏阳市熊猫烟花有限公司&lt;/td&gt;&lt;td&gt;4A&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;2020/11/6 15:24:35&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=0a00d7ab-2982-41d4-bd14-12611132744d'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"0a00d7ab-2982-41d4-bd14-12611132744d\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;57&lt;/td&gt;&lt;td&gt;福喜高照全家福&lt;/td&gt;&lt;td&gt;12134B9024&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;浏阳市熊猫烟花有限公司&lt;/td&gt;&lt;td&gt;4B&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;2020/11/6 15:21:05&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=7efed026-2dfe-432d-af61-b3ddd2e30838'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"7efed026-2dfe-432d-af61-b3ddd2e30838\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;58&lt;/td&gt;&lt;td&gt;吉星高照  抬头见喜&lt;/td&gt;&lt;td&gt;12134C9024&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;浏阳市熊猫烟花有限公司&lt;/td&gt;&lt;td&gt;4C&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;2020/11/6 15:19:29&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=ab8d0e82-337a-4ec1-aac5-fc4f5b988295'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"ab8d0e82-337a-4ec1-aac5-fc4f5b988295\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;59&lt;/td&gt;&lt;td&gt;100万事如意&lt;/td&gt;&lt;td&gt;1913P323A0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;浏阳市榜山烟花制造有限公司&lt;/td&gt;&lt;td&gt;P3&lt;/td&gt;&lt;td&gt;800&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/11/6 13:40:30&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=12de87c2-465e-459a-b633-a9a587c10b2c'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"12de87c2-465e-459a-b633-a9a587c10b2c\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;60&lt;/td&gt;&lt;td&gt;100欢欢喜喜&lt;/td&gt;&lt;td&gt;1913P123A0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;浏阳市榜山烟花制造有限公司&lt;/td&gt;&lt;td&gt;P1&lt;/td&gt;&lt;td&gt;800&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/11/6 13:39:26&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=bd344643-c70d-442d-9a3b-8b282bbe46d5'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"bd344643-c70d-442d-9a3b-8b282bbe46d5\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;61&lt;/td&gt;&lt;td&gt;100红红火火&lt;/td&gt;&lt;td&gt;1913P023A0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;浏阳市榜山烟花制造有限公司&lt;/td&gt;&lt;td&gt;P0&lt;/td&gt;&lt;td&gt;800&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/11/6 13:37:57&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=a77003dd-6e2e-4f61-8418-e20878dd7fc2'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"a77003dd-6e2e-4f61-8418-e20878dd7fc2\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;62&lt;/td&gt;&lt;td&gt;100恭喜发财&lt;/td&gt;&lt;td&gt;1913P223A0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;浏阳市榜山烟花制造有限公司&lt;/td&gt;&lt;td&gt;P2&lt;/td&gt;&lt;td&gt;800&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/11/6 13:36:14&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=100ff541-4297-4297-b538-96363793b364'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"100ff541-4297-4297-b538-96363793b364\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;63&lt;/td&gt;&lt;td&gt;100瑞雪丰年&lt;/td&gt;&lt;td&gt;1913Nx23A0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;浏阳市榜山烟花制造有限公司&lt;/td&gt;&lt;td&gt;Nx&lt;/td&gt;&lt;td&gt;1100&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/11/6 13:34:47&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=862ab045-b119-46b0-b1e6-d771437490de'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"862ab045-b119-46b0-b1e6-d771437490de\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;64&lt;/td&gt;&lt;td&gt;88百花盛开系列&lt;/td&gt;&lt;td&gt;1913Nz23A0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;浏阳市榜山烟花制造有限公司&lt;/td&gt;&lt;td&gt;Nz&lt;/td&gt;&lt;td&gt;880&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/11/6 13:33:02&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=a43f3aca-2291-48bf-935f-bf39dcc0bb27'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"a43f3aca-2291-48bf-935f-bf39dcc0bb27\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;65&lt;/td&gt;&lt;td&gt;60瑞雪丰年&lt;/td&gt;&lt;td&gt;1913Nw23A0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;浏阳市榜山烟花制造有限公司&lt;/td&gt;&lt;td&gt;Nw&lt;/td&gt;&lt;td&gt;660&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/11/6 13:31:17&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=4e2cbbbd-e6a8-4817-b251-c2c8d476b0ac'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"4e2cbbbd-e6a8-4817-b251-c2c8d476b0ac\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;66&lt;/td&gt;&lt;td&gt;36百花盛开系列&lt;/td&gt;&lt;td&gt;1913Ny23A0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;浏阳市榜山烟花制造有限公司&lt;/td&gt;&lt;td&gt;Ny&lt;/td&gt;&lt;td&gt;360&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/11/6 13:29:20&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=aa29f7a3-4aa0-45f4-a272-76492061f3d3'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"aa29f7a3-4aa0-45f4-a272-76492061f3d3\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;67&lt;/td&gt;&lt;td&gt;15金丝雨&lt;/td&gt;&lt;td&gt;1913P423A0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;浏阳市榜山烟花制造有限公司&lt;/td&gt;&lt;td&gt;P4&lt;/td&gt;&lt;td&gt;120&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/11/6 13:26:26&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=365d0b5c-8cc9-4157-ba4c-86a09e23070f'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"365d0b5c-8cc9-4157-ba4c-86a09e23070f\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;68&lt;/td&gt;&lt;td&gt;JQ七彩冰淇淋&lt;/td&gt;&lt;td&gt;12134B39A0&lt;/td&gt;&lt;td&gt;80.00&lt;/td&gt;&lt;td&gt;80.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;4B&lt;/td&gt;&lt;td&gt;40&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/11/6 9:36:19&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=84939f96-050d-4eef-a1e9-17b134117953'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"84939f96-050d-4eef-a1e9-17b134117953\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;69&lt;/td&gt;&lt;td&gt;小飞侠&lt;/td&gt;&lt;td&gt;16132T55X0&lt;/td&gt;&lt;td&gt;50.00&lt;/td&gt;&lt;td&gt;50.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;2T&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/10/23 18:31:38&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=f8f4c6f2-9565-4294-89cf-af552036b04f'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\"f8f4c6f2-9565-4294-89cf-af552036b04f\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;70&lt;/td&gt;&lt;td&gt;零售店退货商品&lt;/td&gt;&lt;td&gt;19232c55X0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;2c&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/10/19 13:34:40&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=b22ef886-3062-4f2d-95de-adb1383ab094'&gt;修改";
+
+        String msg2 = "&lt;/a&gt;&lt;a href='javascript:deletesp(\\\"b22ef886-3062-4f2d-95de-adb1383ab094\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;71&lt;/td&gt;&lt;td&gt;喜气洋洋大地红&lt;/td&gt;&lt;td&gt;11235P0CX0&lt;/td&gt;&lt;td&gt;135.00&lt;/td&gt;&lt;td&gt;135.00&lt;/td&gt;&lt;td&gt;萍乡市金泰花炮厂&lt;/td&gt;&lt;td&gt;P0&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/5/21 12:49:55&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=7d228b86-115c-401b-b91f-3310f10d97bf'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"7d228b86-115c-401b-b91f-3310f10d97bf\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;72&lt;/td&gt;&lt;td&gt;吉祥如意大地红&lt;/td&gt;&lt;td&gt;11235Q0CX0&lt;/td&gt;&lt;td&gt;270.00&lt;/td&gt;&lt;td&gt;270.00&lt;/td&gt;&lt;td&gt;\\t萍乡市金泰花炮厂&lt;/td&gt;&lt;td&gt;Q0&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/5/21 12:48:15&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=95b2cbea-137f-4bfa-a47f-1e79b45ebaba'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"95b2cbea-137f-4bfa-a47f-1e79b45ebaba\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;73&lt;/td&gt;&lt;td&gt;欢乐今宵混装&lt;/td&gt;&lt;td&gt;19232355X0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;23&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2020/1/6 1:26:25&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=c2ca06a8-f1f2-49ff-8c3d-21ee9268171b'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"c2ca06a8-f1f2-49ff-8c3d-21ee9268171b\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;74&lt;/td&gt;&lt;td&gt;快乐联盟&lt;/td&gt;&lt;td&gt;1923AV39A0&lt;/td&gt;&lt;td&gt;23.00&lt;/td&gt;&lt;td&gt;23.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;AV&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/12/24 22:39:13&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=b2f13c5b-8aa2-4713-b8d9-90788166dedd'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"b2f13c5b-8aa2-4713-b8d9-90788166dedd\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;75&lt;/td&gt;&lt;td&gt;喜气洋洋&lt;/td&gt;&lt;td&gt;19232455X0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;浏阳市美丹出口花炮厂&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/12/24 12:13:04&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=c061af79-8b9c-4521-8e81-b01ccda2669e'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"c061af79-8b9c-4521-8e81-b01ccda2669e\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;76&lt;/td&gt;&lt;td&gt;招财进宝&lt;/td&gt;&lt;td&gt;19231z55X0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;浏阳市美丹出口花炮厂&lt;/td&gt;&lt;td&gt;1z&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/12/24 12:09:06&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=f5dc627e-b3fe-46f3-9d70-500463787c16'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"f5dc627e-b3fe-46f3-9d70-500463787c16\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;77&lt;/td&gt;&lt;td&gt;精彩十刻&lt;/td&gt;&lt;td&gt;1913AU39A0&lt;/td&gt;&lt;td&gt;75.00&lt;/td&gt;&lt;td&gt;75.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;AU&lt;/td&gt;&lt;td&gt;150&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/12/20 23:03:57&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=dc6345db-6ba0-44b5-961f-37dae7a405e4'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"dc6345db-6ba0-44b5-961f-37dae7a405e4\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;78&lt;/td&gt;&lt;td&gt;快乐米奇&lt;/td&gt;&lt;td&gt;1624AF39A0&lt;/td&gt;&lt;td&gt;25.00&lt;/td&gt;&lt;td&gt;25.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;AF&lt;/td&gt;&lt;td&gt;25&lt;/td&gt;&lt;td&gt;线香类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/12/4 23:00:18&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=347e1118-0205-40f5-8327-b63bb3d1811c'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"347e1118-0205-40f5-8327-b63bb3d1811c\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;79&lt;/td&gt;&lt;td&gt;小松鼠混装&lt;/td&gt;&lt;td&gt;13239Y39A0&lt;/td&gt;&lt;td&gt;23.00&lt;/td&gt;&lt;td&gt;23.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;9Y&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;旋转类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/12/3 23:05:22&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=d89b8020-2d26-45ff-b861-9c0ec427db2a'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"d89b8020-2d26-45ff-b861-9c0ec427db2a\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;80&lt;/td&gt;&lt;td&gt;快乐手枪&lt;/td&gt;&lt;td&gt;1223AL39A0&lt;/td&gt;&lt;td&gt;25.00&lt;/td&gt;&lt;td&gt;25.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;AL&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/12/3 17:33:22&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=2600eef6-599a-4036-9813-5d2d8a2169f8'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"2600eef6-599a-4036-9813-5d2d8a2169f8\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;81&lt;/td&gt;&lt;td&gt;孔雀公主&lt;/td&gt;&lt;td&gt;1213AM39A0&lt;/td&gt;&lt;td&gt;110.00&lt;/td&gt;&lt;td&gt;110.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;AM&lt;/td&gt;&lt;td&gt;120&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/12/3 17:30:16&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=82b91eab-cb7a-403a-8dba-d27a0937b9cc'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"82b91eab-cb7a-403a-8dba-d27a0937b9cc\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;82&lt;/td&gt;&lt;td&gt;疯狂赛车&lt;/td&gt;&lt;td&gt;1323AN39A0&lt;/td&gt;&lt;td&gt;55.00&lt;/td&gt;&lt;td&gt;55.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;AN&lt;/td&gt;&lt;td&gt;15&lt;/td&gt;&lt;td&gt;旋转类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/12/3 17:26:30&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=8c586528-bc70-444d-a940-96f16c96c24c'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"8c586528-bc70-444d-a940-96f16c96c24c\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;83&lt;/td&gt;&lt;td&gt;万事如意&lt;/td&gt;&lt;td&gt;1123Ly0260&lt;/td&gt;&lt;td&gt;75.00&lt;/td&gt;&lt;td&gt;75.00&lt;/td&gt;&lt;td&gt;东信烟花集团有限公司&lt;/td&gt;&lt;td&gt;Ly&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/12/3 15:07:09&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=c6e6743e-3b4d-445a-b235-dca9c24d71c9'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"c6e6743e-3b4d-445a-b235-dca9c24d71c9\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;84&lt;/td&gt;&lt;td&gt;宝贝e家 萌萌兔&lt;/td&gt;&lt;td&gt;1213AK39A0&lt;/td&gt;&lt;td&gt;50.00&lt;/td&gt;&lt;td&gt;50.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;AK&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/12/1 17:35:08&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=8a54a940-5e89-4e1b-8c0e-ba3a292e0808'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"8a54a940-5e89-4e1b-8c0e-ba3a292e0808\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;85&lt;/td&gt;&lt;td&gt;金光闪闪 银光闪闪&lt;/td&gt;&lt;td&gt;1213AG39A0&lt;/td&gt;&lt;td&gt;40.00&lt;/td&gt;&lt;td&gt;40.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;AG&lt;/td&gt;&lt;td&gt;48&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/12/1 17:31:53&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=5c702056-8142-4bcb-8f30-6685a5777743'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"5c702056-8142-4bcb-8f30-6685a5777743\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;86&lt;/td&gt;&lt;td&gt;万事如意高级大地红&lt;/td&gt;&lt;td&gt;11232L20H0&lt;/td&gt;&lt;td&gt;75.00&lt;/td&gt;&lt;td&gt;75.00&lt;/td&gt;&lt;td&gt;江西省上栗县燕安出口烟花爆竹制造有限公司&lt;/td&gt;&lt;td&gt;2L&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/12/1 16:51:36&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=cb65baf9-f57e-4353-919f-bbe5ee39600d'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"cb65baf9-f57e-4353-919f-bbe5ee39600d\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;87&lt;/td&gt;&lt;td&gt;太阳花&lt;/td&gt;&lt;td&gt;1213AJ39A0&lt;/td&gt;&lt;td&gt;40.00&lt;/td&gt;&lt;td&gt;40.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;AJ&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/12/1 16:15:08&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=8bd2f8be-0ca7-48c3-b5fa-aa5babfb6b29'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"8bd2f8be-0ca7-48c3-b5fa-aa5babfb6b29\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;88&lt;/td&gt;&lt;td&gt;喷花雪景&lt;/td&gt;&lt;td&gt;1214BC2L00&lt;/td&gt;&lt;td&gt;880.00&lt;/td&gt;&lt;td&gt;880.00&lt;/td&gt;&lt;td&gt;浏阳市喜柏出口烟花制造有限公司&lt;/td&gt;&lt;td&gt;BC&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;旋转类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/30 15:32:21&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=c172e4cc-d963-4145-9951-10271df8b669'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"c172e4cc-d963-4145-9951-10271df8b669\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;89&lt;/td&gt;&lt;td&gt;十全十美&lt;/td&gt;&lt;td&gt;1214BD2L00&lt;/td&gt;&lt;td&gt;280.00&lt;/td&gt;&lt;td&gt;280.00&lt;/td&gt;&lt;td&gt;浏阳市喜柏出口烟花制造有限公司&lt;/td&gt;&lt;td&gt;BD&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/30 15:30:40&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=8cff4434-1df3-4c07-8306-dffa1a39eed7'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"8cff4434-1df3-4c07-8306-dffa1a39eed7\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;90&lt;/td&gt;&lt;td&gt;烟花天使&lt;/td&gt;&lt;td&gt;1214BB2L00&lt;/td&gt;&lt;td&gt;145.00&lt;/td&gt;&lt;td&gt;145.00&lt;/td&gt;&lt;td&gt;浏阳市喜柏出口烟花制造有限公司&lt;/td&gt;&lt;td&gt;BB&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/30 15:29:19&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=742f5f2d-0704-4fbb-b2a1-d32df35390d0'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"742f5f2d-0704-4fbb-b2a1-d32df35390d0\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;91&lt;/td&gt;&lt;td&gt;飓风战神&lt;/td&gt;&lt;td&gt;1313BG2L00&lt;/td&gt;&lt;td&gt;25.00&lt;/td&gt;&lt;td&gt;25.00&lt;/td&gt;&lt;td&gt;浏阳市喜柏出口烟花制造有限公司&lt;/td&gt;&lt;td&gt;BG&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;旋转类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/30 15:27:55&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=158aaeb6-9ed6-4b8b-a8af-ef4a8f5e3b82'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"158aaeb6-9ed6-4b8b-a8af-ef4a8f5e3b82\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;92&lt;/td&gt;&lt;td&gt;四朵金花&lt;/td&gt;&lt;td&gt;1214BA2L00&lt;/td&gt;&lt;td&gt;68.00&lt;/td&gt;&lt;td&gt;68.00&lt;/td&gt;&lt;td&gt;浏阳市喜柏出口烟花制造有限公司&lt;/td&gt;&lt;td&gt;BA&lt;/td&gt;&lt;td&gt;40&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/30 15:25:54&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=7c4b665e-eccc-4c4f-85ad-d1ccd5cee3a2'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"7c4b665e-eccc-4c4f-85ad-d1ccd5cee3a2\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;93&lt;/td&gt;&lt;td&gt;看我七十二变&lt;/td&gt;&lt;td&gt;1214BF2L00&lt;/td&gt;&lt;td&gt;110.00&lt;/td&gt;&lt;td&gt;110.00&lt;/td&gt;&lt;td&gt;浏阳市喜柏出口烟花制造有限公司&lt;/td&gt;&lt;td&gt;BF&lt;/td&gt;&lt;td&gt;30&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/30 15:24:19&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=5cda808a-2e9d-4fac-90d7-5cf31a7bb2f1'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"5cda808a-2e9d-4fac-90d7-5cf31a7bb2f1\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;94&lt;/td&gt;&lt;td&gt;红玫瑰(小)&lt;/td&gt;&lt;td&gt;12130S39A0&lt;/td&gt;&lt;td&gt;50.00&lt;/td&gt;&lt;td&gt;50.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;0S&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/29 23:01:56&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=d5010b48-cd36-4309-a78e-754eb1701877'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"d5010b48-cd36-4309-a78e-754eb1701877\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;95&lt;/td&gt;&lt;td&gt;功夫熊猫 青蛙王子&lt;/td&gt;&lt;td&gt;1913AI39A0&lt;/td&gt;&lt;td&gt;110.00&lt;/td&gt;&lt;td&gt;110.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;AI&lt;/td&gt;&lt;td&gt;140&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/29 22:45:12&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=f67804d8-79fa-4639-9016-6363660cde73'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"f67804d8-79fa-4639-9016-6363660cde73\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;96&lt;/td&gt;&lt;td&gt;满地红光&lt;/td&gt;&lt;td&gt;1323AH39A0&lt;/td&gt;&lt;td&gt;40.00&lt;/td&gt;&lt;td&gt;40.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;AH&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;旋转类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/29 17:38:19&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=049e166e-8f50-4cbb-ade4-bd686e882c33'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"049e166e-8f50-4cbb-ade4-bd686e882c33\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;97&lt;/td&gt;&lt;td&gt;富贵满堂高级大地红&lt;/td&gt;&lt;td&gt;11232P20H0&lt;/td&gt;&lt;td&gt;380.00&lt;/td&gt;&lt;td&gt;380.00&lt;/td&gt;&lt;td&gt;江西省上栗县燕安出口烟花爆竹制造有限公司&lt;/td&gt;&lt;td&gt;2P&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/28 16:55:01&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=0ec9d4d0-efbd-459f-b768-a7b3ff9a99ff'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"0ec9d4d0-efbd-459f-b768-a7b3ff9a99ff\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;98&lt;/td&gt;&lt;td&gt;大黄蜂&lt;/td&gt;&lt;td&gt;1613cs9024&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;浏阳市熊猫烟花有限公司&lt;/td&gt;&lt;td&gt;cs&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;造型玩具类&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;2019/11/27 11:34:36&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=40e0bac1-a9fa-4894-8529-ce6e636c11a3'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"40e0bac1-a9fa-4894-8529-ce6e636c11a3\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;99&lt;/td&gt;&lt;td&gt;摩登丑小鸭&lt;/td&gt;&lt;td&gt;1614cr9024&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;浏阳市熊猫烟花有限公司&lt;/td&gt;&lt;td&gt;cr&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;造型玩具类&lt;/td&gt;&lt;td&gt;D&lt;/td&gt;&lt;td&gt;2019/11/27 11:33:32&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=995d46de-017b-4cfc-aa35-253640b39ede'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"995d46de-017b-4cfc-aa35-253640b39ede\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;骄傲的大公鸡&lt;/td&gt;&lt;td&gt;1614cq9024&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;浏阳市熊猫烟花有限公司&lt;/td&gt;&lt;td&gt;cq&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;造型玩具类&lt;/td&gt;&lt;td&gt;D&lt;/td&gt;&lt;td&gt;2019/11/27 11:32:20&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=85627427-953c-46e3-a386-ddeaa34e4e1b'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"85627427-953c-46e3-a386-ddeaa34e4e1b\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;101&lt;/td&gt;&lt;td&gt;坦克护卫队&lt;/td&gt;&lt;td&gt;1614cp9024&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;浏阳市熊猫烟花有限公司&lt;/td&gt;&lt;td&gt;cp&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;造型玩具类&lt;/td&gt;&lt;td&gt;D&lt;/td&gt;&lt;td&gt;2019/11/27 11:30:57&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=3381baf8-dbf0-4150-aaf2-0e2d10b959c9'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"3381baf8-dbf0-4150-aaf2-0e2d10b959c9\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;102&lt;/td&gt;&lt;td&gt;太阳花&lt;/td&gt;&lt;td&gt;1614co9024&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;浏阳市熊猫烟花有限公司&lt;/td&gt;&lt;td&gt;co&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;造型玩具类&lt;/td&gt;&lt;td&gt;D&lt;/td&gt;&lt;td&gt;2019/11/27 11:29:32&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=77eb90b0-804a-4169-a36a-bd3a266a0ee4'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"77eb90b0-804a-4169-a36a-bd3a266a0ee4\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;103&lt;/td&gt;&lt;td&gt;疯狂的猴子/哈雷摩托&lt;/td&gt;&lt;td&gt;1614cn9024&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;浏阳市熊猫烟花有限公司&lt;/td&gt;&lt;td&gt;cn&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;造型玩具类&lt;/td&gt;&lt;td&gt;D&lt;/td&gt;&lt;td&gt;2019/11/27 11:27:28&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=244d781d-c10a-41b4-95e4-65076face693'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"244d781d-c10a-41b4-95e4-65076face693\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;104&lt;/td&gt;&lt;td&gt;母鸡下金蛋/公鸡喔喔叫&lt;/td&gt;&lt;td&gt;1614cm9024&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;浏阳市熊猫烟花有限公司&lt;/td&gt;&lt;td&gt;cm&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;造型玩具类&lt;/td&gt;&lt;td&gt;D&lt;/td&gt;&lt;td&gt;2019/11/27 11:25:36&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=ecee4cac-79c6-49f9-91c4-d82137457e09'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"ecee4cac-79c6-49f9-91c4-d82137457e09\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;105&lt;/td&gt;&lt;td&gt;美猴王&lt;/td&gt;&lt;td&gt;1213cl9024&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;浏阳市熊猫烟花有限公司&lt;/td&gt;&lt;td&gt;cl&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;2019/11/27 11:22:46&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=5dae1fad-26c5-4d01-a45e-f055f966c4c1'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"5dae1fad-26c5-4d01-a45e-f055f966c4c1\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;106&lt;/td&gt;&lt;td&gt;浏阳红炮王2000响&lt;/td&gt;&lt;td&gt;1123ck1605&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;醴陵市富招花炮实业有限公司&lt;/td&gt;&lt;td&gt;ck&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;2019/11/27 11:20:22&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=38be4912-9435-40c7-96b7-8da7a071998b'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"38be4912-9435-40c7-96b7-8da7a071998b\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;107&lt;/td&gt;&lt;td&gt;浏阳红炮王 1000响&lt;/td&gt;&lt;td&gt;1123cj1605&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;醴陵市富招花炮实业有限公司&lt;/td&gt;&lt;td&gt;cj&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;2019/11/27 11:18:46&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=38961652-017a-4f7a-8022-741433e8dcd0'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"38961652-017a-4f7a-8022-741433e8dcd0\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;108&lt;/td&gt;&lt;td&gt;浏阳金牌全红炮 2000&lt;/td&gt;&lt;td&gt;1123ci1605&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;醴陵市富招花炮实业有限公司&lt;/td&gt;&lt;td&gt;ci&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;2019/11/27 11:16:02&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=f06ec0f1-7295-4b54-9ee5-2b1a8f77db56'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"f06ec0f1-7295-4b54-9ee5-2b1a8f77db56\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;109&lt;/td&gt;&lt;td&gt;浏阳金牌全红炮1000&lt;/td&gt;&lt;td&gt;1123ch1605&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;醴陵市富招花炮实业有限公司&lt;/td&gt;&lt;td&gt;ch&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;2019/11/27 11:14:34&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=85e4781c-9b0f-4676-9e89-c02496b2b4fb'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"85e4781c-9b0f-4676-9e89-c02496b2b4fb\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;110&lt;/td&gt;&lt;td&gt;浏阳特级大地红 2000响&lt;/td&gt;&lt;td&gt;1123cg1605&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;醴陵市富招花炮实业有限公司&lt;/td&gt;&lt;td&gt;cg&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;2019/11/27 11:12:01&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=89e6f3eb-44df-4dda-800f-5bdd6427f620'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"89e6f3eb-44df-4dda-800f-5bdd6427f620\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;111&lt;/td&gt;&lt;td&gt;超能 潜水炮&lt;/td&gt;&lt;td&gt;1123cf1605&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;醴陵市富招花炮实业有限公司&lt;/td&gt;&lt;td&gt;cf&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;2019/11/27 11:10:42&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=8313b34a-f108-4947-9461-785c17923b56'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"8313b34a-f108-4947-9461-785c17923b56\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;112&lt;/td&gt;&lt;td&gt;浏阳金牌全红炮1000&lt;/td&gt;&lt;td&gt;1123ce1605&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;醴陵市富招花炮实业有限公司&lt;/td&gt;&lt;td&gt;ce&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;2019/11/27 11:09:29&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=0d9e42c0-b53b-4678-9d93-727a5656f0c7'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"0d9e42c0-b53b-4678-9d93-727a5656f0c7\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;113&lt;/td&gt;&lt;td&gt;魔光四射&lt;/td&gt;&lt;td&gt;1614cc9024&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;浏阳市熊猫烟花有限公司&lt;/td&gt;&lt;td&gt;cd&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;造型玩具类&lt;/td&gt;&lt;td&gt;D&lt;/td&gt;&lt;td&gt;2019/11/27 11:07:34&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=deff29a3-1a4a-47e6-9179-010e67f77c83'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"deff29a3-1a4a-47e6-9179-010e67f77c83\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;114&lt;/td&gt;&lt;td&gt;浏阳红炮王 1000响&lt;/td&gt;&lt;td&gt;1123cc1605&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;醴陵市富招花炮实业有限公司&lt;/td&gt;&lt;td&gt;cc&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;2019/11/27 11:05:04&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=40faf7e2-313f-4a74-9ed8-6cf7257e5804'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"40faf7e2-313f-4a74-9ed8-6cf7257e5804\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;115&lt;/td&gt;&lt;td&gt;浏阳特级大地红 1000响&lt;/td&gt;&lt;td&gt;1123cb1605&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;醴陵市富招花炮实业有限公司&lt;/td&gt;&lt;td&gt;cb&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;2019/11/27 11:02:47&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=fb6afd30-03ed-49a7-acf4-270f3400cb6b'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"fb6afd30-03ed-49a7-acf4-270f3400cb6b\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;116&lt;/td&gt;&lt;td&gt;浏阳金牌全红炮2000&lt;/td&gt;&lt;td&gt;1123ca1605&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;醴陵市富招花炮实业有限公司&lt;/td&gt;&lt;td&gt;ca&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;2019/11/27 10:55:39&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=f830a26b-c560-491c-bdb5-4b05e8919346'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"f830a26b-c560-491c-bdb5-4b05e8919346\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;117&lt;/td&gt;&lt;td&gt;大吉大利高级大地红&lt;/td&gt;&lt;td&gt;11232M20H0&lt;/td&gt;&lt;td&gt;38.00&lt;/td&gt;&lt;td&gt;38.00&lt;/td&gt;&lt;td&gt;江西省上栗县燕安出口烟花爆竹制造有限公司&lt;/td&gt;&lt;td&gt;2M&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/26 16:49:29&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=f343ff37-207d-4d44-b7b1-da829468672d'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"f343ff37-207d-4d44-b7b1-da829468672d\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;118&lt;/td&gt;&lt;td&gt;富贵满堂&lt;/td&gt;&lt;td&gt;1123M00260&lt;/td&gt;&lt;td&gt;380.00&lt;/td&gt;&lt;td&gt;380.00&lt;/td&gt;&lt;td&gt;东信烟花集团有限公司&lt;/td&gt;&lt;td&gt;M0&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/25 15:18:46&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=a005d73c-9581-409e-874b-18c03f00ad0a'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"a005d73c-9581-409e-874b-18c03f00ad0a\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;119&lt;/td&gt;&lt;td&gt;万事如意&lt;/td&gt;&lt;td&gt;11235l2XQ0&lt;/td&gt;&lt;td&gt;75.00&lt;/td&gt;&lt;td&gt;75.00&lt;/td&gt;&lt;td&gt;萍乡市金泰花炮厂&lt;/td&gt;&lt;td&gt;5l&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/24 16:27:38&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=b199453c-6849-4d3d-a815-5108b3e0f3fd'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"b199453c-6849-4d3d-a815-5108b3e0f3fd\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;120&lt;/td&gt;&lt;td&gt;魔幻宝塔 神奇宝塔&lt;/td&gt;&lt;td&gt;1213AC39A0&lt;/td&gt;&lt;td&gt;80.00&lt;/td&gt;&lt;td&gt;80.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;AC&lt;/td&gt;&lt;td&gt;150&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/23 22:58:56&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=4bc3097d-6e65-45d5-88aa-3690074e0cc3'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"4bc3097d-6e65-45d5-88aa-3690074e0cc3\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;121&lt;/td&gt;&lt;td&gt;黄金树&lt;/td&gt;&lt;td&gt;1213AD39A0&lt;/td&gt;&lt;td&gt;110.00&lt;/td&gt;&lt;td&gt;110.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;AD&lt;/td&gt;&lt;td&gt;192&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/23 22:34:49&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=f12f92ec-1ccf-42d8-9a32-2889f229726a'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"f12f92ec-1ccf-42d8-9a32-2889f229726a\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;122&lt;/td&gt;&lt;td&gt;花蝴蝶 蝶之恋&lt;/td&gt;&lt;td&gt;1913A939A0&lt;/td&gt;&lt;td&gt;220.00&lt;/td&gt;&lt;td&gt;220.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;A9&lt;/td&gt;&lt;td&gt;160&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/23 16:59:22&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=a7c9031d-d796-4229-8d02-cb7e6e2ede58'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"a7c9031d-d796-4229-8d02-cb7e6e2ede58\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;123&lt;/td&gt;&lt;td&gt;花儿朵朵&lt;/td&gt;&lt;td&gt;1213AB39A0&lt;/td&gt;&lt;td&gt;65.00&lt;/td&gt;&lt;td&gt;65.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;AB&lt;/td&gt;&lt;td&gt;88&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/23 16:57:02&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=353e63e5-69fc-430b-a233-75b7c92518d1'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"353e63e5-69fc-430b-a233-75b7c92518d1\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;124&lt;/td&gt;&lt;td&gt;七彩冰激凌&lt;/td&gt;&lt;td&gt;1213AA39A0&lt;/td&gt;&lt;td&gt;80.00&lt;/td&gt;&lt;td&gt;80.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;AA&lt;/td&gt;&lt;td&gt;40&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/23 16:20:29&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=ea0d133c-70be-431b-9ecb-33dfc891bda0'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"ea0d133c-70be-431b-9ecb-33dfc891bda0\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;125&lt;/td&gt;&lt;td&gt;萌萌哒 么么哒&lt;/td&gt;&lt;td&gt;12132139A0&lt;/td&gt;&lt;td&gt;70.00&lt;/td&gt;&lt;td&gt;70.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;21&lt;/td&gt;&lt;td&gt;80&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/21 23:10:36&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=027c626d-e02e-4947-9976-819e4fa9c9f9'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"027c626d-e02e-4947-9976-819e4fa9c9f9\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;126&lt;/td&gt;&lt;td&gt;虎虎生威 彩龙飞天&lt;/td&gt;&lt;td&gt;1213A039A0&lt;/td&gt;&lt;td&gt;140.00&lt;/td&gt;&lt;td&gt;140.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;A0&lt;/td&gt;&lt;td&gt;110&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/21 23:06:53&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=ab4789cf-496b-4cee-b448-f2b0e8f3086f'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"ab4789cf-496b-4cee-b448-f2b0e8f3086f\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;127&lt;/td&gt;&lt;td&gt;莲花开&lt;/td&gt;&lt;td&gt;13239439A0&lt;/td&gt;&lt;td&gt;110.00&lt;/td&gt;&lt;td&gt;110.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;94&lt;/td&gt;&lt;td&gt;32&lt;/td&gt;&lt;td&gt;旋转类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/21 22:57:11&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=d1209d15-5acb-4d6f-96e3-584bc916bde6'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"d1209d15-5acb-4d6f-96e3-584bc916bde6\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;128&lt;/td&gt;&lt;td&gt;海绵宝宝 蜘蛛侠&lt;/td&gt;&lt;td&gt;12133L39A0&lt;/td&gt;&lt;td&gt;145.00&lt;/td&gt;&lt;td&gt;145.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;3L&lt;/td&gt;&lt;td&gt;96&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/21 22:54:04&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=2584c15e-befc-49bd-a4cf-754ecb21056d'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"2584c15e-befc-49bd-a4cf-754ecb21056d\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;129&lt;/td&gt;&lt;td&gt;JQ雪娃娃 Q娃娃&lt;/td&gt;&lt;td&gt;12139e39A0&lt;/td&gt;&lt;td&gt;200.00&lt;/td&gt;&lt;td&gt;200.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;9e&lt;/td&gt;&lt;td&gt;120&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/21 22:47:58&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=f9bd05c4-317b-4619-9f01-1c1286f9b207'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"f9bd05c4-317b-4619-9f01-1c1286f9b207\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;130&lt;/td&gt;&lt;td&gt;惊喜连连&lt;/td&gt;&lt;td&gt;1213A339A0&lt;/td&gt;&lt;td&gt;50.00&lt;/td&gt;&lt;td&gt;50.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;A3&lt;/td&gt;&lt;td&gt;56&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/21 22:36:11&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=a6ada61c-bdef-4612-89f3-8e0a9d7316fd'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"a6ada61c-bdef-4612-89f3-8e0a9d7316fd\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;131&lt;/td&gt;&lt;td&gt;嘻哈派 乐天派&lt;/td&gt;&lt;td&gt;1213A539A0&lt;/td&gt;&lt;td&gt;55.00&lt;/td&gt;&lt;td&gt;55.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;A5&lt;/td&gt;&lt;td&gt;84&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/21 22:22:23&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=04947e05-513f-4030-ac08-23bc75dff0cc'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"04947e05-513f-4030-ac08-23bc75dff0cc\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;132&lt;/td&gt;&lt;td&gt;梅花瑞雪&lt;/td&gt;&lt;td&gt;19139T39A0&lt;/td&gt;&lt;td&gt;160.00&lt;/td&gt;&lt;td&gt;160.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;9T&lt;/td&gt;&lt;td&gt;90&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/21 16:53:24&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=0aa314ad-ffc0-4d80-b23e-c565dc8aa6bd'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"0aa314ad-ffc0-4d80-b23e-c565dc8aa6bd\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;133&lt;/td&gt;&lt;td&gt;童乐无限 繁花似锦&lt;/td&gt;&lt;td&gt;12139z39A0&lt;/td&gt;&lt;td&gt;48.00&lt;/td&gt;&lt;td&gt;48.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;9z&lt;/td&gt;&lt;td&gt;56&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/21 16:52:02&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=9649bde9-9c3f-4829-b580-6b0c311368f0'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"9649bde9-9c3f-4829-b580-6b0c311368f0\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;134&lt;/td&gt;&lt;td&gt;蓝钻 粉钻&lt;/td&gt;&lt;td&gt;1213A139A0&lt;/td&gt;&lt;td&gt;170.00&lt;/td&gt;&lt;td&gt;170.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;A1&lt;/td&gt;&lt;td&gt;146&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/21 16:50:06&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=e41c6724-a890-47e5-85b3-41f497e0d80c'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"e41c6724-a890-47e5-85b3-41f497e0d80c\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;135&lt;/td&gt;&lt;td&gt;炫彩世界&lt;/td&gt;&lt;td&gt;1213A439A0&lt;/td&gt;&lt;td&gt;70.00&lt;/td&gt;&lt;td&gt;70.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;A4&lt;/td&gt;&lt;td&gt;112&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/21 16:43:41&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=3d61a34f-4b3a-4c43-bb56-bd1b9d954fc2'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"3d61a34f-4b3a-4c43-bb56-bd1b9d954fc2\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;136&lt;/td&gt;&lt;td&gt;孔雀开屏&lt;/td&gt;&lt;td&gt;1213A639A0&lt;/td&gt;&lt;td&gt;90.00&lt;/td&gt;&lt;td&gt;90.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;A6&lt;/td&gt;&lt;td&gt;15&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/21 16:17:00&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=e857bffc-b67a-4416-928b-d05912be0e89'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"e857bffc-b67a-4416-928b-d05912be0e89\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;137&lt;/td&gt;&lt;td&gt;大方方得利&lt;/td&gt;&lt;td&gt;19133H39A0&lt;/td&gt;&lt;td&gt;137.50&lt;/td&gt;&lt;td&gt;137.50&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;3H&lt;/td&gt;&lt;td&gt;300&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/19 22:55:22&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=00e53929-db66-42da-97fe-781d83bc3352'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"00e53929-db66-42da-97fe-781d83bc3352\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;138&lt;/td&gt;&lt;td&gt;满地珍珠&lt;/td&gt;&lt;td&gt;12133n39A0&lt;/td&gt;&lt;td&gt;50.00&lt;/td&gt;&lt;td&gt;50.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;3n&lt;/td&gt;&lt;td&gt;130&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/19 22:52:38&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=e69d9bc6-cd7f-46bf-a74e-daeaa60a6bf3'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"e69d9bc6-cd7f-46bf-a74e-daeaa60a6bf3\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;139&lt;/td&gt;&lt;td&gt;五彩缤纷&lt;/td&gt;&lt;td&gt;12130h39A0&lt;/td&gt;&lt;td&gt;130.00&lt;/td&gt;&lt;td&gt;130.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;0h&lt;/td&gt;&lt;td&gt;120&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/19 22:43:07&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=2d8e4252-0741-4ce1-b035-957b8fc2e4e2'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"2d8e4252-0741-4ce1-b035-957b8fc2e4e2\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;140&lt;/td&gt;&lt;td&gt;八方财源滚滚来&lt;/td&gt;&lt;td&gt;12130y9024&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;浏阳市熊猫烟花有限公司&lt;/td&gt;&lt;td&gt;0y&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;2019/11/19 20:57:35&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=ecd72080-27c5-45c2-ab31-3bce511bb290'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"ecd72080-27c5-45c2-ab31-3bce511bb290\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;141&lt;/td&gt;&lt;td&gt;我爱你中国&lt;/td&gt;&lt;td&gt;12133L9024&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;浏阳市熊猫烟花有限公司&lt;/td&gt;&lt;td&gt;3L&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;2019/11/19 20:56:26&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=7b1982e4-8a1e-4d9c-bf68-93a47215de85'&gt;修改";
+
+        String msg3 = "&lt;/a&gt;&lt;a href='javascript:deletesp(\\\"7b1982e4-8a1e-4d9c-bf68-93a47215de85\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;142&lt;/td&gt;&lt;td&gt;超级米兰之夜&lt;/td&gt;&lt;td&gt;12133M9024&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;浏阳市熊猫烟花有限公司&lt;/td&gt;&lt;td&gt;3M&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;2019/11/19 20:55:07&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=fa6cd97a-5c58-49bd-9b59-8ebdc76fefa5'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"fa6cd97a-5c58-49bd-9b59-8ebdc76fefa5\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;143&lt;/td&gt;&lt;td&gt;金鼠庆丰年 &lt;/td&gt;&lt;td&gt;12133J9024&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;浏阳市熊猫烟花有限公司&lt;/td&gt;&lt;td&gt;3J&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;2019/11/19 20:53:36&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=7c712acd-a04b-49ec-955a-199ecb250c54'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"7c712acd-a04b-49ec-955a-199ecb250c54\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;144&lt;/td&gt;&lt;td&gt;恭喜发财&lt;/td&gt;&lt;td&gt;1213129024&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;浏阳市熊猫烟花有限公司&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;2019/11/19 20:52:24&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=27f05104-4161-4c0b-9e7d-8a198614ea36'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"27f05104-4161-4c0b-9e7d-8a198614ea36\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;145&lt;/td&gt;&lt;td&gt;开门大吉&lt;/td&gt;&lt;td&gt;1213119024&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;浏阳市熊猫烟花有限公司&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;2019/11/19 20:44:17&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=d2f3f336-8eda-4dff-a41d-9b3cba40a8b7'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"d2f3f336-8eda-4dff-a41d-9b3cba40a8b7\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;146&lt;/td&gt;&lt;td&gt;美好家园&lt;/td&gt;&lt;td&gt;12133I9024&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;浏阳市熊猫烟花有限公司&lt;/td&gt;&lt;td&gt;3I&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;2019/11/19 20:42:52&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=81c81c32-a562-465c-baeb-4f40723d7bdc'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"81c81c32-a562-465c-baeb-4f40723d7bdc\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;147&lt;/td&gt;&lt;td&gt;鼠年大吉&lt;/td&gt;&lt;td&gt;12133H9024&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;浏阳市熊猫烟花有限公司&lt;/td&gt;&lt;td&gt;3H&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;2019/11/19 20:41:30&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=f97dbef8-f140-45a9-b361-8208afde35fd'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"f97dbef8-f140-45a9-b361-8208afde35fd\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;148&lt;/td&gt;&lt;td&gt;吉祥如意&lt;/td&gt;&lt;td&gt;12113N9024&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;浏阳市熊猫烟花有限公司&lt;/td&gt;&lt;td&gt;3N&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;2019/11/19 20:40:10&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=31faea8f-cb22-41aa-b013-3565aad5160e'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"31faea8f-cb22-41aa-b013-3565aad5160e\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;149&lt;/td&gt;&lt;td&gt;喜迎财神&lt;/td&gt;&lt;td&gt;12130z9024&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;浏阳市熊猫烟花有限公司&lt;/td&gt;&lt;td&gt;0z&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;2019/11/19 20:37:47&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=2ca9d172-78f4-4f21-86a2-dd909078cd60'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"2ca9d172-78f4-4f21-86a2-dd909078cd60\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;150&lt;/td&gt;&lt;td&gt;第六代四季发财&lt;/td&gt;&lt;td&gt;1213109024&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;浏阳市熊猫烟花有限公司&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;2019/11/19 20:36:15&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=02cd69a0-7bf9-47fd-b5bb-97b22a7c3312'&gt;修改";
+
+        String msg4 = "&lt;/a&gt;&lt;a href='javascript:deletesp(\\\"02cd69a0-7bf9-47fd-b5bb-97b22a7c3312\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;151&lt;/td&gt;&lt;td&gt;年年旺/步步高&lt;/td&gt;&lt;td&gt;12133F9024&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;浏阳市熊猫烟花有限公司&lt;/td&gt;&lt;td&gt;3F&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;2019/11/19 20:34:37&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=1dffe206-c824-480a-9e46-cf3651460ac0'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"1dffe206-c824-480a-9e46-cf3651460ac0\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;152&lt;/td&gt;&lt;td&gt;笑脸&lt;/td&gt;&lt;td&gt;19134y39A0&lt;/td&gt;&lt;td&gt;73.00&lt;/td&gt;&lt;td&gt;73.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;4y&lt;/td&gt;&lt;td&gt;78&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/19 17:21:40&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=166b3a7c-e0ef-4ea9-8c68-260407067b73'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"166b3a7c-e0ef-4ea9-8c68-260407067b73\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;153&lt;/td&gt;&lt;td&gt;JQ雀之恋(中)&lt;/td&gt;&lt;td&gt;19137d39A0&lt;/td&gt;&lt;td&gt;235.00&lt;/td&gt;&lt;td&gt;235.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;7d&lt;/td&gt;&lt;td&gt;120&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/19 16:55:35&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=d8ff1d07-ddce-42c5-a342-620f70b360a5'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"d8ff1d07-ddce-42c5-a342-620f70b360a5\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;154&lt;/td&gt;&lt;td&gt;鼠来宝&lt;/td&gt;&lt;td&gt;12132J39A0&lt;/td&gt;&lt;td&gt;95.00&lt;/td&gt;&lt;td&gt;95.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;2J&lt;/td&gt;&lt;td&gt;51&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/19 16:47:41&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=3611f689-74fa-472b-8bbd-17cfdf737496'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"3611f689-74fa-472b-8bbd-17cfdf737496\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;155&lt;/td&gt;&lt;td&gt;劲舞组合&lt;/td&gt;&lt;td&gt;12138h39A0&lt;/td&gt;&lt;td&gt;73.00&lt;/td&gt;&lt;td&gt;73.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;8h&lt;/td&gt;&lt;td&gt;80&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/19 16:46:00&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=cbefbcd3-b8cd-4d46-95d2-bb5f4443a5d7'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"cbefbcd3-b8cd-4d46-95d2-bb5f4443a5d7\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;156&lt;/td&gt;&lt;td&gt;熊猫喷泉&lt;/td&gt;&lt;td&gt;12137j39A0&lt;/td&gt;&lt;td&gt;30.00&lt;/td&gt;&lt;td&gt;30.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;7j&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/19 16:41:03&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=6c5b7cb8-1377-48e1-b643-b1b630657a4a'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"6c5b7cb8-1377-48e1-b643-b1b630657a4a\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;157&lt;/td&gt;&lt;td&gt;小黄人&lt;/td&gt;&lt;td&gt;12130v39A0&lt;/td&gt;&lt;td&gt;115.00&lt;/td&gt;&lt;td&gt;115.00&lt;/td&gt;&lt;td&gt;湖南恒达烟花有限公司&lt;/td&gt;&lt;td&gt;0v&lt;/td&gt;&lt;td&gt;160&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/19 16:18:55&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=913e0384-4eeb-4eab-8eab-ed441b4fea7f'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"913e0384-4eeb-4eab-8eab-ed441b4fea7f\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;158&lt;/td&gt;&lt;td&gt;地毯红1号&lt;/td&gt;&lt;td&gt;11231n20H0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;江西省上栗县燕安出口烟花爆竹制造有限公司&lt;/td&gt;&lt;td&gt;1n&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/15 16:57:09&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=6656c6f1-0098-4497-a72b-b5c08b3cc1ae'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"6656c6f1-0098-4497-a72b-b5c08b3cc1ae\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;159&lt;/td&gt;&lt;td&gt;20发激情时刻&lt;/td&gt;&lt;td&gt;15131n55X0&lt;/td&gt;&lt;td&gt;53.00&lt;/td&gt;&lt;td&gt;53.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1n&lt;/td&gt;&lt;td&gt;2.4&lt;/td&gt;&lt;td&gt;吐珠类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/15 16:44:15&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=53a5360a-7833-45eb-bad7-e689eaf13035'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"53a5360a-7833-45eb-bad7-e689eaf13035\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;160&lt;/td&gt;&lt;td&gt;10发飞龙在天&lt;/td&gt;&lt;td&gt;15131p55X0&lt;/td&gt;&lt;td&gt;80.00&lt;/td&gt;&lt;td&gt;80.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1p&lt;/td&gt;&lt;td&gt;7.6&lt;/td&gt;&lt;td&gt;吐珠类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/15 16:42:24&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=b327048b-3bc3-48c4-8275-8915703e8894'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"b327048b-3bc3-48c4-8275-8915703e8894\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;161&lt;/td&gt;&lt;td&gt;15发神采飞扬&lt;/td&gt;&lt;td&gt;15131q55X0&lt;/td&gt;&lt;td&gt;45.00&lt;/td&gt;&lt;td&gt;45.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1q&lt;/td&gt;&lt;td&gt;2.4&lt;/td&gt;&lt;td&gt;吐珠类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/15 16:40:40&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=6b1d56cb-450a-4341-93fc-ea3388fa7fb1'&gt;修改";
+
+        String msg5 = "&lt;/a&gt;&lt;a href='javascript:deletesp(\\\"6b1d56cb-450a-4341-93fc-ea3388fa7fb1\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;162&lt;/td&gt;&lt;td&gt;48财旺旺&lt;/td&gt;&lt;td&gt;1913M20260&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;东信烟花集团有限公司&lt;/td&gt;&lt;td&gt;M2&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/15 15:14:53&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=0339eeb0-b7e4-4fd9-a71c-1a05938dc037'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"0339eeb0-b7e4-4fd9-a71c-1a05938dc037\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;163&lt;/td&gt;&lt;td&gt;66混装丰收年&lt;/td&gt;&lt;td&gt;1913M30260&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;东信烟花集团有限公司&lt;/td&gt;&lt;td&gt;M3&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/15 15:13:25&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=1d9eea68-5895-4ad9-8687-795dd493f37c'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"1d9eea68-5895-4ad9-8687-795dd493f37c\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;164&lt;/td&gt;&lt;td&gt;100福到财到&lt;/td&gt;&lt;td&gt;1913M40260&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;东信烟花集团有限公司&lt;/td&gt;&lt;td&gt;M4&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/15 15:10:26&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=f7498cdc-38b7-4b6b-834c-f6c7e496806b'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"f7498cdc-38b7-4b6b-834c-f6c7e496806b\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;165&lt;/td&gt;&lt;td&gt;48天天发&lt;/td&gt;&lt;td&gt;1913M50260&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;东信烟花集团有限公司&lt;/td&gt;&lt;td&gt;M5&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/15 15:09:15&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=6f0db4ce-d082-499a-aae1-c5a94ebe2871'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"6f0db4ce-d082-499a-aae1-c5a94ebe2871\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;166&lt;/td&gt;&lt;td&gt;48年年红&lt;/td&gt;&lt;td&gt;1913M60260&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;东信烟花集团有限公司&lt;/td&gt;&lt;td&gt;M6&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/15 15:00:17&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=54afdafd-c6ab-4ded-9289-e7bea933a522'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"54afdafd-c6ab-4ded-9289-e7bea933a522\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;167&lt;/td&gt;&lt;td&gt;48四季财&lt;/td&gt;&lt;td&gt;1913M70260&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;东信烟花集团有限公司&lt;/td&gt;&lt;td&gt;M7&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/15 14:58:38&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=d564e084-e9c0-4b38-aaac-b4f3f3165e77'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"d564e084-e9c0-4b38-aaac-b4f3f3165e77\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;168&lt;/td&gt;&lt;td&gt;66吉祥混装&lt;/td&gt;&lt;td&gt;1913M80260&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;东信烟花集团有限公司&lt;/td&gt;&lt;td&gt;M8&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/15 14:56:23&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=ef17847c-7881-494f-a25c-768cd85d0832'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"ef17847c-7881-494f-a25c-768cd85d0832\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;169&lt;/td&gt;&lt;td&gt;100好运连年&lt;/td&gt;&lt;td&gt;1913M90260&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;东信烟花集团有限公司&lt;/td&gt;&lt;td&gt;M9&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/15 14:54:27&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=582742d7-8259-4f8a-beda-18be9793e6d5'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"582742d7-8259-4f8a-beda-18be9793e6d5\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;170&lt;/td&gt;&lt;td&gt;25混装财宝归&lt;/td&gt;&lt;td&gt;1913M10260&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;东信烟花集团有限公司&lt;/td&gt;&lt;td&gt;M1&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/14 15:16:32&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=b9f5bdce-3da8-40c8-9def-735ba8bb0454'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"b9f5bdce-3da8-40c8-9def-735ba8bb0454\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;171&lt;/td&gt;&lt;td&gt;50发带响彩珠筒&lt;/td&gt;&lt;td&gt;15131l55X0&lt;/td&gt;&lt;td&gt;75.00&lt;/td&gt;&lt;td&gt;75.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;15&lt;/td&gt;&lt;td&gt;吐珠类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/13 20:23:20&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=4cc0fc91-2ef3-4938-8c98-294b235fffdf'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"4cc0fc91-2ef3-4938-8c98-294b235fffdf\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;172&lt;/td&gt;&lt;td&gt;8发彩龙珠&lt;/td&gt;&lt;td&gt;15131m55X0&lt;/td&gt;&lt;td&gt;45.00&lt;/td&gt;&lt;td&gt;45.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1m&lt;/td&gt;&lt;td&gt;3.2&lt;/td&gt;&lt;td&gt;吐珠类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/13 16:46:03&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=08b0c27f-dba5-4072-8c4a-a027737b13a7'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"08b0c27f-dba5-4072-8c4a-a027737b13a7\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;173&lt;/td&gt;&lt;td&gt;30带响彩珠筒&lt;/td&gt;&lt;td&gt;15131j55X0&lt;/td&gt;&lt;td&gt;45.00&lt;/td&gt;&lt;td&gt;45.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1j&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;吐珠类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/13 16:36:15&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=2fbf3b31-ce3e-443a-8d97-6f57ae8f23db'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"2fbf3b31-ce3e-443a-8d97-6f57ae8f23db\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;174&lt;/td&gt;&lt;td&gt;40发带响彩珠筒&lt;/td&gt;&lt;td&gt;15131k55X0&lt;/td&gt;&lt;td&gt;60.00&lt;/td&gt;&lt;td&gt;60.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1k&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;吐珠类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/13 16:34:28&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=8d71eea2-44e8-4836-a97a-6bcd392ae2ac'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"8d71eea2-44e8-4836-a97a-6bcd392ae2ac\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;175&lt;/td&gt;&lt;td&gt;50发带响彩珠筒&lt;/td&gt;&lt;td&gt;15131L55X0&lt;/td&gt;&lt;td&gt;75.00&lt;/td&gt;&lt;td&gt;75.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;15&lt;/td&gt;&lt;td&gt;吐珠类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/13 16:32:37&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=47ef4e10-d76a-44ef-9ca1-abc69558242e'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"47ef4e10-d76a-44ef-9ca1-abc69558242e\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;176&lt;/td&gt;&lt;td&gt;大展宏图高级大地红&lt;/td&gt;&lt;td&gt;11232N20H0&lt;/td&gt;&lt;td&gt;200.00&lt;/td&gt;&lt;td&gt;200.00&lt;/td&gt;&lt;td&gt;江西省上栗县燕安出口烟花爆竹制造有限公司&lt;/td&gt;&lt;td&gt;2N&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/11 16:53:24&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=48c2fb97-ef71-4bce-9684-db7c7ae521d7'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"48c2fb97-ef71-4bce-9684-db7c7ae521d7\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;177&lt;/td&gt;&lt;td&gt;大红灯笼&lt;/td&gt;&lt;td&gt;12141g55X0&lt;/td&gt;&lt;td&gt;150.00&lt;/td&gt;&lt;td&gt;150.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1g&lt;/td&gt;&lt;td&gt;14&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/11 16:06:29&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=c274016f-2d6b-4681-abf8-f461b422f3b1'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"c274016f-2d6b-4681-abf8-f461b422f3b1\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;178&lt;/td&gt;&lt;td&gt;富贵满堂高级大地红&lt;/td&gt;&lt;td&gt;11231V55X0&lt;/td&gt;&lt;td&gt;380.00&lt;/td&gt;&lt;td&gt;380.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1V&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/11 15:52:48&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=7ef4125f-0903-4807-946f-a70822431276'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"7ef4125f-0903-4807-946f-a70822431276\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;179&lt;/td&gt;&lt;td&gt;大展宏图高级大地红&lt;/td&gt;&lt;td&gt;11231U55X0&lt;/td&gt;&lt;td&gt;200.00&lt;/td&gt;&lt;td&gt;200.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1U&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/11 15:51:25&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=0015ec31-fcc2-4f36-83b3-3d9577d5b834'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"0015ec31-fcc2-4f36-83b3-3d9577d5b834\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;180&lt;/td&gt;&lt;td&gt;万事如意高级大地红&lt;/td&gt;&lt;td&gt;11231T55X0&lt;/td&gt;&lt;td&gt;75.00&lt;/td&gt;&lt;td&gt;75.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1T&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/11 15:49:07&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=4facd242-f2ef-483d-9769-3a163c0042af'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"4facd242-f2ef-483d-9769-3a163c0042af\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;181&lt;/td&gt;&lt;td&gt;大吉大利高级大地红&lt;/td&gt;&lt;td&gt;11231S55X0&lt;/td&gt;&lt;td&gt;38.00&lt;/td&gt;&lt;td&gt;38.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1S&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/11 15:47:29&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=586acd66-9fbc-4a30-a459-ce33d3672d36'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"586acd66-9fbc-4a30-a459-ce33d3672d36\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;182&lt;/td&gt;&lt;td&gt;拖拉机&lt;/td&gt;&lt;td&gt;16131f55X0&lt;/td&gt;&lt;td&gt;130.00&lt;/td&gt;&lt;td&gt;130.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1f&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/11 15:46:19&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=e1e4cc51-0ac9-42ed-84b7-81246e7af00b'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"e1e4cc51-0ac9-42ed-84b7-81246e7af00b\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;183&lt;/td&gt;&lt;td&gt;梦幻灯笼&lt;/td&gt;&lt;td&gt;16131G55X0&lt;/td&gt;&lt;td&gt;60.00&lt;/td&gt;&lt;td&gt;60.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1G&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/10 15:47:55&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=a60cdc71-0ab6-4593-a3c6-f7fbea6e5b52'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"a60cdc71-0ab6-4593-a3c6-f7fbea6e5b52\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;184&lt;/td&gt;&lt;td&gt;蜘蛛侠&lt;/td&gt;&lt;td&gt;12141M55X0&lt;/td&gt;&lt;td&gt;105.00&lt;/td&gt;&lt;td&gt;105.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1M&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/6 16:49:26&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=6fb09a50-0eb5-4681-a97b-beb9f30a5993'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"6fb09a50-0eb5-4681-a97b-beb9f30a5993\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;185&lt;/td&gt;&lt;td&gt;过年好儿童大礼包&lt;/td&gt;&lt;td&gt;12141h55X0&lt;/td&gt;&lt;td&gt;360.00&lt;/td&gt;&lt;td&gt;360.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1h&lt;/td&gt;&lt;td&gt;174&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/6 16:47:39&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=766ab5eb-9e61-4d71-831f-842c8783e04c'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"766ab5eb-9e61-4d71-831f-842c8783e04c\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;186&lt;/td&gt;&lt;td&gt;大号炫彩风车&lt;/td&gt;&lt;td&gt;13131I55X0&lt;/td&gt;&lt;td&gt;100.00&lt;/td&gt;&lt;td&gt;100.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1I&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;旋转类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/6 16:23:57&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=ff89639c-c83c-485e-8b84-c6202b18b5c5'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"ff89639c-c83c-485e-8b84-c6202b18b5c5\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;187&lt;/td&gt;&lt;td&gt;大号舞龙棒&lt;/td&gt;&lt;td&gt;12241P55X0&lt;/td&gt;&lt;td&gt;90.00&lt;/td&gt;&lt;td&gt;90.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1P&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/6 16:21:42&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=a0b90982-5157-4aff-90a6-5ea61f898fa7'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"a0b90982-5157-4aff-90a6-5ea61f898fa7\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;188&lt;/td&gt;&lt;td&gt;智力魔盒&lt;/td&gt;&lt;td&gt;12141K55X0&lt;/td&gt;&lt;td&gt;65.00&lt;/td&gt;&lt;td&gt;65.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1K&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/6 16:18:50&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=fc30d9fc-7bef-43f1-8042-6175af92e54f'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"fc30d9fc-7bef-43f1-8042-6175af92e54f\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;189&lt;/td&gt;&lt;td&gt;冰雪女王&lt;/td&gt;&lt;td&gt;12141L55X0&lt;/td&gt;&lt;td&gt;105.00&lt;/td&gt;&lt;td&gt;105.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1L&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/6 16:17:05&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=8757af4d-00df-4583-8496-fddc03fa69a7'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"8757af4d-00df-4583-8496-fddc03fa69a7\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;190&lt;/td&gt;&lt;td&gt;红满堂特级环保红炮&lt;/td&gt;&lt;td&gt;1123135C50&lt;/td&gt;&lt;td&gt;460.00&lt;/td&gt;&lt;td&gt;460.00&lt;/td&gt;&lt;td&gt;浏阳市瑞丰花炮厂&lt;/td&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/6 16:16:46&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=93d46ecc-7965-433c-8e27-74ca076ea066'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"93d46ecc-7965-433c-8e27-74ca076ea066\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;191&lt;/td&gt;&lt;td&gt;旋转佩奇&lt;/td&gt;&lt;td&gt;13131H55X0&lt;/td&gt;&lt;td&gt;50.00&lt;/td&gt;&lt;td&gt;50.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1H&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/6 16:15:19&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=28ff7aff-9792-443f-90f0-4f8104dba30c'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"28ff7aff-9792-443f-90f0-4f8104dba30c\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;192&lt;/td&gt;&lt;td&gt;糖先森&lt;/td&gt;&lt;td&gt;12141R55X0&lt;/td&gt;&lt;td&gt;33.00&lt;/td&gt;&lt;td&gt;33.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1R&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/6 16:13:43&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=b4010f38-e12b-4c4d-9e2d-636369665103'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"b4010f38-e12b-4c4d-9e2d-636369665103\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;193&lt;/td&gt;&lt;td&gt;金满堂特级环保红炮&lt;/td&gt;&lt;td&gt;1123155C50&lt;/td&gt;&lt;td&gt;500.00&lt;/td&gt;&lt;td&gt;500.00&lt;/td&gt;&lt;td&gt;浏阳市瑞丰花炮厂&lt;/td&gt;&lt;td&gt;15&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/6 16:13:39&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=ffaae756-a600-44c0-b9ba-9601eadf4b06'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"ffaae756-a600-44c0-b9ba-9601eadf4b06\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;194&lt;/td&gt;&lt;td&gt;小红狐&lt;/td&gt;&lt;td&gt;12141Q55X0&lt;/td&gt;&lt;td&gt;80.00&lt;/td&gt;&lt;td&gt;80.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1Q&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/6 16:11:37&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=c7a43f1f-a42b-4a98-8052-d01e8aa42e80'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"c7a43f1f-a42b-4a98-8052-d01e8aa42e80\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;195&lt;/td&gt;&lt;td&gt;玩转潮流&lt;/td&gt;&lt;td&gt;13231J55X0&lt;/td&gt;&lt;td&gt;38.00&lt;/td&gt;&lt;td&gt;38.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1J&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/6 16:09:15&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=494c5823-6736-402c-9b00-75a9c88b7206'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"494c5823-6736-402c-9b00-75a9c88b7206\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;196&lt;/td&gt;&lt;td&gt;开心佩奇&lt;/td&gt;&lt;td&gt;12241N55X0&lt;/td&gt;&lt;td&gt;100.00&lt;/td&gt;&lt;td&gt;100.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1N&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/6 15:53:21&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=5f058bd9-3d31-4256-8ce7-c202dfaea8fb'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"5f058bd9-3d31-4256-8ce7-c202dfaea8fb\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;197&lt;/td&gt;&lt;td&gt;全家福儿童大礼包&lt;/td&gt;&lt;td&gt;12141i55X0&lt;/td&gt;&lt;td&gt;280.00&lt;/td&gt;&lt;td&gt;280.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1i&lt;/td&gt;&lt;td&gt;249&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/5 16:45:57&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=79c89645-fbce-451d-ab71-2745222d0bac'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"79c89645-fbce-451d-ab71-2745222d0bac\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;198&lt;/td&gt;&lt;td&gt;富贵满堂高级大地红&lt;/td&gt;&lt;td&gt;1123125C50&lt;/td&gt;&lt;td&gt;380.00&lt;/td&gt;&lt;td&gt;380.00&lt;/td&gt;&lt;td&gt;浏阳市瑞丰花炮厂&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/5 15:27:18&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=b383ae45-860c-4c97-97e8-c957025c8ecd'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"b383ae45-860c-4c97-97e8-c957025c8ecd\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;199&lt;/td&gt;&lt;td&gt;大展宏图高级大地红&lt;/td&gt;&lt;td&gt;1123115C50&lt;/td&gt;&lt;td&gt;200.00&lt;/td&gt;&lt;td&gt;200.00&lt;/td&gt;&lt;td&gt;浏阳市瑞丰花炮厂&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/5 15:25:34&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=6466fea9-9414-4059-8541-ac6f4fe13dac'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"6466fea9-9414-4059-8541-ac6f4fe13dac\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;200&lt;/td&gt;&lt;td&gt;吉祥如意II型红地毯&lt;/td&gt;&lt;td&gt;11231X55X0&lt;/td&gt;&lt;td&gt;270.00&lt;/td&gt;&lt;td&gt;270.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1X&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/1 16:38:20&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=d6187200-5cea-48be-b3b1-40d6bca14de0'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"d6187200-5cea-48be-b3b1-40d6bca14de0\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;201&lt;/td&gt;&lt;td&gt;喜气洋洋I型红地毯&lt;/td&gt;&lt;td&gt;11231W55X0&lt;/td&gt;&lt;td&gt;135.00&lt;/td&gt;&lt;td&gt;135.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1W&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/1 16:04:30&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=b4f5663e-5a80-4558-a9d5-df80e329bfdd'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"b4f5663e-5a80-4558-a9d5-df80e329bfdd\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;202&lt;/td&gt;&lt;td&gt;吉祥如意II型红地毯&lt;/td&gt;&lt;td&gt;11231X55X0&lt;/td&gt;&lt;td&gt;270.00&lt;/td&gt;&lt;td&gt;270.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1X&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/1 16:02:35&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=e52a4c0d-a795-4a38-bf47-d5dd6e12e6b8'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"e52a4c0d-a795-4a38-bf47-d5dd6e12e6b8\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;203&lt;/td&gt;&lt;td&gt;喜气洋洋I型红地毯&lt;/td&gt;&lt;td&gt;11231W55X0&lt;/td&gt;&lt;td&gt;135.00&lt;/td&gt;&lt;td&gt;135.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1W&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/11/1 15:54:32&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=553d7c66-1f85-455b-8714-e360d1973120'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"553d7c66-1f85-455b-8714-e360d1973120\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;204&lt;/td&gt;&lt;td&gt;大吉大利高级大地红&lt;/td&gt;&lt;td&gt;11230z5C50&lt;/td&gt;&lt;td&gt;38.00&lt;/td&gt;&lt;td&gt;38.00&lt;/td&gt;&lt;td&gt;浏阳市瑞丰花炮厂&lt;/td&gt;&lt;td&gt;0z&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/26 15:53:44&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=e08ae351-5893-49f8-b5c9-c7a4c8241d88'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"e08ae351-5893-49f8-b5c9-c7a4c8241d88\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;205&lt;/td&gt;&lt;td&gt;万事如意高级大地红&lt;/td&gt;&lt;td&gt;1123105C50&lt;/td&gt;&lt;td&gt;75.00&lt;/td&gt;&lt;td&gt;75.00&lt;/td&gt;&lt;td&gt;浏阳市瑞丰花炮厂&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/26 15:19:58&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=c5f4f08c-4400-448e-b8c4-245be1682076'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"c5f4f08c-4400-448e-b8c4-245be1682076\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;206&lt;/td&gt;&lt;td&gt;大展宏图高级大地红&lt;/td&gt;&lt;td&gt;11230Y4FX0&lt;/td&gt;&lt;td&gt;200.00&lt;/td&gt;&lt;td&gt;200.00&lt;/td&gt;&lt;td&gt;醴陵市福兴出口烟花鞭炮有限公司&lt;/td&gt;&lt;td&gt;0Y&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/24 14:14:13&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=742a4c21-4f9d-471a-a2f6-4bba3feecb38'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"742a4c21-4f9d-471a-a2f6-4bba3feecb38\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;207&lt;/td&gt;&lt;td&gt;大展鸿图高级大地红&lt;/td&gt;&lt;td&gt;11230W4FX0&lt;/td&gt;&lt;td&gt;135.00&lt;/td&gt;&lt;td&gt;135.00&lt;/td&gt;&lt;td&gt;醴陵市福兴出口烟花鞭炮有限公司&lt;/td&gt;&lt;td&gt;0W&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/22 9:22:44&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=2b3e38e2-77f6-4bdd-9a37-6236797bf7fb'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"2b3e38e2-77f6-4bdd-9a37-6236797bf7fb\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;208&lt;/td&gt;&lt;td&gt;大吉大利&lt;/td&gt;&lt;td&gt;11235k2XQ0&lt;/td&gt;&lt;td&gt;38.00&lt;/td&gt;&lt;td&gt;38.00&lt;/td&gt;&lt;td&gt;萍乡市金泰花炮厂&lt;/td&gt;&lt;td&gt;5k&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/21 16:02:53&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=8209c9a7-c846-4022-9080-128cbb5c7e50'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"8209c9a7-c846-4022-9080-128cbb5c7e50\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;209&lt;/td&gt;&lt;td&gt;富贵满堂&lt;/td&gt;&lt;td&gt;11235n2XQ0&lt;/td&gt;&lt;td&gt;380.00&lt;/td&gt;&lt;td&gt;380.00&lt;/td&gt;&lt;td&gt;萍乡市金泰花炮厂&lt;/td&gt;&lt;td&gt;5n&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/20 16:22:05&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=6c8bc863-47e2-4dec-b374-4335fa46194a'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"6c8bc863-47e2-4dec-b374-4335fa46194a\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;210&lt;/td&gt;&lt;td&gt;大展宏图&lt;/td&gt;&lt;td&gt;11235m2XQ0&lt;/td&gt;&lt;td&gt;200.00&lt;/td&gt;&lt;td&gt;200.00&lt;/td&gt;&lt;td&gt;萍乡市金泰花炮厂&lt;/td&gt;&lt;td&gt;5m&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/20 16:18:12&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=c0a2657e-ab88-4add-8e8f-029a2819293e'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"c0a2657e-ab88-4add-8e8f-029a2819293e\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;211&lt;/td&gt;&lt;td&gt;HQ06欢庆大地红&lt;/td&gt;&lt;td&gt;11230y5C50&lt;/td&gt;&lt;td&gt;270.00&lt;/td&gt;&lt;td&gt;270.00&lt;/td&gt;&lt;td&gt;浏阳市瑞丰花炮厂&lt;/td&gt;&lt;td&gt;0y&lt;/td&gt;&lt;td&gt;320&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/19 12:15:48&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=32f5aeb7-523c-4483-a1be-9dfe0a454831'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"32f5aeb7-523c-4483-a1be-9dfe0a454831\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;212&lt;/td&gt;&lt;td&gt;88雪景&lt;/td&gt;&lt;td&gt;19136C4JB0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;万载县双宇烟花制造有限公司&lt;/td&gt;&lt;td&gt;6C&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/17 17:58:28&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=f722c727-272e-402c-9dab-9a63d65677bb'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"f722c727-272e-402c-9dab-9a63d65677bb\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;213&lt;/td&gt;&lt;td&gt;16满堂红&lt;/td&gt;&lt;td&gt;19146G4JB0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;万载县双宇烟花制造有限公司&lt;/td&gt;&lt;td&gt;6G&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/17 17:50:03&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=fe0d722d-3994-4359-a2f3-ccc08d2bee9c'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"fe0d722d-3994-4359-a2f3-ccc08d2bee9c\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;214&lt;/td&gt;&lt;td&gt;100福吉财&lt;/td&gt;&lt;td&gt;19136H4JB0&lt;/td&gt;&lt;td&gt;150.00&lt;/td&gt;&lt;td&gt;150.00&lt;/td&gt;&lt;td&gt;万载县双宇烟花制造有限公司&lt;/td&gt;&lt;td&gt;6H&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/17 17:48:03&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=b07ed647-a34d-4a4f-92fe-aa2f68e2de44'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"b07ed647-a34d-4a4f-92fe-aa2f68e2de44\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;215&lt;/td&gt;&lt;td&gt;49魅力无限&lt;/td&gt;&lt;td&gt;19136A4JB0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;万载县双宇烟花制造有限公司&lt;/td&gt;&lt;td&gt;6A&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/17 17:46:21&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=27f8f850-04e7-4917-aadd-53dacaf5b523'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"27f8f850-04e7-4917-aadd-53dacaf5b523\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;216&lt;/td&gt;&lt;td&gt;150花团锦簇&lt;/td&gt;&lt;td&gt;19136B4JB0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;万载县双宇烟花制造有限公司&lt;/td&gt;&lt;td&gt;6B&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/17 17:39:49&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=690073b1-ba18-484e-8993-3b0f6da6db80'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"690073b1-ba18-484e-8993-3b0f6da6db80\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;217&lt;/td&gt;&lt;td&gt;12富贵红&lt;/td&gt;&lt;td&gt;19146F4JB0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;万载县双宇烟花制造有限公司&lt;/td&gt;&lt;td&gt;6F&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/17 17:37:33&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=11d3e9f8-3abd-4214-a671-5f771591968f'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"11d3e9f8-3abd-4214-a671-5f771591968f\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;218&lt;/td&gt;&lt;td&gt;9好运来&lt;/td&gt;&lt;td&gt;19146E4JB0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;万载县双宇烟花制造有限公司&lt;/td&gt;&lt;td&gt;6E&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/17 17:32:22&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=9a726add-fe65-41e6-a077-9e13b690e75c'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"9a726add-fe65-41e6-a077-9e13b690e75c\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;219&lt;/td&gt;&lt;td&gt;6福满堂&lt;/td&gt;&lt;td&gt;19146D4JB0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;万载县双宇烟花制造有限公司&lt;/td&gt;&lt;td&gt;6D&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/16 17:27:31&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=57b33b10-e23d-43b5-a0a2-d6b182d6a87c'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"57b33b10-e23d-43b5-a0a2-d6b182d6a87c\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;220&lt;/td&gt;&lt;td&gt;大吉大利高级大地红&lt;/td&gt;&lt;td&gt;11235p2XQ0&lt;/td&gt;&lt;td&gt;38.00&lt;/td&gt;&lt;td&gt;38.00&lt;/td&gt;&lt;td&gt;萍乡市金泰花炮厂&lt;/td&gt;&lt;td&gt;5p&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/15 16:41:34&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=1608b56a-e7ff-4c53-b4fe-4cd35f448633'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"1608b56a-e7ff-4c53-b4fe-4cd35f448633\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;221&lt;/td&gt;&lt;td&gt;万事如意高级大地红&lt;/td&gt;&lt;td&gt;11235q2XQ0&lt;/td&gt;&lt;td&gt;75.00&lt;/td&gt;&lt;td&gt;75.00&lt;/td&gt;&lt;td&gt;萍乡市金泰花炮厂&lt;/td&gt;&lt;td&gt;5q&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/15 16:39:55&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=2c578dbf-cf80-4f64-a4e8-ac8491761d21'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"2c578dbf-cf80-4f64-a4e8-ac8491761d21\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;222&lt;/td&gt;&lt;td&gt;大展宏图高级大地红&lt;/td&gt;&lt;td&gt;11235r2XQ0&lt;/td&gt;&lt;td&gt;200.00&lt;/td&gt;&lt;td&gt;200.00&lt;/td&gt;&lt;td&gt;萍乡市金泰花炮厂&lt;/td&gt;&lt;td&gt;5r&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/15 16:37:46&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=c50cc24d-e494-4524-bfad-3cdce9e8ed29'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"c50cc24d-e494-4524-bfad-3cdce9e8ed29\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;223&lt;/td&gt;&lt;td&gt;富贵满堂高级大地红&lt;/td&gt;&lt;td&gt;11235s2XQ0&lt;/td&gt;&lt;td&gt;380.00&lt;/td&gt;&lt;td&gt;380.00&lt;/td&gt;&lt;td&gt;萍乡市金泰花炮厂&lt;/td&gt;&lt;td&gt;5s&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/15 16:34:57&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=87030c30-2df1-4ff4-932a-d306dda2f89b'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"87030c30-2df1-4ff4-932a-d306dda2f89b\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;224&lt;/td&gt;&lt;td&gt;富贵满堂高级大地红&lt;/td&gt;&lt;td&gt;11230X4FX0&lt;/td&gt;&lt;td&gt;380.00&lt;/td&gt;&lt;td&gt;380.00&lt;/td&gt;&lt;td&gt;醴陵市福兴出口花炮厂&lt;/td&gt;&lt;td&gt;30&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/15 12:39:01&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=f57c9876-0fa5-4503-824c-b8b4e2c83d0a'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"f57c9876-0fa5-4503-824c-b8b4e2c83d0a\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;225&lt;/td&gt;&lt;td&gt;大吉大利高级大地红&lt;/td&gt;&lt;td&gt;11230U4FX0&lt;/td&gt;&lt;td&gt;38.00&lt;/td&gt;&lt;td&gt;38.00&lt;/td&gt;&lt;td&gt;醴陵市福兴出口花炮厂&lt;/td&gt;&lt;td&gt;0U&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/15 12:35:51&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=4e276b0f-3fbd-4161-8f1c-c48dca0b7bd5'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"4e276b0f-3fbd-4161-8f1c-c48dca0b7bd5\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;226&lt;/td&gt;&lt;td&gt;万事如意高级大地红&lt;/td&gt;&lt;td&gt;11230V4FX0&lt;/td&gt;&lt;td&gt;75.00&lt;/td&gt;&lt;td&gt;75.00&lt;/td&gt;&lt;td&gt;醴陵市福兴出口花炮厂&lt;/td&gt;&lt;td&gt;0V&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/15 12:31:51&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=382e7ca4-391e-4b07-b5b7-d1535c9ecac1'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"382e7ca4-391e-4b07-b5b7-d1535c9ecac1\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;227&lt;/td&gt;&lt;td&gt;大展鸿图高级大地红&lt;/td&gt;&lt;td&gt;11230Y4FX0&lt;/td&gt;&lt;td&gt;135.00&lt;/td&gt;&lt;td&gt;135.00&lt;/td&gt;&lt;td&gt;醴陵市福兴出口花炮厂&lt;/td&gt;&lt;td&gt;0W&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/15 12:25:40&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=5c83d627-6060-4af3-b283-edc81c317cd3'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"5c83d627-6060-4af3-b283-edc81c317cd3\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;228&lt;/td&gt;&lt;td&gt;38公分精品红地毯 &lt;/td&gt;&lt;td&gt;11230g5C50&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;浏阳市瑞丰花炮厂&lt;/td&gt;&lt;td&gt;0g&lt;/td&gt;&lt;td&gt;0.05&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/12 11:06:10&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=d08d20db-0dc8-444f-9a87-26bb8a557605'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"d08d20db-0dc8-444f-9a87-26bb8a557605\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;229&lt;/td&gt;&lt;td&gt;HQ01欢庆大地红 &lt;/td&gt;&lt;td&gt;11230l5C50&lt;/td&gt;&lt;td&gt;27.00&lt;/td&gt;&lt;td&gt;27.00&lt;/td&gt;&lt;td&gt;浏阳市瑞丰花炮厂&lt;/td&gt;&lt;td&gt;0l&lt;/td&gt;&lt;td&gt;0.05&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/11 11:54:58&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=24cacb9d-4a28-4b61-a6f6-1f9843c87eff'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"24cacb9d-4a28-4b61-a6f6-1f9843c87eff\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;230&lt;/td&gt;&lt;td&gt;幸福人家&lt;/td&gt;&lt;td&gt;19141D55X0&lt;/td&gt;&lt;td&gt;105.00&lt;/td&gt;&lt;td&gt;105.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1D&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/9 15:51:43&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=3d0b4f34-c9cd-45a9-9fbf-dc97f20406b3'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"3d0b4f34-c9cd-45a9-9fbf-dc97f20406b3\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;231&lt;/td&gt;&lt;td&gt;红星闪闪&lt;/td&gt;&lt;td&gt;12241E55X0&lt;/td&gt;&lt;td&gt;33.00&lt;/td&gt;&lt;td&gt;33.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1E&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/9 15:49:54&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=7c9c0aa1-caee-4dd8-b945-22e90cf25a0b'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"7c9c0aa1-caee-4dd8-b945-22e90cf25a0b\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;232&lt;/td&gt;&lt;td&gt;紫金之恋&lt;/td&gt;&lt;td&gt;16231F55X0&lt;/td&gt;&lt;td&gt;35.00&lt;/td&gt;&lt;td&gt;35.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1F&lt;/td&gt;&lt;td&gt;55&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/9 12:35:25&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=f4683c7c-f542-4579-b9b5-2cb536abc8d5'&gt;修改";
+
+        String msg6 = "&lt;/a&gt;&lt;a href='javascript:deletesp(\\\"f4683c7c-f542-4579-b9b5-2cb536abc8d5\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;233&lt;/td&gt;&lt;td&gt;好日子&lt;/td&gt;&lt;td&gt;12141755X0&lt;/td&gt;&lt;td&gt;100.00&lt;/td&gt;&lt;td&gt;100.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;17&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/9 12:28:52&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=359ed822-6781-412a-85c2-464d4652bf3e'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"359ed822-6781-412a-85c2-464d4652bf3e\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;234&lt;/td&gt;&lt;td&gt;HQ05欢庆大地红&lt;/td&gt;&lt;td&gt;11230x5C50&lt;/td&gt;&lt;td&gt;135.00&lt;/td&gt;&lt;td&gt;135.00&lt;/td&gt;&lt;td&gt;浏阳市瑞丰花炮厂&lt;/td&gt;&lt;td&gt;0x&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/8 17:02:21&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=9cd081d4-ce03-40a7-96f1-0b191469ed4a'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"9cd081d4-ce03-40a7-96f1-0b191469ed4a\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;235&lt;/td&gt;&lt;td&gt;福满堂特级环保红炮&lt;/td&gt;&lt;td&gt;1123145C50&lt;/td&gt;&lt;td&gt;650.00&lt;/td&gt;&lt;td&gt;650.00&lt;/td&gt;&lt;td&gt;浏阳市瑞丰花炮厂&lt;/td&gt;&lt;td&gt;14&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/8 16:15:13&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=d0820349-3e29-43f3-a093-581411749ddb'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"d0820349-3e29-43f3-a093-581411749ddb\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;236&lt;/td&gt;&lt;td&gt;黄金龙&lt;/td&gt;&lt;td&gt;12241655X0&lt;/td&gt;&lt;td&gt;65.00&lt;/td&gt;&lt;td&gt;65.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/2 12:30:48&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=dc2fe7f9-8d35-4320-8461-2955515be3c2'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"dc2fe7f9-8d35-4320-8461-2955515be3c2\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;237&lt;/td&gt;&lt;td&gt;万事如意&lt;/td&gt;&lt;td&gt;11232I20H0&lt;/td&gt;&lt;td&gt;75.00&lt;/td&gt;&lt;td&gt;75.00&lt;/td&gt;&lt;td&gt;江西省上栗县燕安出口烟花爆竹制造有限公司&lt;/td&gt;&lt;td&gt;2I&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/1 16:47:18&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=7a28a652-768b-410c-9e22-8dfd8657484c'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"7a28a652-768b-410c-9e22-8dfd8657484c\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;238&lt;/td&gt;&lt;td&gt;大吉大利高级大地红&lt;/td&gt;&lt;td&gt;11233J0520&lt;/td&gt;&lt;td&gt;38.00&lt;/td&gt;&lt;td&gt;38.00&lt;/td&gt;&lt;td&gt;湖南明义烟花集团有限公司&lt;/td&gt;&lt;td&gt;3J&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/1 14:46:50&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=79cd09f2-a010-451a-ba22-71751aa3bb0c'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"79cd09f2-a010-451a-ba22-71751aa3bb0c\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;239&lt;/td&gt;&lt;td&gt;万事如意高级大地红&lt;/td&gt;&lt;td&gt;11233K0520&lt;/td&gt;&lt;td&gt;75.00&lt;/td&gt;&lt;td&gt;75.00&lt;/td&gt;&lt;td&gt;湖南明义烟花集团有限公司&lt;/td&gt;&lt;td&gt;3K&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/1 14:41:00&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=b6e24322-a8f9-4478-b523-161cda922088'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"b6e24322-a8f9-4478-b523-161cda922088\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;240&lt;/td&gt;&lt;td&gt;大展宏图高级大地红&lt;/td&gt;&lt;td&gt;11233L0520&lt;/td&gt;&lt;td&gt;200.00&lt;/td&gt;&lt;td&gt;200.00&lt;/td&gt;&lt;td&gt;湖南明义烟花集团有限公司&lt;/td&gt;&lt;td&gt;3L&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/1 14:35:36&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=fd783ce9-c2a8-4b89-8b20-955642715ba4'&gt;修改";
+
+        String msg7 = "&lt;/a&gt;&lt;a href='javascript:deletesp(\\\"fd783ce9-c2a8-4b89-8b20-955642715ba4\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;241&lt;/td&gt;&lt;td&gt;富贵满堂高级大地红&lt;/td&gt;&lt;td&gt;11233M0520&lt;/td&gt;&lt;td&gt;380.00&lt;/td&gt;&lt;td&gt;380.00&lt;/td&gt;&lt;td&gt;湖南明义烟花集团有限公司&lt;/td&gt;&lt;td&gt;3M&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/1 14:33:47&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=b36a3b96-32f5-4151-9efd-184eec3d877c'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"b36a3b96-32f5-4151-9efd-184eec3d877c\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;242&lt;/td&gt;&lt;td&gt;36寸晨光花&lt;/td&gt;&lt;td&gt;16231A55X0&lt;/td&gt;&lt;td&gt;20.00&lt;/td&gt;&lt;td&gt;20.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1A&lt;/td&gt;&lt;td&gt;62&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/1 12:41:40&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=c9212706-7899-4a41-a10a-619607503e72'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"c9212706-7899-4a41-a10a-619607503e72\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;243&lt;/td&gt;&lt;td&gt;开心摇摆&lt;/td&gt;&lt;td&gt;16231B55X0&lt;/td&gt;&lt;td&gt;15.00&lt;/td&gt;&lt;td&gt;15.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1B&lt;/td&gt;&lt;td&gt;30&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/1 12:39:31&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=e2212198-b453-4342-9957-2e39376404bc'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"e2212198-b453-4342-9957-2e39376404bc\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;244&lt;/td&gt;&lt;td&gt;超级变变变&lt;/td&gt;&lt;td&gt;16231C55X0&lt;/td&gt;&lt;td&gt;30.00&lt;/td&gt;&lt;td&gt;30.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;1C&lt;/td&gt;&lt;td&gt;80&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/1 12:38:00&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=d2ab2ba2-786c-40e3-ba8d-84ce8afa6d29'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"d2ab2ba2-786c-40e3-ba8d-84ce8afa6d29\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;245&lt;/td&gt;&lt;td&gt;金牌火炬&lt;/td&gt;&lt;td&gt;12241555X0&lt;/td&gt;&lt;td&gt;50.00&lt;/td&gt;&lt;td&gt;50.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;15&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/1 12:32:51&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=6508c494-9d08-4339-8c57-b80839e45551'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"6508c494-9d08-4339-8c57-b80839e45551\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;246&lt;/td&gt;&lt;td&gt;五彩花火&lt;/td&gt;&lt;td&gt;16231955X0&lt;/td&gt;&lt;td&gt;20.00&lt;/td&gt;&lt;td&gt;20.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;19&lt;/td&gt;&lt;td&gt;56&lt;/td&gt;&lt;td&gt;线香类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/10/1 12:27:10&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=a7a3780a-726b-4f2e-805a-100526487f6a'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"a7a3780a-726b-4f2e-805a-100526487f6a\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;247&lt;/td&gt;&lt;td&gt;YA1000啄木鸟 &lt;/td&gt;&lt;td&gt;11231h20H0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;江西省上栗县燕安出口烟花爆竹制造有限公司&lt;/td&gt;&lt;td&gt;1h&lt;/td&gt;&lt;td&gt;0.05&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/9/10 10:54:21&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=b804c2c5-1ddd-4c92-841f-d4178900b944'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"b804c2c5-1ddd-4c92-841f-d4178900b944\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;248&lt;/td&gt;&lt;td&gt;岁岁如意&lt;/td&gt;&lt;td&gt;1213309024&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;浏阳市熊猫烟花有限公司&lt;/td&gt;&lt;td&gt;30&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C&lt;/td&gt;&lt;td&gt;2019/8/20 20:58:20&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=50c00ca6-3c18-4128-9c18-0c379285feb4'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"50c00ca6-3c18-4128-9c18-0c379285feb4\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;249&lt;/td&gt;&lt;td&gt;霹雳冰雹(大号)&lt;/td&gt;&lt;td&gt;16142w9024&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;浏阳市熊猫烟花有限公司&lt;/td&gt;&lt;td&gt;2w&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;造型玩具类&lt;/td&gt;&lt;td&gt;D&lt;/td&gt;&lt;td&gt;2019/8/20 20:56:33&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=f829306b-a3ca-45f3-be5d-dd36d7a9d6fa'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"f829306b-a3ca-45f3-be5d-dd36d7a9d6fa\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;250&lt;/td&gt;&lt;td&gt;18寸金色电光花&lt;/td&gt;&lt;td&gt;16242z9024&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;浏阳市熊猫烟花有限公司&lt;/td&gt;&lt;td&gt;2z&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;线香类&lt;/td&gt;&lt;td&gt;D&lt;/td&gt;&lt;td&gt;2019/8/20 20:55:00&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=fb333c1d-c143-483a-8d71-75015c4ff2a8'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"fb333c1d-c143-483a-8d71-75015c4ff2a8\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;251&lt;/td&gt;&lt;td&gt;14寸幸福狗尾草&lt;/td&gt;&lt;td&gt;1624319024&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;浏阳市熊猫烟花有限公司&lt;/td&gt;&lt;td&gt;31&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;线香类&lt;/td&gt;&lt;td&gt;D&lt;/td&gt;&lt;td&gt;2019/8/20 20:53:08&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=c5f79f07-b254-4281-8b42-703ac2d8dc8a'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"c5f79f07-b254-4281-8b42-703ac2d8dc8a\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;252&lt;/td&gt;&lt;td&gt;HQ02欢庆大地红&lt;/td&gt;&lt;td&gt;11230G4FX0&lt;/td&gt;&lt;td&gt;54.00&lt;/td&gt;&lt;td&gt;54.00&lt;/td&gt;&lt;td&gt;醴陵市福兴出口烟花鞭炮有限公司&lt;/td&gt;&lt;td&gt;0G&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/6/8 12:40:15&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=fd8ac5b5-a6d0-4a47-bf14-f47270fb1476'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"fd8ac5b5-a6d0-4a47-bf14-f47270fb1476\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;253&lt;/td&gt;&lt;td&gt;HQ01欢庆大地红&lt;/td&gt;&lt;td&gt;11230F4FX0&lt;/td&gt;&lt;td&gt;27.00&lt;/td&gt;&lt;td&gt;27.00&lt;/td&gt;&lt;td&gt;醴陵市福兴出口烟花鞭炮有限公司&lt;/td&gt;&lt;td&gt;0F&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/4/8 13:34:43&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=da5995c4-9c9d-4ab6-83cb-9f4a8dd09039'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"da5995c4-9c9d-4ab6-83cb-9f4a8dd09039\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;254&lt;/td&gt;&lt;td&gt;HQ06欢庆大地红&lt;/td&gt;&lt;td&gt;11230I4FX0&lt;/td&gt;&lt;td&gt;270.00&lt;/td&gt;&lt;td&gt;270.00&lt;/td&gt;&lt;td&gt;醴陵市福兴出口烟花鞭炮有限公司&lt;/td&gt;&lt;td&gt;0I&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/4/8 12:56:10&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=64f5259a-411f-4830-b655-574311e27096'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"64f5259a-411f-4830-b655-574311e27096\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;255&lt;/td&gt;&lt;td&gt;HQ05欢庆大地红&lt;/td&gt;&lt;td&gt;11230H4FX0&lt;/td&gt;&lt;td&gt;135.00&lt;/td&gt;&lt;td&gt;135.00&lt;/td&gt;&lt;td&gt;醴陵市福兴出口烟花炮有限公司&lt;/td&gt;&lt;td&gt;0H&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/4/8 12:54:56&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=898c1227-0140-4f96-be4b-ea341d7c7248'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"898c1227-0140-4f96-be4b-ea341d7c7248\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;256&lt;/td&gt;&lt;td&gt;YA1000大地红&lt;/td&gt;&lt;td&gt;11231i20H0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;江西省上栗县燕安出口烟花爆竹制造有限公司&lt;/td&gt;&lt;td&gt;1i&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/1/5 17:00:18&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=9d90d7bd-3691-4dde-bd8a-0eb4d9b49d37'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"9d90d7bd-3691-4dde-bd8a-0eb4d9b49d37\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;257&lt;/td&gt;&lt;td&gt;YA2000大地红&lt;/td&gt;&lt;td&gt;11231j20H0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;江西省上栗县燕安出口烟花爆竹制造有限公司&lt;/td&gt;&lt;td&gt;1j&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2019/1/5 16:58:40&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=dc82c97e-fdc2-465c-8d41-e6ade40e3e02'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"dc82c97e-fdc2-465c-8d41-e6ade40e3e02\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;258&lt;/td&gt;&lt;td&gt;JQ好日子&lt;/td&gt;&lt;td&gt;19239p39A0&lt;/td&gt;&lt;td&gt;1380.00&lt;/td&gt;&lt;td&gt;1380.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;9p&lt;/td&gt;&lt;td&gt;0.6&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/12/20 16:35:48&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=d59ea1e5-9235-4453-884d-54f408dc2610'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"d59ea1e5-9235-4453-884d-54f408dc2610\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;259&lt;/td&gt;&lt;td&gt;JQ章鱼奇遇记&lt;/td&gt;&lt;td&gt;12139x39A0&lt;/td&gt;&lt;td&gt;65.00&lt;/td&gt;&lt;td&gt;65.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;9x&lt;/td&gt;&lt;td&gt;0.12&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/12/20 11:38:01&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=f265857d-b47a-42ac-b3a6-ee1e737aeb69'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"f265857d-b47a-42ac-b3a6-ee1e737aeb69\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;260&lt;/td&gt;&lt;td&gt;JQ快乐烟花&lt;/td&gt;&lt;td&gt;12149w39A0&lt;/td&gt;&lt;td&gt;55.00&lt;/td&gt;&lt;td&gt;55.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;9x&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/12/20 10:17:25&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=37abae07-038a-4919-a60a-d180d6a379c4'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"37abae07-038a-4919-a60a-d180d6a379c4\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;261&lt;/td&gt;&lt;td&gt;JQ大吉大利&lt;/td&gt;&lt;td&gt;19239q39A0&lt;/td&gt;&lt;td&gt;1380.00&lt;/td&gt;&lt;td&gt;1380.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;9q&lt;/td&gt;&lt;td&gt;1.0&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/12/20 10:16:20&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=c6969930-b00c-44aa-9bd1-901f08a75c8a'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"c6969930-b00c-44aa-9bd1-901f08a75c8a\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;262&lt;/td&gt;&lt;td&gt;战神联盟幸福花系列&lt;/td&gt;&lt;td&gt;19239v39A0&lt;/td&gt;&lt;td&gt;60.00&lt;/td&gt;&lt;td&gt;60.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;9v&lt;/td&gt;&lt;td&gt;0.4&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/12/20 10:15:23&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=5f482af6-cc1e-4322-9de9-9d1d0805ca01'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"5f482af6-cc1e-4322-9de9-9d1d0805ca01\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;263&lt;/td&gt;&lt;td&gt;JQ黄金树&lt;/td&gt;&lt;td&gt;12139s39A0&lt;/td&gt;&lt;td&gt;110.00&lt;/td&gt;&lt;td&gt;110.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;9s&lt;/td&gt;&lt;td&gt;0.5&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/12/20 10:14:13&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=ae5462b9-e4f9-4526-8ce5-3c2644fb91b8'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"ae5462b9-e4f9-4526-8ce5-3c2644fb91b8\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;264&lt;/td&gt;&lt;td&gt;JQ孔雀开屏&lt;/td&gt;&lt;td&gt;12139n39A0&lt;/td&gt;&lt;td&gt;85.00&lt;/td&gt;&lt;td&gt;85.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;9n&lt;/td&gt;&lt;td&gt;0.08&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/12/14 13:29:13&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=18346660-b36e-4e0c-8d7f-048f4c21af8c'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"18346660-b36e-4e0c-8d7f-048f4c21af8c\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;265&lt;/td&gt;&lt;td&gt;JQ火树星桥&lt;/td&gt;&lt;td&gt;12139g39A0&lt;/td&gt;&lt;td&gt;165.00&lt;/td&gt;&lt;td&gt;165.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;9g&lt;/td&gt;&lt;td&gt;0.15&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/12/14 13:26:01&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=f0887458-cb53-4682-bfc2-4764945d36b2'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"f0887458-cb53-4682-bfc2-4764945d36b2\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;266&lt;/td&gt;&lt;td&gt;JQ愤怒的小鸟&lt;/td&gt;&lt;td&gt;16149m39A0&lt;/td&gt;&lt;td&gt;40.00&lt;/td&gt;&lt;td&gt;40.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;9m&lt;/td&gt;&lt;td&gt;0.05&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/12/14 12:59:00&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=34ec775b-aacb-4ebd-9b8f-a8e9de1e27ec'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"34ec775b-aacb-4ebd-9b8f-a8e9de1e27ec\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;267&lt;/td&gt;&lt;td&gt;小松鼠混装&lt;/td&gt;&lt;td&gt;13239Y39A0&lt;/td&gt;&lt;td&gt;23.00&lt;/td&gt;&lt;td&gt;23.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;9Y&lt;/td&gt;&lt;td&gt;0.05&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/12/13 14:10:34&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=9d7ba456-d9ee-4a29-8e2a-814a2be127b1'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"9d7ba456-d9ee-4a29-8e2a-814a2be127b1\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;268&lt;/td&gt;&lt;td&gt;莲花开&lt;/td&gt;&lt;td&gt;13239439A0&lt;/td&gt;&lt;td&gt;110.00&lt;/td&gt;&lt;td&gt;110.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;94&lt;/td&gt;&lt;td&gt;0.12&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/12/13 14:10:00&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=3b94770e-1a3e-484e-8fd5-c0ed9c61c5d5'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"3b94770e-1a3e-484e-8fd5-c0ed9c61c5d5\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;269&lt;/td&gt;&lt;td&gt;摇一摇&lt;/td&gt;&lt;td&gt;19134n39A0&lt;/td&gt;&lt;td&gt;100.00&lt;/td&gt;&lt;td&gt;100.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;4n&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/12/13 14:09:05&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=957356fa-8cd7-4cf6-b4ae-65e71f7f04b0'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"957356fa-8cd7-4cf6-b4ae-65e71f7f04b0\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;270&lt;/td&gt;&lt;td&gt;JQ恒达之花&lt;/td&gt;&lt;td&gt;12139i39A0&lt;/td&gt;&lt;td&gt;105.00&lt;/td&gt;&lt;td&gt;105.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;9i&lt;/td&gt;&lt;td&gt;0.15&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/12/13 13:31:48&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=a87d8958-36f3-480a-aea8-f3abd0e5e9f9'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"a87d8958-36f3-480a-aea8-f3abd0e5e9f9\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;271&lt;/td&gt;&lt;td&gt;JQ超级印象&lt;/td&gt;&lt;td&gt;12139c39A0&lt;/td&gt;&lt;td&gt;80.00&lt;/td&gt;&lt;td&gt;80.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;9c&lt;/td&gt;&lt;td&gt;0.11&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/12/13 13:27:02&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=5192abf4-7436-4842-a20b-de59cb24207d'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"5192abf4-7436-4842-a20b-de59cb24207d\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;272&lt;/td&gt;&lt;td&gt;JQ笑脸&lt;/td&gt;&lt;td&gt;19139d39A0&lt;/td&gt;&lt;td&gt;73.00&lt;/td&gt;&lt;td&gt;73.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;9d&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/12/13 12:58:09&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=1a635898-e95e-4bee-8ca4-4f5d1e110911'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"1a635898-e95e-4bee-8ca4-4f5d1e110911\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;273&lt;/td&gt;&lt;td&gt;96发豪门锦绣&lt;/td&gt;&lt;td&gt;19135d4JB0&lt;/td&gt;&lt;td&gt;698.00&lt;/td&gt;&lt;td&gt;698.00&lt;/td&gt;&lt;td&gt;万载县双宇烟花爆竹有限公司&lt;/td&gt;&lt;td&gt;5d&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/12/12 18:58:06&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=5e48f5ba-0b75-4451-bff2-5d99cecd0844'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"5e48f5ba-0b75-4451-bff2-5d99cecd0844\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;274&lt;/td&gt;&lt;td&gt;满地红光&lt;/td&gt;&lt;td&gt;13247B39A0&lt;/td&gt;&lt;td&gt;40.00&lt;/td&gt;&lt;td&gt;40.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;7B&lt;/td&gt;&lt;td&gt;0.05&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/12/12 14:11:12&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=3d891e36-3df0-4f7c-a427-753d443390e5'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"3d891e36-3df0-4f7c-a427-753d443390e5\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;275&lt;/td&gt;&lt;td&gt;我爱你&lt;/td&gt;&lt;td&gt;19133K39A0&lt;/td&gt;&lt;td&gt;235.00&lt;/td&gt;&lt;td&gt;235.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;3K&lt;/td&gt;&lt;td&gt;0.2&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/12/11 13:59:37&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=2bb94158-fa8d-4efd-8aab-6d56ad467f16'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"2bb94158-fa8d-4efd-8aab-6d56ad467f16\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;276&lt;/td&gt;&lt;td&gt;  顽皮兔好伙伴 &lt;/td&gt;&lt;td&gt;12138B39A0&lt;/td&gt;&lt;td&gt;50.00&lt;/td&gt;&lt;td&gt;50.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;8B&lt;/td&gt;&lt;td&gt;0.25&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/12/11 10:41:58&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=e3700026-3c50-4aa7-92c6-02510e4ce88c'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"e3700026-3c50-4aa7-92c6-02510e4ce88c\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;277&lt;/td&gt;&lt;td&gt;红花&lt;/td&gt;&lt;td&gt;12137z39A0&lt;/td&gt;&lt;td&gt;40.00&lt;/td&gt;&lt;td&gt;40.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;7z&lt;/td&gt;&lt;td&gt;0.6&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/12/10 10:40:19&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=6816a1bb-8477-45d7-845e-7488be8f62b1'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"6816a1bb-8477-45d7-845e-7488be8f62b1\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;278&lt;/td&gt;&lt;td&gt;七彩冰淇淋&lt;/td&gt;&lt;td&gt;12130Q39A0&lt;/td&gt;&lt;td&gt;80.00&lt;/td&gt;&lt;td&gt;80.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;0Q&lt;/td&gt;&lt;td&gt;0.16&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/12/5 14:04:30&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=a2b29f87-7b9c-4669-8639-903137b128d2'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"a2b29f87-7b9c-4669-8639-903137b128d2\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;279&lt;/td&gt;&lt;td&gt;满地珍珠&lt;/td&gt;&lt;td&gt;12133n39A0&lt;/td&gt;&lt;td&gt;50.00&lt;/td&gt;&lt;td&gt;50.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;3n&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/12/5 14:02:49&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=66b37ac6-e9ed-4c0d-929c-d23ee46995a4'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"66b37ac6-e9ed-4c0d-929c-d23ee46995a4\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;280&lt;/td&gt;&lt;td&gt;劲舞组合&lt;/td&gt;&lt;td&gt;12138h39A0&lt;/td&gt;&lt;td&gt;73.00&lt;/td&gt;&lt;td&gt;73.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;8h&lt;/td&gt;&lt;td&gt;0.14&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/12/4 14:08:08&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=09be6b23-fe1a-445d-a731-00da81f7334c'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"09be6b23-fe1a-445d-a731-00da81f7334c\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;281&lt;/td&gt;&lt;td&gt;一帆风顺&lt;/td&gt;&lt;td&gt;12130j39A0&lt;/td&gt;&lt;td&gt;115.00&lt;/td&gt;&lt;td&gt;115.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;0j&lt;/td&gt;&lt;td&gt;0.2&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/12/4 14:03:46&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=0cd4b4df-d461-43b0-892c-ea6699b3bb40'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"0cd4b4df-d461-43b0-892c-ea6699b3bb40\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;282&lt;/td&gt;&lt;td&gt;蘑菇宝贝&lt;/td&gt;&lt;td&gt;12137r39A0&lt;/td&gt;&lt;td&gt;72.00&lt;/td&gt;&lt;td&gt;72.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;7r&lt;/td&gt;&lt;td&gt;0.22&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/12/4 14:01:58&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=68ed7e15-07cb-4136-8c97-29f4a7d4eecf'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"68ed7e15-07cb-4136-8c97-29f4a7d4eecf\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;283&lt;/td&gt;&lt;td&gt;梅花瑞雪&lt;/td&gt;&lt;td&gt;19139T39A0&lt;/td&gt;&lt;td&gt;160.00&lt;/td&gt;&lt;td&gt;160.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;9T&lt;/td&gt;&lt;td&gt;0.18&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/12/4 14:00:27&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=527bba29-25ba-479c-84e6-8ddb58bb9875'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"527bba29-25ba-479c-84e6-8ddb58bb9875\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;284&lt;/td&gt;&lt;td&gt;雪娃娃&lt;/td&gt;&lt;td&gt;12139Q39A0&lt;/td&gt;&lt;td&gt;200.00&lt;/td&gt;&lt;td&gt;200.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;9Q&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/11/27 12:59:38&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=acfdcfd2-acf1-463b-8ced-830d1b33982d'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"acfdcfd2-acf1-463b-8ced-830d1b33982d\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;285&lt;/td&gt;&lt;td&gt;1号欢庆大地红&lt;/td&gt;&lt;td&gt;11235g2XQ0&lt;/td&gt;&lt;td&gt;36.00&lt;/td&gt;&lt;td&gt;36.00&lt;/td&gt;&lt;td&gt;萍乡市金泰花炮厂&lt;/td&gt;&lt;td&gt;5g&lt;/td&gt;&lt;td&gt;0.05&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/11/13 18:35:56&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=8ede079b-c923-4be1-a624-b95a1ee24702'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"8ede079b-c923-4be1-a624-b95a1ee24702\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;286&lt;/td&gt;&lt;td&gt;6号欢庆高级大地红&lt;/td&gt;&lt;td&gt;11235j2XQ0&lt;/td&gt;&lt;td&gt;360.00&lt;/td&gt;&lt;td&gt;360.00&lt;/td&gt;&lt;td&gt;萍乡市金泰花炮厂&lt;/td&gt;&lt;td&gt;5j&lt;/td&gt;&lt;td&gt;0.05&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/11/13 18:35:01&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=51183e5a-4b68-4010-bb19-8e47042bc2c1'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"51183e5a-4b68-4010-bb19-8e47042bc2c1\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;287&lt;/td&gt;&lt;td&gt;5号欢庆高级大地红&lt;/td&gt;&lt;td&gt;11235i2XQ0&lt;/td&gt;&lt;td&gt;180.00&lt;/td&gt;&lt;td&gt;180.00&lt;/td&gt;&lt;td&gt;萍乡市金泰花炮厂&lt;/td&gt;&lt;td&gt;5i&lt;/td&gt;&lt;td&gt;0.05&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/11/9 11:01:55&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=af2141d4-6f77-47b7-981e-6cf0a92309c8'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"af2141d4-6f77-47b7-981e-6cf0a92309c8\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;288&lt;/td&gt;&lt;td&gt;2号欢庆高级大地红&lt;/td&gt;&lt;td&gt;11235h2XQ0&lt;/td&gt;&lt;td&gt;72.00&lt;/td&gt;&lt;td&gt;72.00&lt;/td&gt;&lt;td&gt;萍乡市金泰花炮厂 &lt;/td&gt;&lt;td&gt;5h&lt;/td&gt;&lt;td&gt;0.05&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/11/9 11:00:30&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=a11d1c84-e76a-477d-957b-edccbe206d15'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"a11d1c84-e76a-477d-957b-edccbe206d15\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;289&lt;/td&gt;&lt;td&gt;HQ06欢庆大地红&lt;/td&gt;&lt;td&gt;11230p5C50&lt;/td&gt;&lt;td&gt;270.00&lt;/td&gt;&lt;td&gt;270.00&lt;/td&gt;&lt;td&gt;浏阳市瑞丰花炮厂&lt;/td&gt;&lt;td&gt;0p&lt;/td&gt;&lt;td&gt;0.05&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/11/3 11:04:23&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=55d1bb02-3684-4897-b5cf-9ba0215bf784'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"55d1bb02-3684-4897-b5cf-9ba0215bf784\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;290&lt;/td&gt;&lt;td&gt;金闪、银闪&lt;/td&gt;&lt;td&gt;12138039A0&lt;/td&gt;&lt;td&gt;40.00&lt;/td&gt;&lt;td&gt;40.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;80&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/11/2 13:01:29&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=d141de31-9e97-483d-888a-0e77786cfb94'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"d141de31-9e97-483d-888a-0e77786cfb94\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;291&lt;/td&gt;&lt;td&gt;30发带响彩珠筒&lt;/td&gt;&lt;td&gt;15130U55X0&lt;/td&gt;&lt;td&gt;45.00&lt;/td&gt;&lt;td&gt;45.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;0U&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/10/20 15:40:33&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=f3e6d3df-ebcf-4bba-a025-f86c867e2b02'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"f3e6d3df-ebcf-4bba-a025-f86c867e2b02\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;292&lt;/td&gt;&lt;td&gt;吉祥如意II型红地毯&lt;/td&gt;&lt;td&gt;11230z55X0&lt;/td&gt;&lt;td&gt;270.00&lt;/td&gt;&lt;td&gt;270.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;0z&lt;/td&gt;&lt;td&gt;0.05&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/10/20 12:19:45&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=d95e7bd0-34fb-441f-919a-11d02797c98b'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"d95e7bd0-34fb-441f-919a-11d02797c98b\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;293&lt;/td&gt;&lt;td&gt;小黄人&lt;/td&gt;&lt;td&gt;12130v39A0&lt;/td&gt;&lt;td&gt;115.00&lt;/td&gt;&lt;td&gt;115.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;0v&lt;/td&gt;&lt;td&gt;0.2&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/10/17 13:00:17&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=be1d916f-f2f1-402f-a843-b9d5c950de80'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"be1d916f-f2f1-402f-a843-b9d5c950de80\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;294&lt;/td&gt;&lt;td&gt;萌萌哒、么么哒&lt;/td&gt;&lt;td&gt;12132I39A0&lt;/td&gt;&lt;td&gt;70.00&lt;/td&gt;&lt;td&gt;70.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;2I&lt;/td&gt;&lt;td&gt;0.15&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/10/17 12:57:23&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=33df0934-76c9-4261-a04e-08a0c5fcd133'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"33df0934-76c9-4261-a04e-08a0c5fcd133\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;295&lt;/td&gt;&lt;td&gt;牛仔手枪&lt;/td&gt;&lt;td&gt;12233M39A0&lt;/td&gt;&lt;td&gt;50.00&lt;/td&gt;&lt;td&gt;50.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;3M&lt;/td&gt;&lt;td&gt;0.2&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/10/17 12:51:45&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=e28047ad-55b5-4c94-9b6d-493407d5d022'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"e28047ad-55b5-4c94-9b6d-493407d5d022\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;296&lt;/td&gt;&lt;td&gt;HQ05欢庆大地红&lt;/td&gt;&lt;td&gt;11230m5C50&lt;/td&gt;&lt;td&gt;135.00&lt;/td&gt;&lt;td&gt;135.00&lt;/td&gt;&lt;td&gt;浏阳市瑞丰花炮厂&lt;/td&gt;&lt;td&gt;0m&lt;/td&gt;&lt;td&gt;0.05&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/10/16 19:42:48&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=b569d857-501a-4595-ae2a-d486598e0b4f'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"b569d857-501a-4595-ae2a-d486598e0b4f\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;297&lt;/td&gt;&lt;td&gt;鼠来宝&lt;/td&gt;&lt;td&gt;12132J39A0&lt;/td&gt;&lt;td&gt;95.00&lt;/td&gt;&lt;td&gt;95.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;2J&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/10/16 12:58:16&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=27cc0dab-bf3e-4a9c-9e53-e367221ab946'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"27cc0dab-bf3e-4a9c-9e53-e367221ab946\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;298&lt;/td&gt;&lt;td&gt;大方方得利&lt;/td&gt;&lt;td&gt;19133H39A0&lt;/td&gt;&lt;td&gt;137.50&lt;/td&gt;&lt;td&gt;137.50&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;3H&lt;/td&gt;&lt;td&gt;0.5&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/10/16 12:55:57&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=a3a06d5b-3476-438b-92e9-4794e3b5acdf'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"a3a06d5b-3476-438b-92e9-4794e3b5acdf\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;299&lt;/td&gt;&lt;td&gt;魔幻宝塔2号&lt;/td&gt;&lt;td&gt;12135I39A0&lt;/td&gt;&lt;td&gt;150.00&lt;/td&gt;&lt;td&gt;150.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;5I&lt;/td&gt;&lt;td&gt;0.8&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/10/16 11:28:55&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=bcde1eed-5c67-4807-a6ee-b5e2ca1bd68d'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"bcde1eed-5c67-4807-a6ee-b5e2ca1bd68d\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;300&lt;/td&gt;&lt;td&gt;蝶恋花&lt;/td&gt;&lt;td&gt;19130k39A0&lt;/td&gt;&lt;td&gt;220.00&lt;/td&gt;&lt;td&gt;220.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;0k&lt;/td&gt;&lt;td&gt;0.8&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/10/16 11:27:01&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=7e1d2f1b-2e2a-43b9-aa4b-97eb98d85f06'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"7e1d2f1b-2e2a-43b9-aa4b-97eb98d85f06\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;301&lt;/td&gt;&lt;td&gt;功夫熊猫,青蛙王子&lt;/td&gt;&lt;td&gt;19134j39A0&lt;/td&gt;&lt;td&gt;110.00&lt;/td&gt;&lt;td&gt;110.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;4j&lt;/td&gt;&lt;td&gt;0.8&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/10/16 11:18:02&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=ea697c61-6bc1-4fa7-8081-b7bdd88531b8'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"ea697c61-6bc1-4fa7-8081-b7bdd88531b8\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;302&lt;/td&gt;&lt;td&gt;150发精彩绽放&lt;/td&gt;&lt;td&gt;1913644JB0&lt;/td&gt;&lt;td&gt;1080.00&lt;/td&gt;&lt;td&gt;1080.00&lt;/td&gt;&lt;td&gt;万载双宇烟花制造有限公司&lt;/td&gt;&lt;td&gt;64&lt;/td&gt;&lt;td&gt;0.9&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/10/15 17:39:20&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=82c72183-4ba4-4816-a342-f4424e3456bb'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"82c72183-4ba4-4816-a342-f4424e3456bb\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;303&lt;/td&gt;&lt;td&gt;100发红运连年&lt;/td&gt;&lt;td&gt;1913634JB0&lt;/td&gt;&lt;td&gt;720.00&lt;/td&gt;&lt;td&gt;720.00&lt;/td&gt;&lt;td&gt;万载县双宇烟花制造有限公司&lt;/td&gt;&lt;td&gt;63&lt;/td&gt;&lt;td&gt;0.8&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/10/15 17:38:02&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=b62558ef-64bc-41dc-89d4-4294a37a4d98'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"b62558ef-64bc-41dc-89d4-4294a37a4d98\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;304&lt;/td&gt;&lt;td&gt;80发吉祥如意&lt;/td&gt;&lt;td&gt;1913624JB0&lt;/td&gt;&lt;td&gt;576.00&lt;/td&gt;&lt;td&gt;576.00&lt;/td&gt;&lt;td&gt;万载县双宇烟花制造有限公司&lt;/td&gt;&lt;td&gt;62&lt;/td&gt;&lt;td&gt;0.8&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/10/15 17:36:36&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=877b9e87-a026-4796-8ae3-55c6ea109e15'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"877b9e87-a026-4796-8ae3-55c6ea109e15\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;305&lt;/td&gt;&lt;td&gt;HQ01欢庆大地红&lt;/td&gt;&lt;td&gt;11232420H0&lt;/td&gt;&lt;td&gt;27.00&lt;/td&gt;&lt;td&gt;27.00&lt;/td&gt;&lt;td&gt;江西省上栗县燕安出口烟花爆竹制造有限公司&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;0.05&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/10/15 12:50:16&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=c909197f-c53c-449f-b492-2aa47b5a4170'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"c909197f-c53c-449f-b492-2aa47b5a4170\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;306&lt;/td&gt;&lt;td&gt;48发喜气洋洋&lt;/td&gt;&lt;td&gt;1913614JB0&lt;/td&gt;&lt;td&gt;346.00&lt;/td&gt;&lt;td&gt;346.00&lt;/td&gt;&lt;td&gt;万载县双宇烟花制造有限公司&lt;/td&gt;&lt;td&gt;61&lt;/td&gt;&lt;td&gt;0.8&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/10/15 12:47:42&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=0bb9ef44-3f8e-410d-ba39-0f1e2a6bd9f0'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"0bb9ef44-3f8e-410d-ba39-0f1e2a6bd9f0\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;307&lt;/td&gt;&lt;td&gt;36发财源广进&lt;/td&gt;&lt;td&gt;1913604JB0&lt;/td&gt;&lt;td&gt;190.00&lt;/td&gt;&lt;td&gt;190.00&lt;/td&gt;&lt;td&gt;万载县双宇烟花制造有限公司&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;td&gt;0.8&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/10/15 12:45:14&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=1e4d920b-9303-4072-923d-3dabe291c87f'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"1e4d920b-9303-4072-923d-3dabe291c87f\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;308&lt;/td&gt;&lt;td&gt;96发豪门锦绣&lt;/td&gt;&lt;td&gt;1913664JB0&lt;/td&gt;&lt;td&gt;698.00&lt;/td&gt;&lt;td&gt;698.00&lt;/td&gt;&lt;td&gt;万载县双宇烟花制造有限公司&lt;/td&gt;&lt;td&gt;66&lt;/td&gt;&lt;td&gt;0.8&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/10/15 11:08:20&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=6167e128-0e14-4825-abf0-efb4ab1a0d79'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"6167e128-0e14-4825-abf0-efb4ab1a0d79\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;309&lt;/td&gt;&lt;td&gt;88发雪景&lt;/td&gt;&lt;td&gt;1913654JB0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;万载县双宇烟花制造有限公司&lt;/td&gt;&lt;td&gt;65&lt;/td&gt;&lt;td&gt;0.8&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/10/15 11:02:02&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=54681d1c-1a88-4002-bdf3-42b77da61606'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"54681d1c-1a88-4002-bdf3-42b77da61606\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;310&lt;/td&gt;&lt;td&gt;12发富贵红&lt;/td&gt;&lt;td&gt;1913694JB0&lt;/td&gt;&lt;td&gt;60.00&lt;/td&gt;&lt;td&gt;60.00&lt;/td&gt;&lt;td&gt;万载县双宇烟花制造有限公司&lt;/td&gt;&lt;td&gt;69&lt;/td&gt;&lt;td&gt;0.8&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/10/15 10:59:43&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=96c7690c-d50d-41cf-9247-1f8ef73564ae'&gt;修改";
+
+        String msg8 = "&lt;/a&gt;&lt;a href='javascript:deletesp(\\\"96c7690c-d50d-41cf-9247-1f8ef73564ae\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;311&lt;/td&gt;&lt;td&gt;9发好运来&lt;/td&gt;&lt;td&gt;1913684JB0&lt;/td&gt;&lt;td&gt;44.00&lt;/td&gt;&lt;td&gt;44.00&lt;/td&gt;&lt;td&gt;万载县双宇烟花制造有限公司&lt;/td&gt;&lt;td&gt;68&lt;/td&gt;&lt;td&gt;0.8&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/10/15 10:57:34&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=298e8922-0ab7-4734-a1e4-2f882366cc1c'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"298e8922-0ab7-4734-a1e4-2f882366cc1c\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;312&lt;/td&gt;&lt;td&gt;6发福满堂&lt;/td&gt;&lt;td&gt;1913674JB0&lt;/td&gt;&lt;td&gt;44.00&lt;/td&gt;&lt;td&gt;44.00&lt;/td&gt;&lt;td&gt;万载县双宇烟花制造有限公司&lt;/td&gt;&lt;td&gt;67&lt;/td&gt;&lt;td&gt;0.08&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/10/15 10:55:37&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=4674eaae-92fa-432b-8776-daf66915c19a'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"4674eaae-92fa-432b-8776-daf66915c19a\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;313&lt;/td&gt;&lt;td&gt;60公分精品红地毯&lt;/td&gt;&lt;td&gt;11230P5C50&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;浏阳市瑞丰花炮厂&lt;/td&gt;&lt;td&gt;0P&lt;/td&gt;&lt;td&gt;0.05&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/10/12 10:53:26&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=71139a05-6393-4ac5-9ab2-49e1ca5cf5bf'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"71139a05-6393-4ac5-9ab2-49e1ca5cf5bf\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;314&lt;/td&gt;&lt;td&gt;喜气洋洋I型红地毯&lt;/td&gt;&lt;td&gt;11230y55X0&lt;/td&gt;&lt;td&gt;135.00&lt;/td&gt;&lt;td&gt;135.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;0y&lt;/td&gt;&lt;td&gt;0.05&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/10/10 12:20:50&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=9474b806-5e94-4170-8720-515a52424a1e'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"9474b806-5e94-4170-8720-515a52424a1e\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;315&lt;/td&gt;&lt;td&gt;欢乐今宵(混装)&lt;/td&gt;&lt;td&gt;19231155X0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;0.8&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/10/10 12:18:33&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=e90904d7-e824-4441-9c51-30a36eea543b'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"e90904d7-e824-4441-9c51-30a36eea543b\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;316&lt;/td&gt;&lt;td&gt;贺新春(混装)&lt;/td&gt;&lt;td&gt;19231255X0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;0.8&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/10/10 12:17:36&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=3d693a30-fc40-47f7-8b5c-7f15f824ab6a'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"3d693a30-fc40-47f7-8b5c-7f15f824ab6a\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;317&lt;/td&gt;&lt;td&gt;HQ06欢庆大地红&lt;/td&gt;&lt;td&gt;11232820H0&lt;/td&gt;&lt;td&gt;270.00&lt;/td&gt;&lt;td&gt;270.00&lt;/td&gt;&lt;td&gt;江西省上栗县燕安出口烟花爆竹制造有限公司&lt;/td&gt;&lt;td&gt;28&lt;/td&gt;&lt;td&gt;0.05&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/10/5 12:59:23&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=be07ac68-3c0c-45fe-9f92-6cceeef0c76d'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"be07ac68-3c0c-45fe-9f92-6cceeef0c76d\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;318&lt;/td&gt;&lt;td&gt;HQ05欢庆大地红&lt;/td&gt;&lt;td&gt;11232720H0&lt;/td&gt;&lt;td&gt;135.00&lt;/td&gt;&lt;td&gt;135.00&lt;/td&gt;&lt;td&gt;江西省上栗县燕安出口烟花爆竹制造有限公司&lt;/td&gt;&lt;td&gt;27&lt;/td&gt;&lt;td&gt;0.05&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/9/29 12:57:22&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=aefd5541-d980-44f6-9375-38d756f9a05f'&gt;修改";
+
+        String msg9 = "&lt;/a&gt&lt;a href='javascript:deletesp(\\\"aefd5541-d980-44f6-9375-38d756f9a05f\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;319&lt;/td&gt;&lt;td&gt;HQ02欢庆大地红&lt;/td&gt;&lt;td&gt;11232520H0&lt;/td&gt;&lt;td&gt;54.00&lt;/td&gt;&lt;td&gt;54.00&lt;/td&gt;&lt;td&gt;江西省上栗县燕安出口烟花爆竹制造有限公司&lt;/td&gt;&lt;td&gt;25&lt;/td&gt;&lt;td&gt;0.05&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/9/20 12:54:09&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=27af9add-244f-4f48-b67d-c9ca846017ee'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"27af9add-244f-4f48-b67d-c9ca846017ee\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;320&lt;/td&gt;&lt;td&gt;欢庆红地毯II&lt;/td&gt;&lt;td&gt;11230w55X&lt;/td&gt;&lt;td&gt;270.00&lt;/td&gt;&lt;td&gt;270.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;0w&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;A级&lt;/td&gt;&lt;td&gt;2018/4/12 0:12:26&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=001e7005-f112-49f2-9613-5c47c7a759c9'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"001e7005-f112-49f2-9613-5c47c7a759c9\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;321&lt;/td&gt;&lt;td&gt;欢庆红地毯I&lt;/td&gt;&lt;td&gt;11230v55X0&lt;/td&gt;&lt;td&gt;135.00&lt;/td&gt;&lt;td&gt;135.00&lt;/td&gt;&lt;td&gt;浏阳市胡平美丹烟花制造有限公司&lt;/td&gt;&lt;td&gt;0v&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;爆竹类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/4/11 23:53:57&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=35f0a126-fc1e-4e20-b62d-d4a9aac6d2d0'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"35f0a126-fc1e-4e20-b62d-d4a9aac6d2d0\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;322&lt;/td&gt;&lt;td&gt;隐形战舰&lt;/td&gt;&lt;td&gt;16131t0CV0&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;北海强盛烟花有限公司&lt;/td&gt;&lt;td&gt;1t&lt;/td&gt;&lt;td&gt;0.00114&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/2/12 16:57:56&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=31d39b65-e328-467f-930b-b700c50d13f2'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"31d39b65-e328-467f-930b-b700c50d13f2\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;323&lt;/td&gt;&lt;td&gt;宝宝乐系列&lt;/td&gt;&lt;td&gt;12138t2L00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;浏阳市喜柏出口烟花制造有限公司&lt;/td&gt;&lt;td&gt;8t&lt;/td&gt;&lt;td&gt;0.3&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/2/11 16:28:12&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=a069976e-0962-4327-95ad-6aec0308e87f'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"a069976e-0962-4327-95ad-6aec0308e87f\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;324&lt;/td&gt;&lt;td&gt;雪娃娃&lt;/td&gt;&lt;td&gt;12133j2L00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;浏阳市喜柏出口烟花制造有限公司&lt;/td&gt;&lt;td&gt;3j&lt;/td&gt;&lt;td&gt;0.2&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/2/11 16:27:53&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=294c62c2-e394-473e-9fa4-c5b60030f282'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"294c62c2-e394-473e-9fa4-c5b60030f282\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;325&lt;/td&gt;&lt;td&gt;黄小鸭系列&lt;/td&gt;&lt;td&gt;1323062L00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;浏阳市喜柏出口烟花制造有限公司&lt;/td&gt;&lt;td&gt;06&lt;/td&gt;&lt;td&gt;0.3&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/2/11 16:27:35&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=5b95d58f-40fa-44d6-8e84-1fd43fd2942b'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"5b95d58f-40fa-44d6-8e84-1fd43fd2942b\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;326&lt;/td&gt;&lt;td&gt;富贵花&lt;/td&gt;&lt;td&gt;12138v2L00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;浏阳市喜柏出口烟花制造有限公司&lt;/td&gt;&lt;td&gt;8v&lt;/td&gt;&lt;td&gt;0.12&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/2/11 16:27:23&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=8b8bbf48-4782-4e69-a115-03ae02bce291'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"8b8bbf48-4782-4e69-a115-03ae02bce291\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;327&lt;/td&gt;&lt;td&gt;淘气熊系列&lt;/td&gt;&lt;td&gt;13238n2L00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;浏阳市喜柏出口烟花制造有限公司&lt;/td&gt;&lt;td&gt;8n&lt;/td&gt;&lt;td&gt;0.4&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/2/11 16:26:45&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=30e100d8-dbb0-48f1-a72f-cc3f72097b7f'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"30e100d8-dbb0-48f1-a72f-cc3f72097b7f\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;328&lt;/td&gt;&lt;td&gt;金钻王系列&lt;/td&gt;&lt;td&gt;12138y2L00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;浏阳市喜柏出口烟花制造有限公司&lt;/td&gt;&lt;td&gt;8y&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/2/11 16:26:35&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=4bd3f1e7-7e83-474b-81c3-af03aa3038f4'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"4bd3f1e7-7e83-474b-81c3-af03aa3038f4\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;329&lt;/td&gt;&lt;td&gt;精彩无限系列&lt;/td&gt;&lt;td&gt;12138p2L00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;浏阳市喜柏出口烟花制造有限公司&lt;/td&gt;&lt;td&gt;8p&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/2/11 16:25:52&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=cb215556-c73f-4eb5-9a97-0f5e96dbfa01'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"cb215556-c73f-4eb5-9a97-0f5e96dbfa01\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;330&lt;/td&gt;&lt;td&gt;贝贝啦系列&lt;/td&gt;&lt;td&gt;13238m2L00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;浏阳市喜柏出口烟花制造有限公司&lt;/td&gt;&lt;td&gt;8m&lt;/td&gt;&lt;td&gt;0.2&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/2/11 16:25:10&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=db014e0c-8c52-4d3f-8275-37a93c81b78a'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"db014e0c-8c52-4d3f-8275-37a93c81b78a\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;331&lt;/td&gt;&lt;td&gt;神探猫系列&lt;/td&gt;&lt;td&gt;12138q2L00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;浏阳市喜柏出口烟花制造有限公司&lt;/td&gt;&lt;td&gt;8q&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/2/11 16:24:58&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=9aaaaa8d-8d7e-4aa5-bb5d-17413616a48f'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"9aaaaa8d-8d7e-4aa5-bb5d-17413616a48f\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;332&lt;/td&gt;&lt;td&gt;快乐炫舞、笛音炫舞&lt;/td&gt;&lt;td&gt;13233q2L00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;0.00&lt;/td&gt;&lt;td&gt;浏阳市喜柏出口烟花制造有限公司&lt;/td&gt;&lt;td&gt;3q&lt;/td&gt;&lt;td&gt;0.2&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/2/11 16:24:57&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=9d141fac-d2d0-4464-99af-c863dc1a2a00'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"9d141fac-d2d0-4464-99af-c863dc1a2a00\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;333&lt;/td&gt;&lt;td&gt;大方方得利&lt;/td&gt;&lt;td&gt;19137p39A0&lt;/td&gt;&lt;td&gt;137.50&lt;/td&gt;&lt;td&gt;137.50&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;7p&lt;/td&gt;&lt;td&gt;0.1&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/2/8 10:20:16&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=4e8c8416-633d-4f51-8818-9d68054a4c5f'&gt;修改&lt;/a&gt;    &lt;a href='javascript:deletesp(\\\"4e8c8416-633d-4f51-8818-9d68054a4c5f\\\")'&gt;删除&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;334&lt;/td&gt;&lt;td&gt;JQ战神联盟&lt;/td&gt;&lt;td&gt;19248439A0&lt;/td&gt;&lt;td&gt;45.00&lt;/td&gt;&lt;td&gt;45.00&lt;/td&gt;&lt;td&gt;醴陵恒达烟花有限公司&lt;/td&gt;&lt;td&gt;84&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;喷花类&lt;/td&gt;&lt;td&gt;C级&lt;/td&gt;&lt;td&gt;2018/1/2 12:35:23&lt;/td&gt;&lt;td&gt;&lt;a href='chanpin_edit.aspx?id=e5e7ba13-9216-4cec-a54f-5ac84f25572a'&gt;修改";
+
+        List<String> idList = new ArrayList<> ();
+        idList.addAll(generateIdList(msg1));
+        idList.addAll(generateIdList(msg2));
+        idList.addAll(generateIdList(msg3));
+        idList.addAll(generateIdList(msg4));
+        idList.addAll(generateIdList(msg5));
+        idList.addAll(generateIdList(msg6));
+        idList.addAll(generateIdList(msg7));
+        idList.addAll(generateIdList(msg8));
+        idList.addAll(generateIdList(msg9));
+        for (String id : idList){
+            System.out.println(id);
+
+            String respnse = null;
+            Map params = new HashMap();
+            params.put("action", "chanpin_model");
+            params.put("id", id);
+            try {
+                respnse = HttpUtils.net("http://www.xjyhlx.com/ajax/ajax_yhxt.ashx", params, "GET");
+                JSONObject jsonResult = JSONObject.parseObject(respnse);
+                String info = jsonResult.getString("info");
+                String model = jsonResult.getString("model");
+                JSONObject jsonModel = JSONObject.parseObject(model);
+                ProductInfo productInfo = new ProductInfo();
+                productInfo.setName(jsonModel.getString("_pi_name"));
+                productInfo.setDirectionCode(jsonModel.getString("_pi_liuxiangma"));
+                productInfo.setPurchasePrice(jsonModel.getBigDecimal("_pi_bprice"));
+                productInfo.setSalePrice(jsonModel.getBigDecimal("_pi_sprice"));
+                productInfo.setManufacturer(jsonModel.getString("_pi_factory"));
+                productInfo.setSpecification(jsonModel.getString("_pi_spec"));
+                String dose = jsonModel.getString("_pi_dose");
+                if (StringUtils.isNotBlank(dose)){
+                    productInfo.setExplosiveContent(new BigDecimal(jsonModel.getString("_pi_dose").replace("g","")));
+                }
+                productInfo.setType(jsonModel.getString("_pi_category"));
+                productInfo.setLevel(jsonModel.getString("_pi_cgrade"));
+                productInfo.setProductDate(sdf.parse(jsonModel.getString("_pi_datetime")));
+                productInfo.setBoxNumber(jsonModel.getInteger("_pi_xiangshu"));
+                productInfo.setPacking(jsonModel.getString("_pi_baozhuangfangshi"));
+                productInfo.setIsDel((byte)0);
+                productInfo.setCreatedBy("系统生成");
+                productInfo.setModifiedBy("系统生成");
+                productInfo.setCreatedDate(new Date());
+                productInfo.setModifiedDate(new Date());
+                productService.save(productInfo);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+
+
+
+        }
+    }
+
+    private List<String> generateIdList(String msg) {
+        List<String>idList = new ArrayList<> ();
+
+        List<String> data = new ArrayList<>();
+        String[] str = msg.split("'&gt;修改");
+        for (int i = 0; i < str.length; i++) {
+            data.add(str[i]);
+        }
+
+        for (String dataStr : data) {
+            idList.add(dataStr.substring(dataStr.length()-36));
+        }
+        return idList;
+    }
+
+
+//    @Scheduled(cron = "0/5 * * * * ?")
+    private void Test111Task() throws IOException {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
+        String msg1 = "43,686,686,690,690,691,691,692,692,693,693,694,694,697,697,698,698,700,700,701,701,703,703,704,704,706,706,707,707,708,708,709,709,710,710,711,711,713,713,716,716,717,717,718,718,719,719,721,721,722,722,726,726,727,727,729,729,732,732,733,733,735,735,736,736,737,737,738,738,741,741,742,742,744,744,745,745,747,747,750,750,751,751,752,752,755,755,756,756,758,758,762,762,763,763,764,764,766,766,768,768,769,769,770,770,771,771,772,772,773,773,774,774,775,775,776,776,777,777,778,778,779,779,780,780,781,781,782,782,783,783,785,785,786,786,787,787,788,788,789,789,793,793,794,794,796,796,799,799,800,800,801,801,802,802,805,805,806,806,807,807,810,810,813,813,816,816,818,818,820,820,821,821,822,822,823,823,827,827,832,832,834,834,835,835,838,838,839,839,844,844,848,848,868,868,870,870,1044,1044,1046,1046,1201,1201,1210,1210,1265,1265,1266,1266,1268,1268,1269,1269,1270,1270,1271,1271,1272,1272,1273,1273,1274,1274,1275,1275,1278,1278,1279,1279,1280,1280,1384,1384,1387,1387,1389,1389,1570,1570,1706,1706,1707,1707,1722,1722,1724,1724,1728,1728,1730,1730,1731,1731,1732,1732,1735,1735,1736,1736,1737,1737,1754,1754,1766,1766,1942,1942,2019,2019,2058,2058,2063,2063,2098,2098,2101,2101,2102,2102,2103,2103,2104,2104,2105,2105,2106,2106,2107,2107,2108,2108,2109,2109,2110,2110,2139,2139,2168,2168,2169,2169,2206,2206,2236,2236,2311,2311,2374,2374,2376,2376,2380,2380,2382,2382,2383,2383,2384,2384,2387,2387,2388,2388,2389,2389,2390,2390,2391,2391,2392,2392,2393,2393,2394,2394,2395,2395,2396,2396,2397,2397,2399,2399,2400,2400,2401,2401,2402,2402,2403,2403,2404,2404,2405,2405,2406,2406,2407,2407,2408,2408,2409,2409,2410,2410,2411,2411,2412,2412,2413,2413,2414,2414,2415,2415,2416,2416,2417,2417,2418,2418,2419,2419,2420,2420,2421,2421,2422,2422,2423,2423,2424,2424,2425,2425,2426,2426,2427,2427,2428,2428,2429,2429,2430,2430,2431,2431,2432,2432,2433,2433,2434,2434,2435,2435,2436,2436,2437,2437,2438,2438,2441,2441,2442,2442,2443,2443,2444,2444,2445,2445,2446,2446,2447,2447,2448,2448,2449,2449,2450,2450,2451,2451,2452,2452,2453,2453,2454,2454,2456,2456,2457,2457,2458,2458,2459,2459,2460,2460,2461,2461,2462,2462,2463,2463,2464,2464,2465,2465,2466,2466,2467,2467,2468,2468,2469,2469,2470,2470,2471,2471,2472,2472,2473,2473,2474,2474,2475,2475,2476,2476,2477,2477,2478,2478,2479,2479,2480,2480,2481,2481,2482,2482,2483,2483,2484,2484,2485,2485,2486,2486,2487,2487,2488,2488,2489,2489,2490,2490,2491,2491,2492,2492,2493,2493,2494,2494,2495,2495,2496,2496,2497,2497,2498,2498,2499,2499,2500,2500,2501,2501,2502,2502,2503,2503,2504,2504,2505,2505,2506,2506,2507,2507,2508,2508,2509,2509,2510,2510,2511,2511,2512,2512,2513,2513,2514,2514,2515,2515,2516,2516,2517,2517,2518,2518,2520,2520,2521,2521";
+
+        List<String> idList = StringUtils.toList(msg1);
+        Set<String> set = new HashSet<>(idList);
+        List<String> ids = new ArrayList<>(set);
+
+        for (String id : ids){
+            String respnse = null;
+            Map params = new HashMap();
+            params.put("id", id);
+            try {
+                respnse = HttpUtils.net("http://www.xjyhlx.com/ajax/Businesses.ashx?action=Get", params, "POST");
+                JSONObject jsonResult = JSONObject.parseObject(respnse);
+                String entBase = jsonResult.getString("entBase");
+                JSONObject json = JSONObject.parseObject(entBase);
+                if (json == null){
+                    System.out.println("error,"+id);
+                }else {
+                    String name = json.getString("_name");
+                    String number = json.getString("_bs_id");
+
+                    String longitude = json.getString("_longitude");
+                    String latitude = json.getString("_latitude");
+                    Enterprise enterprise = enterpriseService.selectEnterpriseByNumber(number);
+                    if (enterprise !=  null) {
+                        enterprise.setLongitude(longitude);
+                        enterprise.setLatitude(latitude);
+                        enterpriseService.updateById(enterprise);
+                    }else {
+                        System.out.println(number+","+name+","+longitude + ","+latitude);
+                    }
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+
+
+
+        }
+    }
+}
diff --git a/src/main/java/com/gk/firework/Scheduls/WarningTask/MessageSendTask.java b/src/main/java/com/gk/firework/Scheduls/WarningTask/MessageSendTask.java
new file mode 100644
index 0000000..b6ccef4
--- /dev/null
+++ b/src/main/java/com/gk/firework/Scheduls/WarningTask/MessageSendTask.java
@@ -0,0 +1,317 @@
+package com.gk.firework.Scheduls.WarningTask;
+
+import com.alibaba.fastjson.JSONObject;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.Utils.HttpUtils;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Vo.WarnContentVo;
+import com.gk.firework.Service.*;
+import org.apache.log4j.LogManager;
+import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+
+@Configuration
+@EnableScheduling
+@ConditionalOnProperty(prefix = "scheduling",name = "enabled",havingValue = "true")
+public class MessageSendTask {
+    private Logger logger = LogManager.getLogger(MessageSendTask.class);
+    @Autowired
+    SmsLogService smsLogService;
+    @Autowired
+    WarnContentService warnContentService;
+    @Autowired
+    SaleOrderService saleOrderInfoService;
+    @Autowired
+    EnterpriseService enterpriseService;
+    @Autowired
+    UserService userService;
+    @Autowired
+    RegisterService registerService;
+
+    public static String key = "f89279278b739f972ed922fa708eafa0";
+    public final static String URL = "http://v.juhe.cn/sms/send";
+
+
+    @Scheduled(cron = "0/5 * * * * ?") //每隔5秒执行一次
+    private void EmailSend() throws UnsupportedEncodingException, InterruptedException {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        Date now = new Date();
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(now);
+        calendar.add(Calendar.MINUTE, -10);
+        Date starttime = calendar.getTime();
+        String starttimeStr = sdf.format(starttime);
+        String endtimeStr = sdf.format(now);
+
+        //查询10分钟内需要发短信,但又没发送过的记录
+        List<WarnContentVo> warnContentInfoList = warnContentService.selectNeedMail(starttimeStr,endtimeStr);
+        if (warnContentInfoList.size() > 0) {
+            for (WarnContentVo warnContentInfo : warnContentInfoList){
+                if (warnContentInfo.getWarntype().equals("购买超量")){
+                    Long enterpriseid = saleOrderInfoService.selectByCustomer(warnContentInfo.getCustomid());
+                    List<String> mobiles = selectMobilesByEnterprise(enterpriseid);
+                    String content = "姓名:"+warnContentInfo.getPurchasename()+",身份证号:"+warnContentInfo.getIdcard()+" "+warnContentInfo.getWarncontent();
+                    String head = "";
+                    boolean issend = sendMessage(head,mobiles,content);
+                    if (issend){
+                        warnContentInfo.setIssend((byte)1);
+                        warnContentService.updateById(warnContentInfo);
+                    }
+                }else if (warnContentInfo.getWarntype().equals("库存超量")){
+                    List<String> mobiles = selectMobilesByEnterprise(warnContentInfo.getEnterpriseid());
+                    String content = "企业名称:"+warnContentInfo.getEnterprisename()+","+warnContentInfo.getWarncontent();
+                    String head = "";
+                    boolean issend = sendMessage(head,mobiles,content);
+                    if (issend){
+                        warnContentInfo.setIssend((byte)1);
+                        warnContentService.updateById(warnContentInfo);
+                    }
+                }
+            }
+        }
+    }
+
+    @Scheduled(cron = "0/5 * * * * ?") //每隔5秒执行一次
+    private void registerEmailSend() throws UnsupportedEncodingException {
+        List<RegisterInfo> registerInfos = registerService.needSendSmsList();
+        if (registerInfos.size() > 0){
+            for (RegisterInfo registerInfo : registerInfos){
+                String tplId;
+                if (registerInfo.getReviewresult().equals((byte)1)){
+                    tplId = "235091";
+                }else {
+                    tplId = "235094";
+                }
+                boolean isSend = sendSms(registerInfo.getEnterprisename(),registerInfo.getLegalpersonphone(),tplId);
+                if (isSend){
+                    registerInfo.setSmsat(new Date());
+                    registerInfo.setSmstimes(registerInfo.getSmstimes()+1);
+                    registerInfo.setIssms((byte)1);
+                    registerService.updateById(registerInfo);
+                }
+            }
+        }
+
+    }
+
+//    private boolean issendTest = false;
+//    @Scheduled(cron = "0/5 * * * * ?") //每隔5秒执行一次
+//    private void EmailSendTest() throws UnsupportedEncodingException, InterruptedException {
+//        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+//        Date now = new Date();
+//        Calendar calendar = Calendar.getInstance();
+//        calendar.setTime(now);
+//        calendar.add(Calendar.MINUTE, -10);
+//        Date starttime = calendar.getTime();
+//
+//        List<String> mobiles = new ArrayList<>();
+//        mobiles.add("15651251027");
+//        String content = "测试短信";
+//        String head = "";
+//        if (!issendTest){
+//            issendTest = sendMessage(head,mobiles,content);
+//        }
+//    }
+
+
+
+    private List<String> selectMobilesByEnterprise(Long enterpriseid) {
+        List<String> mobiles = new ArrayList<> ();
+        //先查直属监管部门,若不存在则再查上一级,直到查到对应监管部门用户
+        Enterprise enterprise = enterpriseService.getById(enterpriseid);
+        UserInfo userInfo = userService.selectSupervise(enterprise.getProvince(),enterprise.getCity(),enterprise.getDistrict(),enterprise.getStreet(),enterprise.getCommittee());
+        if (userInfo == null){
+            userInfo = userService.selectSupervise(enterprise.getProvince(),enterprise.getCity(),enterprise.getDistrict(),enterprise.getStreet(),null);
+            if (userInfo == null){
+                userInfo = userService.selectSupervise(enterprise.getProvince(),enterprise.getCity(),enterprise.getDistrict(),null,null);
+                if (userInfo == null){
+                    userInfo = userService.selectSupervise(enterprise.getProvince(),enterprise.getCity(),null,null,null);
+                    if (userInfo == null){
+                        userInfo = userService.selectSupervise(enterprise.getProvince(),null,null,null,null);
+                        if (userInfo == null){
+                            userInfo = userService.selectSupervise(null,null,null,null,null);
+                        }
+                    }
+                }
+            }
+        }
+        if (userInfo != null && StringUtils.isNotBlank(userInfo.getMobile())){
+            mobiles.add(userInfo.getMobile());
+        }
+        return mobiles;
+    }
+
+
+    public Boolean sendMessage(String head,List<String> mobiles,String content) throws UnsupportedEncodingException {
+        String url ="http://v.juhe.cn/sms/send";//请求接口地址
+        String tpl_id = "231913";
+        String dtype = "json";
+        String tpl_value = "#name#=" + head + "&#code#=" + content;
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        SimpleDateFormat sdfstart = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
+        SimpleDateFormat sdfend = new SimpleDateFormat("yyyy-MM-dd 23:59:59");
+        Date now = new Date();
+        String starttime  = sdfstart.format(now);
+        String endtime = sdfend.format(now);
+
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(now);
+        calendar.add(Calendar.HOUR_OF_DAY, -1);
+        Date onehour = calendar.getTime();
+        String onehourstart = sdf.format(onehour);
+        String onehourend = sdf.format(now);
+
+        boolean issend = false;
+        for (String mobile : mobiles) {
+            /**运营商限制同1个号码同1个签名的内容1分钟内只能接收1条,10分钟3条,1小时内4条,一天20条,否则可能会被运营商屏蔽**/
+            SmsLogInfo smsLogInfo = smsLogService.selectByTel(mobile,starttime,endtime,(byte)2);
+            if (null != smsLogInfo && smsLogInfo.getTimes()>=20){
+                logger.error("手机号:" + mobile + ",在时间为" + sdf.format(now) + ",当天已发出20条,无法继续发送");
+                continue;
+            }
+            SmsLogInfo smsLogInfoHour = smsLogService.selectByTel(mobile,onehourstart,onehourend,(byte)1);
+            if (null != smsLogInfoHour && smsLogInfoHour.getTimes()>=4){
+                logger.error("手机号:" + mobile + ",在时间为" + sdf.format(now) + ",本小时已发出4条,无法继续发送");
+                continue;
+            }
+            String respnse = null;
+            Map params = new HashMap();//请求参数
+            params.put("mobile", mobile);//接收短信的手机号码
+            params.put("tpl_id", tpl_id);//短信模板ID,请参考个人中心短信模板设置
+            params.put("tpl_value", tpl_value);
+            params.put("key", key);//应用APPKEY(应用详细页查询)
+            params.put("dtype", dtype);//返回数据的格式,xml或json,默认json
+            try {
+                respnse = HttpUtils.net(url, params, "GET");
+                JSONObject jsonResult = JSONObject.parseObject(respnse);
+                String errorcode = jsonResult.getString("error_code");
+                String reason = jsonResult.getString("reason");
+                if (errorcode.equals("0")) {
+                    //增加发送次数
+                    JSONObject result = jsonResult.getJSONObject("result");
+                    Integer count = result.getInteger("count");
+                    if (null !=  smsLogInfo){
+                        smsLogInfo.setTimes(smsLogInfo.getTimes()+count);
+                        smsLogService.updateById(smsLogInfo);
+                    }else {
+                        SmsLogInfo smsLogInfo1 = new SmsLogInfo();
+                        smsLogInfo1.setMobile(mobile);
+                        smsLogInfo1.setSendtime(now);
+                        smsLogInfo1.setTimes(count);
+                        smsLogInfo1.setType((byte)2);
+                        smsLogService.save(smsLogInfo1);
+                    }
+                    issend = true;
+                    if (null !=  smsLogInfoHour){
+                        smsLogInfoHour.setTimes(smsLogInfoHour.getTimes()+count);
+                        smsLogService.updateById(smsLogInfoHour);
+                    }else {
+                        SmsLogInfo smsLogInfo1 = new SmsLogInfo();
+                        smsLogInfo1.setMobile(mobile);
+                        smsLogInfo1.setSendtime(now);
+                        smsLogInfo1.setTimes(count);
+                        smsLogInfo1.setType((byte)1);
+                        smsLogService.save(smsLogInfo1);
+                    }
+                } else {
+                    logger.error("手机号:" + mobile + ",在时间为" + sdf.format(now) + "发送短信失败,原因为:" + reason);
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return issend;
+    }
+
+    public Boolean sendSms(String head, String mobile, String tplId) throws UnsupportedEncodingException {
+        String dtype = "json";
+        String tplValue = "#name#=" + head;
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        SimpleDateFormat sdfstart = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
+        SimpleDateFormat sdfend = new SimpleDateFormat("yyyy-MM-dd 23:59:59");
+        Date now = new Date();
+        String starttime  = sdfstart.format(now);
+        String endtime = sdfend.format(now);
+
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(now);
+        calendar.add(Calendar.HOUR_OF_DAY, -1);
+        Date onehour = calendar.getTime();
+        String onehourstart = sdf.format(onehour);
+        String onehourend = sdf.format(now);
+
+        boolean isSend = false;
+
+        /** 运营商限制同1个号码同1个签名的内容1分钟内只能接收1条,10分钟3条,1小时内4条,一天20条,否则可能会被运营商屏蔽 **/
+        SmsLogInfo smsLogInfo = smsLogService.selectByTel(mobile,starttime,endtime,(byte)2);
+        if (null != smsLogInfo && smsLogInfo.getTimes()>= 20){
+            logger.error("手机号:" + mobile + ",在时间为" + sdf.format(now) + ",当天已发出20条,无法继续发送");
+            return false;
+        }
+        SmsLogInfo smsLogInfoHour = smsLogService.selectByTel(mobile,onehourstart,onehourend,(byte)1);
+        if (null != smsLogInfoHour && smsLogInfoHour.getTimes()>= 4){
+            logger.error("手机号:" + mobile + ",在时间为" + sdf.format(now) + ",本小时已发出4条,无法继续发送");
+            return false;
+        }
+        String response;
+        Map params = new HashMap();//请求参数
+        params.put("mobile", mobile);//接收短信的手机号码
+        params.put("tpl_id", tplId);//短信模板ID,请参考个人中心短信模板设置
+        params.put("tpl_value", tplValue);
+        params.put("key", key);//应用APPKEY(应用详细页查询)
+        params.put("dtype", dtype);//返回数据的格式,xml或json,默认json
+        try {
+            response = HttpUtils.net(URL, params, "GET");
+            JSONObject jsonResult = JSONObject.parseObject(response);
+            String errorcode = jsonResult.getString("error_code");
+            String reason = jsonResult.getString("reason");
+            if (errorcode.equals("0")) {
+                //增加发送次数
+                JSONObject result = jsonResult.getJSONObject("result");
+                Integer count = result.getInteger("count");
+                if (null !=  smsLogInfo){
+                    smsLogInfo.setTimes(smsLogInfo.getTimes()+count);
+                    smsLogService.updateById(smsLogInfo);
+                }else {
+                    SmsLogInfo smsLogInfo1 = new SmsLogInfo();
+                    smsLogInfo1.setMobile(mobile);
+                    smsLogInfo1.setSendtime(now);
+                    smsLogInfo1.setTimes(count);
+                    smsLogInfo1.setType((byte)2);
+                    smsLogService.save(smsLogInfo1);
+                }
+                isSend = true;
+                if (null !=  smsLogInfoHour){
+                    smsLogInfoHour.setTimes(smsLogInfoHour.getTimes()+count);
+                    smsLogService.updateById(smsLogInfoHour);
+                }else {
+                    SmsLogInfo smsLogInfo1 = new SmsLogInfo();
+                    smsLogInfo1.setMobile(mobile);
+                    smsLogInfo1.setSendtime(now);
+                    smsLogInfo1.setTimes(count);
+                    smsLogInfo1.setType((byte)1);
+                    smsLogService.save(smsLogInfo1);
+                }
+            } else {
+                logger.error("手机号:" + mobile + ",在时间为" + sdf.format(now) + "发送短信失败,原因为:" + reason);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return isSend;
+    }
+
+
+
+
+}
diff --git a/src/main/java/com/gk/firework/Scheduls/WarningTask/NoEntryWarnTask.java b/src/main/java/com/gk/firework/Scheduls/WarningTask/NoEntryWarnTask.java
new file mode 100644
index 0000000..289b23f
--- /dev/null
+++ b/src/main/java/com/gk/firework/Scheduls/WarningTask/NoEntryWarnTask.java
@@ -0,0 +1,71 @@
+package com.gk.firework.Scheduls.WarningTask;
+
+import com.gk.firework.Domain.Enterprise;
+import com.gk.firework.Domain.StockInfo;
+import com.gk.firework.Domain.Vo.NoEntryVo;
+import com.gk.firework.Domain.WarnContentInfo;
+import com.gk.firework.Service.EnterpriseService;
+import com.gk.firework.Service.StockService;
+import com.gk.firework.Service.WarnContentService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author : jingjy
+ * @date : 2021/6/16 15:55
+ */
+@Configuration
+@EnableScheduling
+@ConditionalOnProperty(prefix = "scheduling",name = "enabled",havingValue = "true")
+public class NoEntryWarnTask {
+
+    private static final String WARN_TYPE = "超期未入库";
+    private static final String WARN_LEVEL = "预警";
+    private static final Integer WARN_PERIOD = 30;
+    @Autowired
+    private EnterpriseService enterpriseService;
+    @Autowired
+    private WarnContentService warnContentService;
+    @Autowired
+    private StockService stockService;
+
+    @Scheduled(cron = "0 0 2 * * ?") //每天凌晨两点执行一次
+//    @Scheduled(cron = "0/5 * * * * ?") //每隔5秒执行一次
+    private void noEntryWarn(){
+        Calendar calendar = Calendar.getInstance();
+        Date date = new Date();
+        List<NoEntryVo> noEntryVos = stockService.selectNoEntryCount(calendar.getTime(),WARN_PERIOD);
+        for (NoEntryVo noEntryVo : noEntryVos){
+            insertWarnContent(noEntryVo,date);
+        }
+    }
+
+    private void insertWarnContent(NoEntryVo noEntryVo, Date date) {
+        Enterprise enterprise = enterpriseService.selectEnterpriseByName(noEntryVo.getName());
+        WarnContentInfo warnContentInfo = new WarnContentInfo();
+        warnContentInfo.setWarntype(WARN_TYPE);
+        warnContentInfo.setPeriod(WARN_PERIOD);
+        warnContentInfo.setEnterpriseid(enterprise.getId());
+        warnContentInfo.setWarnlevel(WARN_LEVEL);
+        warnContentInfo.setCreateddate(date);
+        warnContentInfo.setModifieddate(date);
+        warnContentInfo.setModifiedby("系统生成");
+        String content = noEntryVo.getName()+"有 "+noEntryVo.getNumber()+" 个产品出库超过30天没有进行入库操作!";
+        warnContentInfo.setWarncontent(content);
+
+        WarnContentInfo warnContentInfoExist = warnContentService.selectByWarn(WARN_TYPE,WARN_LEVEL,null,content);
+        if (warnContentInfoExist == null){
+            warnContentService.save(warnContentInfo);
+        }else {
+            warnContentInfoExist.setModifieddate(new Date());
+            warnContentService.updateById(warnContentInfoExist);
+        }
+    }
+}
diff --git a/src/main/java/com/gk/firework/Scheduls/WarningTask/PurchaseWarnTask.java b/src/main/java/com/gk/firework/Scheduls/WarningTask/PurchaseWarnTask.java
new file mode 100644
index 0000000..6c45365
--- /dev/null
+++ b/src/main/java/com/gk/firework/Scheduls/WarningTask/PurchaseWarnTask.java
@@ -0,0 +1,152 @@
+package com.gk.firework.Scheduls.WarningTask;
+
+import com.gk.firework.Domain.SaleOrderInfo;
+import com.gk.firework.Domain.WarnContentInfo;
+import com.gk.firework.Domain.WarningInfo;
+import com.gk.firework.Service.SaleOrderDetailService;
+import com.gk.firework.Service.SaleOrderService;
+import com.gk.firework.Service.WarnContentService;
+import com.gk.firework.Service.WarningService;
+import io.swagger.models.auth.In;
+import org.apache.log4j.LogManager;
+import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+import java.io.UnsupportedEncodingException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+@Configuration
+@EnableScheduling
+@ConditionalOnProperty(prefix = "scheduling",name = "enabled",havingValue = "true")
+public class PurchaseWarnTask {
+    private Logger logger = LogManager.getLogger(PurchaseWarnTask.class);
+    private static final String warnType = "购买超量";
+
+    @Autowired
+    WarningService warningService;
+    @Autowired
+    SaleOrderService saleOrderService;
+    @Autowired
+    WarnContentService warnContentService;
+
+//        @Scheduled(cron = "0/5 * * * * ?") //每隔30秒执行一次
+    @Scheduled(cron = "0 0/1 * * * ?") //每隔1分钟执行一次
+    private void purchaseWarn() throws Exception{
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        try {
+            List<WarningInfo> warningInfos = warningService.selectByType(warnType);
+            if (warningInfos.size() > 0){
+                for (WarningInfo warningInfo : warningInfos) {
+                    insertWarnContent(warningInfo);
+                }
+            }
+        }catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private void insertWarnContent(WarningInfo warningInfo) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        Date now = new Date();
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(now);
+        calendar.add(Calendar.DATE, -warningInfo.getPeriod());
+        Date starttime = calendar.getTime();
+        String starttimeStr = sdf.format(starttime);
+        String endttimeStr = sdf.format(now);
+        Integer min = warningInfo.getMinimum();
+        Integer max = warningInfo.getMaximum();
+        //超过预警值
+        List<SaleOrderInfo> earlyWarnList = saleOrderService.selectEarlyWarn(starttimeStr,endttimeStr,min,max);
+        if (earlyWarnList.size() > 0){
+            List<WarnContentInfo> warnContentInfos = new ArrayList<>();
+            for (SaleOrderInfo earlyWarn : earlyWarnList){
+                String warncontent = "超出购买限制,当前购买数量为"+earlyWarn.getBoxnum();
+                WarnContentInfo warnContentExist = warnContentService.selectByWarn(warnType,"预警",earlyWarn.getCustomer(),warncontent);
+                if (warnContentExist == null){
+                    WarnContentInfo warnContentInfo = new WarnContentInfo();
+                    warnContentInfo.setCustomid(earlyWarn.getCustomer());
+                    warnContentInfo.setWarncontent(warncontent);
+                    warnContentInfo.setWarntype(warnType);
+                    warnContentInfo.setWarnlevel("预警");
+                    warnContentInfo.setIsmend((byte) 0);
+                    warnContentInfo.setIsneed((byte) 0);
+                    warnContentInfo.setIssend((byte) 0);
+                    warnContentInfo.setModifiedby("系统生成");
+                    warnContentInfo.setModifieddate(new Date());
+                    warnContentInfo.setPeriod(warningInfo.getPeriod());
+                    warnContentInfo.setCreateddate(new Date());
+
+                    if (warnContentInfos.size() > 0){
+                        boolean isfound = false;
+                        for (WarnContentInfo warnContent : warnContentInfos){
+                            if (warnContent.getCustomid().equals(warnContentInfo.getCustomid())
+                                    && warnContent.getWarncontent().equals(warnContentInfo.getWarncontent())){
+                                isfound = true;
+                                break;
+                            }
+                        }
+                        if (!isfound){
+                            warnContentInfos.add(warnContentInfo);
+                        }
+                    }else {
+                        warnContentInfos.add(warnContentInfo);
+                    }
+                }
+            }
+            warnContentService.saveBatch(warnContentInfos);
+        }
+
+        //超过报警值
+        List<SaleOrderInfo> alarmList = saleOrderService.selectAlarm(starttimeStr,endttimeStr,max);
+        if (alarmList.size() > 0){
+            Byte issms = warningInfo.getIssms();
+            List<WarnContentInfo> warnContentInfos = new ArrayList<>();
+            for (SaleOrderInfo alarm : alarmList){
+                String warncontent = "超出购买限制,当前购买数量为"+alarm.getBoxnum();
+                WarnContentInfo warnContentExist = warnContentService.selectByWarn(warnType,"报警",alarm.getCustomer(),warncontent);
+                if (warnContentExist == null){
+                    WarnContentInfo warnContentInfo = new WarnContentInfo();
+                    warnContentInfo.setCustomid(alarm.getCustomer());
+                    warnContentInfo.setWarncontent(warncontent);
+                    warnContentInfo.setWarntype(warnType);
+                    warnContentInfo.setWarnlevel("报警");
+                    warnContentInfo.setIsmend((byte)0);
+                    warnContentInfo.setIsneed(issms);
+                    warnContentInfo.setIssend((byte)0);
+                    warnContentInfo.setModifiedby("系统生成");
+                    warnContentInfo.setModifieddate(new Date());
+                    warnContentInfo.setPeriod(warningInfo.getPeriod());
+                    warnContentInfo.setCreateddate(new Date());
+
+                    if (warnContentInfos.size() > 0){
+                        boolean isfound = false;
+                        for (WarnContentInfo warnContent : warnContentInfos){
+                            if (warnContent.getCustomid().equals(warnContentInfo.getCustomid())
+                                    && warnContent.getWarncontent().equals(warnContentInfo.getWarncontent())){
+                                isfound = true;
+                                break;
+                            }
+                        }
+                        if (!isfound){
+                            warnContentInfos.add(warnContentInfo);
+                        }
+                    }else {
+                        warnContentInfos.add(warnContentInfo);
+                    }
+                }
+            }
+
+            warnContentService.saveBatch(warnContentInfos);
+        }
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Scheduls/WarningTask/StockWarnTask.java b/src/main/java/com/gk/firework/Scheduls/WarningTask/StockWarnTask.java
new file mode 100644
index 0000000..895c403
--- /dev/null
+++ b/src/main/java/com/gk/firework/Scheduls/WarningTask/StockWarnTask.java
@@ -0,0 +1,148 @@
+package com.gk.firework.Scheduls.WarningTask;
+
+
+import com.gk.firework.Domain.StockInfo;
+import com.gk.firework.Domain.WarnContentInfo;
+import com.gk.firework.Domain.WarningInfo;
+import com.gk.firework.Service.SaleOrderService;
+import com.gk.firework.Service.StockService;
+import com.gk.firework.Service.WarnContentService;
+import com.gk.firework.Service.WarningService;
+import org.apache.log4j.LogManager;
+import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+import java.io.UnsupportedEncodingException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+@Configuration
+@EnableScheduling
+@ConditionalOnProperty(prefix = "scheduling",name = "enabled",havingValue = "true")
+public class StockWarnTask {
+    private Logger logger = LogManager.getLogger(StockWarnTask.class);
+    private static final String warnType = "库存超量";
+
+    @Autowired
+    WarningService warningService;
+    @Autowired
+    SaleOrderService saleOrderService;
+    @Autowired
+    WarnContentService warnContentService;
+    @Autowired
+    StockService stockService;
+
+//    @Scheduled(cron = "0/20 * * * * ?") //每隔5秒执行一次
+    @Scheduled(cron = "0 0 2 * * ?") //每天凌晨两点执行一次
+    private void purchaseWarn() throws Exception{
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        try {
+            List<WarningInfo> warningInfos = warningService.selectByType(warnType);
+            if (warningInfos.size() > 0){
+                for (WarningInfo warningInfo : warningInfos){
+                    insertWarnContent(warningInfo);
+                }
+            }
+        }catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private void insertWarnContent(WarningInfo warningInfo) {
+        Integer min = warningInfo.getMinimum();
+        Integer max = warningInfo.getMaximum();
+        List<Integer> slices = new ArrayList<>();
+        for (int i = 1; i < 21; i++){
+            slices.add(i);
+        }
+        //超过预警值
+        List<StockInfo> earlyWarnList = stockService.selectEarlyWarn(min,max,warningInfo.getEnterprisetype(),slices);
+        if (earlyWarnList.size() > 0){
+            List<WarnContentInfo> warnContentInfos = new ArrayList<>();
+            for (StockInfo stockInfo : earlyWarnList) {
+                String warncontent = "超出库存限制,当前库存总数为"+stockInfo.getNum();
+                WarnContentInfo warnContentExist = warnContentService.selectByEnterpriseWarn(warnType,"预警",Long.parseLong(stockInfo.getOwner()),warncontent);
+                if (warnContentExist == null) {
+                    WarnContentInfo warnContentInfo = new WarnContentInfo();
+                    warnContentInfo.setWarntype(warnType);
+                    warnContentInfo.setWarnlevel("预警");
+                    warnContentInfo.setEnterpriseid(Long.parseLong(stockInfo.getOwner()));
+                    warnContentInfo.setWarncontent(warncontent);
+                    warnContentInfo.setIsmend((byte) 0);
+                    warnContentInfo.setIsneed((byte) 0);
+                    warnContentInfo.setIssend((byte) 0);
+                    warnContentInfo.setModifiedby("系统生成");
+                    warnContentInfo.setModifieddate(new Date());
+                    warnContentInfo.setCreateddate(new Date());
+
+                    if (warnContentInfos.size() > 0){
+                        boolean isfound = false;
+                        for (WarnContentInfo warnContent : warnContentInfos){
+                            if (warnContent.getEnterpriseid().equals(warnContentInfo.getEnterpriseid())
+                                    && warnContent.getWarncontent().equals(warnContentInfo.getWarncontent())){
+                                isfound = true;
+                                break;
+                            }
+                        }
+                        if (!isfound){
+                            warnContentInfos.add(warnContentInfo);
+                        }
+                    }else {
+                        warnContentInfos.add(warnContentInfo);
+                    }
+                }
+            }
+            warnContentService.saveBatch(warnContentInfos);
+        }
+        //超过报警值
+        List<StockInfo> alarmList = stockService.selectAlarm(max,warningInfo.getEnterprisetype(),slices);
+        if (alarmList.size() > 0){
+            List<WarnContentInfo> warnContentInfos = new ArrayList<>();
+            Byte issms = warningInfo.getIssms();
+            for (StockInfo stockInfo : alarmList) {
+                String warncontent = "超出库存限制,当前库存总数为"+stockInfo.getNum();
+                WarnContentInfo warnContentExist = warnContentService.selectByEnterpriseWarn(warnType,"报警",Long.parseLong(stockInfo.getOwner()),warncontent);
+                if (warnContentExist == null) {
+                    WarnContentInfo warnContentInfo = new WarnContentInfo();
+                    warnContentInfo.setWarntype(warnType);
+                    warnContentInfo.setWarnlevel("报警");
+                    warnContentInfo.setEnterpriseid(Long.parseLong(stockInfo.getOwner()));
+                    warnContentInfo.setWarncontent(warncontent);
+                    warnContentInfo.setIsmend((byte) 0);
+                    warnContentInfo.setIsneed(issms);
+                    warnContentInfo.setIssend((byte) 0);
+                    warnContentInfo.setModifiedby("系统生成");
+                    warnContentInfo.setModifieddate(new Date());
+                    warnContentInfo.setCreateddate(new Date());
+
+                    if (warnContentInfos.size() > 0){
+                        boolean isfound = false;
+                        for (WarnContentInfo warnContent : warnContentInfos){
+                            if (warnContent.getEnterpriseid().equals(warnContentInfo.getEnterpriseid())
+                                    && warnContent.getWarncontent().equals(warnContentInfo.getWarncontent())){
+                                isfound = true;
+                                break;
+                            }
+                        }
+                        if (!isfound){
+                            warnContentInfos.add(warnContentInfo);
+                        }
+                    }else {
+                        warnContentInfos.add(warnContentInfo);
+                    }
+                }
+            }
+            warnContentService.saveBatch(warnContentInfos);
+        }
+    }
+
+
+
+}
diff --git a/src/main/java/com/gk/firework/Scheduls/WarningTask/TransportWarnTask.java b/src/main/java/com/gk/firework/Scheduls/WarningTask/TransportWarnTask.java
new file mode 100644
index 0000000..f1e5bc8
--- /dev/null
+++ b/src/main/java/com/gk/firework/Scheduls/WarningTask/TransportWarnTask.java
@@ -0,0 +1,95 @@
+package com.gk.firework.Scheduls.WarningTask;
+
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.Enum.CertificateStatus;
+import com.gk.firework.Service.*;
+import org.apache.log4j.LogManager;
+import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author : jingjy
+ * @date : 2021/6/11 14:16
+ */
+@Configuration
+@EnableScheduling
+@ConditionalOnProperty(prefix = "scheduling",name = "enabled",havingValue = "true")
+public class TransportWarnTask {
+    private Logger logger = LogManager.getLogger(StockWarnTask.class);
+    private static final String WARN_TYPE = "运输证超期";
+    private static final String WARN_LEVEL = "预警";
+    private static final Integer WARN_PERIOD = 30;
+    @Autowired
+    private TransportCertService transportCertService;
+    @Autowired
+    private TransportCertificateService transportCertificateService;
+    @Autowired
+    private EnterpriseService enterpriseService;
+    @Autowired
+    private WarnContentService warnContentService;
+    @Autowired
+    private EntryService entryService;
+
+    @Scheduled(cron = "0 0 2 * * ?") //每天凌晨两点执行一次
+    private void transportWarn(){
+        Calendar calendar = Calendar.getInstance();
+        Date date = new Date();
+        calendar.setTime(date);
+        calendar.set(Calendar.DATE,calendar.get(Calendar.DATE) - 15);
+        try {
+            List<TransportCert> transportCerts = transportCertService.selectWarnList(calendar.getTime(),date);
+            for (TransportCert transportCert : transportCerts){
+                Boolean isEntry = entryService.isTransportCertEntry(transportCert.getCode());
+                if (!isEntry && transportCert.getprocesstime().getTime() < date.getTime()){
+                    insertWarnContent(transportCert.getEnterprisenumber(),transportCert.getCreatebyname(),transportCert.getCode(),
+                            transportCert.getprocesstime(),date);
+                }
+            }
+
+            List<TransportCertificate> certificates = transportCertificateService.selectWarnList(calendar.getTime(),date);
+            for (TransportCertificate certificate : certificates){
+                Boolean isEntry = entryService.isTransportCertEntry(certificate.getCode());
+                if (!isEntry && certificate.getDeadline().getTime() < date.getTime()){
+                    insertWarnContent(certificate.getEnterprisenumber(),certificate.getCreatebyname(),
+                            certificate.getCode(),certificate.getDeadline(),date);
+                }
+            }
+        }catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private void insertWarnContent(String enterpriseNumber, String createByName, String code, Date deadline, Date date) {
+        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd:HH:mm:ss");
+        String deadlineStr = dateFormat.format(deadline);
+        Enterprise enterprise = enterpriseService.selectEnterpriseByNumber(enterpriseNumber);
+        WarnContentInfo warnContentInfo = new WarnContentInfo();
+        warnContentInfo.setWarntype(WARN_TYPE);
+        warnContentInfo.setPeriod(WARN_PERIOD);
+        warnContentInfo.setEnterpriseid(enterprise.getId());
+        warnContentInfo.setWarnlevel(WARN_LEVEL);
+        warnContentInfo.setCreateddate(date);
+        warnContentInfo.setModifieddate(date);
+        warnContentInfo.setModifiedby("系统生成");
+        String content = createByName+"申请的运输证:"
+                +code+"预计送达时间:"+deadlineStr+",超期未入库!";
+        warnContentInfo.setWarncontent(content);
+
+        WarnContentInfo warnContentInfoExist = warnContentService.selectByWarn(WARN_TYPE,WARN_LEVEL,null,content);
+        if (warnContentInfoExist == null){
+            warnContentService.save(warnContentInfo);
+        }
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Service/AccessAssessApplyService.java b/src/main/java/com/gk/firework/Service/AccessAssessApplyService.java
new file mode 100644
index 0000000..f36c22e
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/AccessAssessApplyService.java
@@ -0,0 +1,35 @@
+package com.gk.firework.Service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.AccessAssessApply;
+import com.gk.firework.Domain.AssessApply;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Vo.AssessApplyAppealVo;
+
+import java.util.List;
+import java.util.Map;
+
+public interface AccessAssessApplyService extends IService<AccessAssessApply> {
+
+    IPage selectAccessPages(Page<AccessAssessApply> page, Map filter, UserInfo user);
+
+    void AccessAppeal(AccessAssessApply accessAccessApply, UserInfo user);
+
+    IPage selectAccessAppealPages(Page<AssessApplyAppealVo> page, Map filter, UserInfo user);
+
+    void approveAccessAssessApply(JSONObject entity, UserInfo user);
+
+    void rejectAccessAssessApply(JSONObject entity, UserInfo user);
+
+    void appealAccessPass(Long id, UserInfo user);
+
+    void appealAccessReject(JSONObject entity, UserInfo user);
+
+    List<AccessAssessApply> selectAllOverTimeAccessAssessApply();
+
+    List<AccessAssessApply> selectAllPunishingAccessAssessApply();
+
+}
diff --git a/src/main/java/com/gk/firework/Service/AppFileService.java b/src/main/java/com/gk/firework/Service/AppFileService.java
new file mode 100644
index 0000000..376ec4d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/AppFileService.java
@@ -0,0 +1,12 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.AppFileInfo;
+import com.gk.firework.Domain.Utils.PageInfo;
+
+public interface AppFileService extends IService<AppFileInfo> {
+
+    void selectDataGrid(PageInfo pageInfo);
+
+    AppFileInfo selectNew(String filetype);
+}
diff --git a/src/main/java/com/gk/firework/Service/AssessApplyService.java b/src/main/java/com/gk/firework/Service/AssessApplyService.java
new file mode 100644
index 0000000..08b9a81
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/AssessApplyService.java
@@ -0,0 +1,38 @@
+package com.gk.firework.Service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.AccessAssessApply;
+import com.gk.firework.Domain.AssessApply;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Vo.AssessApplyAppealVo;
+
+import java.util.List;
+import java.util.Map;
+
+
+public interface AssessApplyService extends IService<AssessApply> {
+
+    void addSaleAssessApply(AssessApply assessApply, UserInfo user);
+
+    void modSaleAssessApply(AssessApply assessApply, UserInfo user);
+
+    void submitSaleAssessApply(Long id, UserInfo user);
+
+    void approveSaleAssessApply(JSONObject entity, UserInfo user);
+
+    void rejectSaleAssessApply(JSONObject entity, UserInfo user);
+
+    IPage selectSalePages(Page<AssessApply> page, Map filter, UserInfo user);
+
+    void addAccessAssessApply(AssessApply assessApply, UserInfo user);
+
+    void modAccessAssessApply(AssessApply assessApply, UserInfo user);
+
+    void submitAccessAssessApply(Long id, UserInfo user);
+
+    List<AssessApply> selectAllPunishingSaleAssessApply();
+
+}
diff --git a/src/main/java/com/gk/firework/Service/AuthorizationService.java b/src/main/java/com/gk/firework/Service/AuthorizationService.java
new file mode 100644
index 0000000..b538cf2
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/AuthorizationService.java
@@ -0,0 +1,22 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.AuthorizationInfo;
+import com.gk.firework.Mapper.AuthorizationInfoMapper;
+
+import java.util.List;
+
+/**
+ * @author : jingjy
+ * @date : 2021/7/2 9:41
+ */
+public interface AuthorizationService extends IService<AuthorizationInfo> {
+
+    AuthorizationInfo selectByUser(String enterprisenumber, String authcode);
+
+    List<AuthorizationInfo> getAuthByEnterprise(String enterpriseNumber);
+
+    boolean checkPrefixExist(String prefix);
+
+    boolean checkCodeExist(String code);
+}
diff --git a/src/main/java/com/gk/firework/Service/BlackListService.java b/src/main/java/com/gk/firework/Service/BlackListService.java
new file mode 100644
index 0000000..cfd3be1
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/BlackListService.java
@@ -0,0 +1,21 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.BlackList;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.FilterObject;
+
+import java.util.Map;
+
+public interface BlackListService extends IService<BlackList> {
+
+    void addBlackList(BlackList blackList, UserInfo user);
+
+    void delBlackList(Long id, UserInfo user);
+
+    IPage selectPages(Page<BlackList> page, Map filter, UserInfo user);
+
+    BlackList getByEnterprisenumber(String enterprisenumber);
+}
diff --git a/src/main/java/com/gk/firework/Service/ContractDetailService.java b/src/main/java/com/gk/firework/Service/ContractDetailService.java
new file mode 100644
index 0000000..3fbb813
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ContractDetailService.java
@@ -0,0 +1,19 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.ContractDetailInfo;
+import com.gk.firework.Domain.Vo.ProductVo;
+
+import java.util.Date;
+import java.util.List;
+
+public interface ContractDetailService extends IService<ContractDetailInfo> {
+
+    void deleteByOrder(String ordercode);
+
+    List<ProductVo> selectByOrder(String ordercode);
+
+    void updateChangNum(String ordercode,String productCode, Integer returnNum);
+
+    List<ContractDetailInfo> selectAllDetailAtSpecificDate(String productCode, Date producedate);
+}
diff --git a/src/main/java/com/gk/firework/Service/ContractFileService.java b/src/main/java/com/gk/firework/Service/ContractFileService.java
new file mode 100644
index 0000000..2517ce1
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ContractFileService.java
@@ -0,0 +1,13 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.ContractFile;
+
+import java.util.List;
+
+public interface ContractFileService extends IService<ContractFile>{
+
+    ContractFile selectByOrderCode(String ordercode);
+
+    void deleteAll(String ordercode);
+}
diff --git a/src/main/java/com/gk/firework/Service/ContractLogService.java b/src/main/java/com/gk/firework/Service/ContractLogService.java
new file mode 100644
index 0000000..5a15b54
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ContractLogService.java
@@ -0,0 +1,10 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.ContractLogInfo;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Vo.ContractOrderVo;
+
+public interface ContractLogService extends IService<ContractLogInfo> {
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ContractOrderService.java b/src/main/java/com/gk/firework/Service/ContractOrderService.java
new file mode 100644
index 0000000..1f5ffd7
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ContractOrderService.java
@@ -0,0 +1,40 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.ContractOrderInfo;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Vo.ContractOrderVo;
+import com.gk.firework.Domain.Vo.ProductCodePrint;
+import com.gk.firework.Domain.Vo.ProductCodeVo;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.Date;
+import java.util.List;
+
+public interface ContractOrderService extends IService<ContractOrderInfo> {
+
+    void selectDataGrid(PageInfo pageInfo);
+
+    List<ContractOrderInfo> selectByStatus(String status, String now);
+
+    ContractOrderInfo selectByOrderCode(String ordercode);
+
+    void addApply(ContractOrderVo contractOrderVo, UserInfo user);
+
+    void putApply(ContractOrderVo contractOrderVo, UserInfo user);
+
+    void confirmProduct(ContractOrderVo contractOrderVo, UserInfo user);
+
+    void checkAdd(ContractOrderVo contractOrderVo);
+
+    void checkConfirm(ContractOrderVo contractOrderVo);
+
+    void returnTag(String ordercode, MultipartFile file,UserInfo userInfo);
+
+    String generateZplString(ProductCodePrint productPrint, UserInfo userInfo) throws Exception;
+
+    String generateOuterTag(List<ProductCodeVo> productCodeVos, UserInfo userInfo);
+
+    String generateInnerTag(List<ProductCodeVo> productCodeVos, UserInfo userInfo);
+}
diff --git a/src/main/java/com/gk/firework/Service/ContractUnitDetailService.java b/src/main/java/com/gk/firework/Service/ContractUnitDetailService.java
new file mode 100644
index 0000000..32ec84f
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ContractUnitDetailService.java
@@ -0,0 +1,23 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.ContractUnitDetail;
+import com.gk.firework.Domain.UserInfo;
+
+import java.util.Map;
+
+public interface ContractUnitDetailService extends IService<ContractUnitDetail> {
+
+    IPage selectSupplyAndPurchaseUnitPage(Page<ContractUnitDetail> page, Map filter, UserInfo user);
+
+    void addSupplyAndPurchaseUnit(ContractUnitDetail contractUnitDetail, UserInfo user);
+
+    void modSupplyAndPurchaseUnit(ContractUnitDetail contractUnitDetail, UserInfo user);
+
+    void delSupplyAndPurchaseUnit(Long id, UserInfo user);
+
+    void checkAdd(ContractUnitDetail contractUnitDetail);
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ControlPrintParamService.java b/src/main/java/com/gk/firework/Service/ControlPrintParamService.java
new file mode 100644
index 0000000..5762dd0
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ControlPrintParamService.java
@@ -0,0 +1,25 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.ControlPrintParam;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.PageInfo;
+import java.util.List;
+
+public interface ControlPrintParamService extends IService<ControlPrintParam> {
+    ControlPrintParam getParamsByUser(UserInfo userInfo, byte type);
+
+    void selectDataGrid(PageInfo pageInfo);
+
+    /**
+    * @Description: 获取内外包装默认设置,owner为admin
+    * @date 2022/2/9 16:32
+    */
+    List<ControlPrintParam>  selectDefaultSettings(Byte type,String owner);
+
+    ControlPrintParam getOwnSelectType(Byte type, UserInfo user);
+
+    void addOrUpdateControlParams(ControlPrintParam controlPrintParam,UserInfo userInfo);
+
+    void updateControlParams(ControlPrintParam controlPrintParam, UserInfo user);
+}
diff --git a/src/main/java/com/gk/firework/Service/CustomerService.java b/src/main/java/com/gk/firework/Service/CustomerService.java
new file mode 100644
index 0000000..3475bb2
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/CustomerService.java
@@ -0,0 +1,25 @@
+package com.gk.firework.Service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.CustomerInfo;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.text.ParseException;
+import java.util.Date;
+
+/**
+ * @author : jingjy
+ * @date : 2021/3/31 14:19
+ */
+public interface CustomerService extends IService<CustomerInfo> {
+    CustomerInfo createOrUpdate(JSONObject customer, Integer num, Date salesTime) throws ParseException;
+
+    CustomerInfo getCustomerByIdCardNum(String idCardNum);
+
+    CustomerInfo getCustomerBySaleOrder(String orderCode);
+
+    void uploadPhoto(String idCard, MultipartFile file);
+
+    void createOrUpdateCard(String idcardnum, Integer num, Date createdat) throws ParseException;
+}
diff --git a/src/main/java/com/gk/firework/Service/DeliveryDetailService.java b/src/main/java/com/gk/firework/Service/DeliveryDetailService.java
new file mode 100644
index 0000000..af13e0b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/DeliveryDetailService.java
@@ -0,0 +1,36 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.DeliveryDetailInfo;
+import com.gk.firework.Domain.DeliveryOrderInfo;
+import com.gk.firework.Domain.UserInfo;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author : jingjy
+ * @date : 2021/4/1 10:24
+ */
+public interface DeliveryDetailService extends IService<DeliveryDetailInfo> {
+    List<DeliveryDetailInfo> generateDeliveryDetail(DeliveryOrderInfo deliveryOrderInfo, UserInfo userInfo, List<String> directionCodes);
+
+    IPage selectDetailPage(Page<Map> page, Map filter);
+
+    List<Map> selectDetailExport(String code);
+
+    List<DeliveryDetailInfo> getDetailByCode(String ordercode);
+
+    BigDecimal selectEnterpriseDeliveryNumber(String enterprisenumber, Object starttime, Object endtime);
+
+    IPage selectEnterpriseTypeDelivery(Page<Map> page, Map<String, Object> filter, UserInfo user);
+
+    List<Map> selectExportEnterpriseTypeDelivery(Map<String, Object> filter, UserInfo user);
+
+    IPage selectCityTypeDelivery(Page<Map> page, Map<String, Object> filter, UserInfo user);
+
+    List<Map> selectExportCityTypeDelivery(Map<String, Object> filter, UserInfo user);
+}
diff --git a/src/main/java/com/gk/firework/Service/DeliveryOrderService.java b/src/main/java/com/gk/firework/Service/DeliveryOrderService.java
new file mode 100644
index 0000000..31f34df
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/DeliveryOrderService.java
@@ -0,0 +1,38 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.DeliveryOrderInfo;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Vo.DeliveryOrderInfoVo;
+import com.gk.firework.Domain.Vo.ProductVo;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author : jingjy
+ * @date : 2021/4/1 10:22
+ */
+public interface DeliveryOrderService extends IService<DeliveryOrderInfo> {
+    IPage selectPage(Page<DeliveryOrderInfoVo> page, Map filter, UserInfo user);
+
+    DeliveryOrderInfo generateDeliveryOrder(String type, Date datetime, UserInfo userInfo, String cert, String auth);
+
+    BigDecimal getDeliveryNum(Map<String, Object> condition);
+
+    BigDecimal getReturnDeliveryNum(Map<String, Object> condition);
+
+    boolean isOrderExist(String datetime, UserInfo userInfo);
+
+    List<DeliveryOrderInfo> selectExportList(Map filter, UserInfo user);
+
+    List<DeliveryOrderInfo> getDeliveryOrderByCert(String cert);
+
+    List<ProductVo> getProductVosByCert(String cert);
+
+    IPage selectStockPage(Page<DeliveryOrderInfoVo> page, Map<String, Object> filter, UserInfo user);
+}
diff --git a/src/main/java/com/gk/firework/Service/DictionaryItemService.java b/src/main/java/com/gk/firework/Service/DictionaryItemService.java
new file mode 100644
index 0000000..850fc1d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/DictionaryItemService.java
@@ -0,0 +1,21 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.DictionaryItemInfo;
+import com.gk.firework.Domain.DictionaryTypeInfo;
+import com.gk.firework.Domain.Utils.PageInfo;
+
+import java.util.List;
+
+public interface DictionaryItemService extends IService<DictionaryItemInfo> {
+
+    void selectDataGrid(PageInfo pageInfo);
+
+    DictionaryItemInfo selctByText(String text);
+
+    DictionaryItemInfo selctByValue(String value);
+
+    List<DictionaryTypeInfo> selectExistInfo(Long id, String value, String text);
+
+    List<DictionaryItemInfo> selectByType(String dictionaryType);
+}
diff --git a/src/main/java/com/gk/firework/Service/DictionaryTypeService.java b/src/main/java/com/gk/firework/Service/DictionaryTypeService.java
new file mode 100644
index 0000000..5a62996
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/DictionaryTypeService.java
@@ -0,0 +1,18 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.DictionaryTypeInfo;
+import com.gk.firework.Domain.Utils.PageInfo;
+
+import java.util.List;
+
+public interface DictionaryTypeService extends IService<DictionaryTypeInfo> {
+
+    void selectDataGrid(PageInfo pageInfo);
+
+    DictionaryTypeInfo selctByCode(String code);
+
+    DictionaryTypeInfo selctByText(String text);
+
+    List<DictionaryTypeInfo> selectExistInfo(Long id, String code, String text);
+}
diff --git a/src/main/java/com/gk/firework/Service/DistrictService.java b/src/main/java/com/gk/firework/Service/DistrictService.java
new file mode 100644
index 0000000..8a459c8
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/DistrictService.java
@@ -0,0 +1,21 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.DistrictInfo;
+
+import java.util.List;
+
+public interface DistrictService extends IService<DistrictInfo> {
+
+    List<DistrictInfo> selectDistrictInfo(String type, String parentcode);
+
+    DistrictInfo selectInfoByName(String name, Byte type);
+
+    DistrictInfo selectInfoByCode(String code, Byte type);
+
+    List<DistrictInfo> selectDistrictByName(String type, String parentname, String parenttype);
+
+    List<DistrictInfo> selectInfoByParentCode(String s);
+
+    List<DistrictInfo> selectInfoByParentCodeAndCity(String s, Object city);
+}
diff --git a/src/main/java/com/gk/firework/Service/EnterpriseAnnualService.java b/src/main/java/com/gk/firework/Service/EnterpriseAnnualService.java
new file mode 100644
index 0000000..8906f15
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/EnterpriseAnnualService.java
@@ -0,0 +1,21 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.EnterpriseAnnual;
+import com.gk.firework.Domain.UserInfo;
+
+public interface EnterpriseAnnualService extends IService<EnterpriseAnnual> {
+
+    IPage selectPage(Page<EnterpriseAnnual> page, Long id);
+
+    void addEnterpriseAnnual(EnterpriseAnnual enterpriseAnnual, UserInfo user);
+
+    void modEnterpriseAnnual(EnterpriseAnnual enterpriseAnnual, UserInfo user);
+
+    void delEnterpriseAnnual(Long id, UserInfo user);
+
+    void checkEnterpriseAnnual(EnterpriseAnnual enterpriseAnnual);
+
+}
diff --git a/src/main/java/com/gk/firework/Service/EnterpriseApplyService.java b/src/main/java/com/gk/firework/Service/EnterpriseApplyService.java
new file mode 100644
index 0000000..986fb5d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/EnterpriseApplyService.java
@@ -0,0 +1,18 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.EnterpriseApply;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Vo.ApprovalVo;
+
+import java.util.*;
+
+public interface EnterpriseApplyService extends IService<EnterpriseApply> {
+
+    IPage<EnterpriseApply> selectEnterpriseApply(Page<EnterpriseApply> page, EnterpriseApply enterpriseApplyFilter,UserInfo user);
+
+    List getApplyList(EnterpriseApply enterpriseApplyFilter);
+
+}
diff --git a/src/main/java/com/gk/firework/Service/EnterpriseDocumentService.java b/src/main/java/com/gk/firework/Service/EnterpriseDocumentService.java
new file mode 100644
index 0000000..5d66daf
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/EnterpriseDocumentService.java
@@ -0,0 +1,22 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.EnterpriseDocument;
+import com.gk.firework.Domain.Enum.DocumentType;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Vo.EnterpriseDocumentVo;
+
+public interface EnterpriseDocumentService extends IService<EnterpriseDocument> {
+
+    IPage selectPage(Page<EnterpriseDocument> page, Long id, DocumentType type);
+
+    void addDocument(EnterpriseDocumentVo enterpriseDocumentVo, UserInfo user) throws Exception;
+
+    void modDocument(EnterpriseDocumentVo enterpriseDocumentVo, UserInfo user) throws Exception;
+
+    void delDocument(Long id, UserInfo user);
+
+    void checkDocument(EnterpriseDocumentVo enterpriseDocumentVo,boolean flag);
+}
diff --git a/src/main/java/com/gk/firework/Service/EnterpriseFeedService.java b/src/main/java/com/gk/firework/Service/EnterpriseFeedService.java
new file mode 100644
index 0000000..2533aa9
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/EnterpriseFeedService.java
@@ -0,0 +1,25 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.EnterpriseFeed;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Vo.EnterpriseFeedVo;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.Map;
+
+public interface EnterpriseFeedService extends IService<EnterpriseFeed> {
+
+    IPage selectPages(Page<EnterpriseFeed> page, Long id,UserInfo user);
+
+    void addFeed(EnterpriseFeedVo enterpriseFeedVo, UserInfo user);
+
+    void importFeed(MultipartFile file, UserInfo user,Long enterpriseId);
+
+    List<Map> exportFeed(Map filter, UserInfo user);
+
+    List<Map> exportFeedById(Long id);
+}
diff --git a/src/main/java/com/gk/firework/Service/EnterpriseLicenseService.java b/src/main/java/com/gk/firework/Service/EnterpriseLicenseService.java
new file mode 100644
index 0000000..fe22f9d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/EnterpriseLicenseService.java
@@ -0,0 +1,24 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.EnterpriseLicense;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Vo.EnterpriseLicenseVo;
+
+public interface EnterpriseLicenseService extends IService<EnterpriseLicense> {
+
+    void addEnterpriseLicense(EnterpriseLicenseVo enterpriseLicenseVo, UserInfo user) throws Exception;
+
+    void modEnterpriseLicense(EnterpriseLicenseVo enterpriseLicenseVo, UserInfo user) throws Exception;
+
+    IPage<EnterpriseLicense> selectPage(Long id, Page<EnterpriseLicense> objectPage);
+
+    void delEnterpriseLicense(Long id, UserInfo user);
+
+    void checkEnterpriseLicense(EnterpriseLicenseVo enterpriseLicenseVo);
+
+
+    void deleteByLicenseNumber(String licensecode);
+}
diff --git a/src/main/java/com/gk/firework/Service/EnterprisePersonService.java b/src/main/java/com/gk/firework/Service/EnterprisePersonService.java
new file mode 100644
index 0000000..7174e0a
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/EnterprisePersonService.java
@@ -0,0 +1,22 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.EnterprisePerson;
+import com.gk.firework.Domain.Enum.PersonnelCategory;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Vo.EnterprisePersonVo;
+
+public interface EnterprisePersonService extends IService<EnterprisePerson> {
+
+    IPage selectPage(Page<EnterprisePerson> page, Long id, PersonnelCategory personnelCategory);
+
+    void addEnterprisePerson(EnterprisePersonVo enterprisePersonVo, UserInfo user) throws Exception;
+
+    void modEnterprisePerson(EnterprisePersonVo enterprisePersonVo, UserInfo user) throws Exception;
+
+    void delEnterprisePerson(Long id, UserInfo user);
+
+    void checkEnterprisePerson(EnterprisePersonVo enterprisePersonVo);
+}
diff --git a/src/main/java/com/gk/firework/Service/EnterpriseResourceService.java b/src/main/java/com/gk/firework/Service/EnterpriseResourceService.java
new file mode 100644
index 0000000..8e79c4b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/EnterpriseResourceService.java
@@ -0,0 +1,12 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.EnterpriseResource;
+
+import java.util.List;
+public interface EnterpriseResourceService extends IService<EnterpriseResource> {
+
+    List<EnterpriseResource> getResourceByBelongIdAndType(Long id, String type);
+
+    List<String> getUrlByBelongIdAndType(Long id, String business);
+}
diff --git a/src/main/java/com/gk/firework/Service/EnterpriseService.java b/src/main/java/com/gk/firework/Service/EnterpriseService.java
new file mode 100644
index 0000000..461bd91
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/EnterpriseService.java
@@ -0,0 +1,210 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.Enum.EnterpriseStatus;
+import com.gk.firework.Domain.Utils.BooleanReason;
+import com.gk.firework.Domain.Vo.EnterpriseExportVo;
+import com.gk.firework.Domain.Vo.EnterpriseVo;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.Map;
+
+public interface EnterpriseService extends IService<Enterprise> {
+
+
+    void addApply(EnterpriseApply enterpriseApply, UserInfo user) throws IllegalAccessException;
+
+    IPage<Enterprise> selectEnterprise(Page<Enterprise> page, Map filter, UserInfo user);
+
+    void addEnterprise(Enterprise enterprise, UserInfo user);
+
+    void modEnterprise(Enterprise enterprise, UserInfo user);
+
+    int countBySafetySupervision(String safetySupervision);
+
+    IPage<Enterprise> selectParentEnterprise(Page<Enterprise> page, Map filter);
+
+    void delEnterprise(Long id, UserInfo user);
+
+    /**
+    * @Description: 新增校验,密码校验标识flag
+    * @date 2021/4/20 17:09
+    */
+    void checkAddEnterprise(Enterprise enterprise,Boolean flag);
+
+    EnterpriseVo selctSimpleByNumber(String enterprisenumber);
+
+    void checkModEnterprise(Enterprise enterprise);
+
+    boolean isDuplicateNumber(String enterpriseNumber, Long id);
+
+    boolean isDuplicateEnterpriseName(String enterpriseName, Long id);
+
+    List<Long> findEnterpriseIdsByLocation(String province,String city,String district,String street,String committee);
+
+    List<Enterprise> findEnterpriseListByLocation(String province,String city,String district,String street,String committee);
+
+
+    Map getEnterpriseDetail(String enterpriseNumber, Integer days, String starttime, String endtime);
+    Enterprise selectEnterpriseByCompanyId(Long companyid);
+
+    /**
+     * 查询生产企业信息,即SafetySupervision为PRODUCE
+     * @return List<Enterprise> 企业信息集合
+     */
+    List<Enterprise> selectProduceEnterprise();
+
+    /**
+     * 查询销售企业信息,即SafetySupervision不为 PRODUCE
+     * @return List<Enterprise> 企业信息集合
+     */
+    List<Enterprise> selectSaleEnterprise();
+
+    List<Enterprise> selectSaleEnterprise(Map<String, Object>param);
+
+    List<Enterprise> selectSaleEnterprise(Map<String, Object>param,Page<Enterprise> page);
+
+
+
+    /**
+     * 根据 EnterpriseNumber 查询 Enterprise 信息
+     * @param number 企业编号
+     * @return Enterprise
+     */
+    Enterprise selectEnterpriseByNumber(String number);
+
+
+    /**
+     * 获取所有企业的经纬度
+     * @param
+     * @return Enterprise
+     */
+    List<Map> getAllLocation(String city);
+
+    /**
+     * 零售点数量按区域统计
+     * @param
+     * @return Enterprise
+     */
+    List<Map> getRetailStatisticsByArea();
+
+    /**
+    * @Description: 导出
+    * @date 2021/4/16 17:38
+    */
+    List<EnterpriseExportVo> selectExportEnterprise(Map filter, UserInfo user);
+
+    BooleanReason importEnterprise(MultipartFile file, UserInfo userInfo);
+
+    int getSaleNum();
+
+    List<SaleOrderDetailInfo> getEnterpriseSaleDetail(String enterpriseNumber, String itemcode, String starttime, String endtime);
+
+    /**
+     * 根据企业名称查询企业信息
+     * @param name 企业名称
+     * @return Enterprise 企业信息
+     */
+    Enterprise selectEnterpriseByName(String name);
+
+    /**
+    * @Description: 停用企业
+    * @date 2021/5/28 16:15
+    */
+    void deactivateEnterprise(Long id,String enterprisenumber, UserInfo user);
+
+    /**
+    * @Description: 启用企业
+    * @date 2021/5/28 16:16
+    */
+    void activateEnterprise(Long id,String enterprisenumber, UserInfo user);
+
+    /**
+    * @Description: 更新企业状态
+    * @date 2021/5/28 16:15
+    */
+    void setEnterpriseStatus(EnterpriseStatus status, Long id);
+
+
+    //查找监管部门下的所有信息未补全的个数
+    int countAllUndoneEnterprise(UserInfo userInfo);
+
+    //查找监管部门下许可证过期的的所有企业个数
+    int countAllEnterpriseExpired(UserInfo userInfo);
+
+    /**
+     * @Description: 通过注册添加企业信息及用户信息
+     * @date 2021-6-25 14:12:53
+     * @param registerInfo 注册信息
+     * @param userInfo 审核用户信息
+     */
+    void addEnterpriseByRegister(RegisterInfo registerInfo, UserInfo userInfo);
+
+    List<Enterprise> selectListUnderSupervision(Integer type,UserInfo user);
+
+    IPage selectUndoneList(Page<Enterprise> page, Map filter,UserInfo userInfo);
+
+    List<Enterprise> selectExportUndoneList(Map filter, UserInfo user);
+
+    /**
+    * @Description: 判断2位编码是否重复  true : 重复      false :  不重复
+    */
+    boolean isDuplicate2BitCode(String randomStr);
+
+    IPage selectExpiredList(Page<Enterprise> page, Map filter, UserInfo user);
+
+    List<Enterprise> selectExportExpiredList(Map<String, Object> filter, UserInfo user);
+
+    /**
+     * @Description: 查找所有子企业
+     */
+    List<Enterprise> selectSubEnterprise(Long enterpriseId);
+
+    List<Enterprise> getEnterpriseByLimit(Map<String, Object> condition);
+
+    Integer getEnterpriseByLimitCount(Map<String, Object> condition);
+
+    BooleanReason importDlCompanyCode(MultipartFile file, UserInfo user);
+
+    List<Enterprise> exportDlCompanyCode();
+
+    List<Enterprise> selectAllDlCompanyCodeIsNotNull();
+
+    void updateCompanyCode(Enterprise e);
+
+    List<Enterprise> selectSaleEnterpriseForUpload();
+
+    /**
+    * @Description: 判断是否注销
+    * @date 2022/2/22 12:37
+    */
+    boolean isLogOut(String companynumber);
+
+    /**
+    * @Description: 注销企业
+    * @date 2022/2/23 1:04
+    */
+
+    void logout(List<Long> ids, UserInfo user);
+
+    /**
+     * @Description: 注销企业恢复成有效
+     * @date 2022/2/23 1:04
+     */
+
+    void recoverLogin(Long id, UserInfo user);
+
+    /**
+     * @Description: 注销企业恢复成有效
+     * @date 2022/2/23 1:04
+     */
+
+    void recoverLoginBatch(List<Long> ids, UserInfo user);
+
+    List<Enterprise> selectEnterpriseListByNameLike(String name);
+}
diff --git a/src/main/java/com/gk/firework/Service/EnterpriseStaffService.java b/src/main/java/com/gk/firework/Service/EnterpriseStaffService.java
new file mode 100644
index 0000000..612856d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/EnterpriseStaffService.java
@@ -0,0 +1,7 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.EnterpriseStaff;
+
+public interface EnterpriseStaffService extends IService<EnterpriseStaff> {
+}
diff --git a/src/main/java/com/gk/firework/Service/EnterpriseStandardizationService.java b/src/main/java/com/gk/firework/Service/EnterpriseStandardizationService.java
new file mode 100644
index 0000000..31eab20
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/EnterpriseStandardizationService.java
@@ -0,0 +1,25 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.EnterpriseStandardization;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Vo.EnterpriseStandardizationVo;
+import org.springframework.web.multipart.MultipartFile;
+
+public interface EnterpriseStandardizationService extends IService<EnterpriseStandardization> {
+
+    IPage selectPage(Page<EnterpriseStandardization> page, Long id);
+
+    void addEnterpriseStandardization(EnterpriseStandardizationVo enterpriseStandardizationVo, UserInfo user) throws Exception;
+
+    void modEnterpriseStandardization(EnterpriseStandardizationVo enterpriseStandardizationVo, UserInfo user) throws Exception;
+
+    void delEnterpriseStandardization(Long id, UserInfo user);
+
+    EnterpriseStandardization getOne(Long id);
+
+    void checkEnterpriseStandardization(EnterpriseStandardizationVo enterpriseStandardizationVo);
+
+}
diff --git a/src/main/java/com/gk/firework/Service/EnterpriseWarehouseService.java b/src/main/java/com/gk/firework/Service/EnterpriseWarehouseService.java
new file mode 100644
index 0000000..4b1f3b6
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/EnterpriseWarehouseService.java
@@ -0,0 +1,22 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.EnterpriseWarehouse;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Vo.EnterpriseWarehouseVo;
+import org.springframework.web.multipart.MultipartFile;
+
+public interface EnterpriseWarehouseService extends IService<EnterpriseWarehouse> {
+
+    IPage selectPage(Page<EnterpriseWarehouse> page, Long id);
+
+    void addEnterpriseWarehouse(EnterpriseWarehouseVo enterpriseLicenseVo, UserInfo user) throws Exception;
+
+    void modEnterpriseWarehouse(EnterpriseWarehouseVo enterpriseLicenseVo , UserInfo user) throws Exception;
+
+    void delEnterpriseWarehouse(Long id, UserInfo user);
+
+    void checkEnterpriseWarehouse(EnterpriseWarehouseVo enterpriseLicenseVo);
+}
diff --git a/src/main/java/com/gk/firework/Service/EntryDetailService.java b/src/main/java/com/gk/firework/Service/EntryDetailService.java
new file mode 100644
index 0000000..e77c6da
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/EntryDetailService.java
@@ -0,0 +1,26 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.EntryDetailInfo;
+import com.gk.firework.Domain.UserInfo;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author : jingjy
+ * @date : 2021/3/24 13:47
+ */
+public interface EntryDetailService extends IService<EntryDetailInfo> {
+    List<Map> selectDetailExport(String code);
+
+    IPage selectEnterpriseTypeEntry(Page<Map> page, Map<String, Object> filter, UserInfo user);
+
+    List<Map> selectExportEnterpriseTypeEntry(Map<String, Object> filter, UserInfo user);
+
+    IPage selectCityTypeEntry(Page<Map> page, Map<String, Object> filter, UserInfo user);
+
+    List<Map> selectExportCityTypeEntry(Map<String, Object> filter, UserInfo user);
+}
diff --git a/src/main/java/com/gk/firework/Service/EntryService.java b/src/main/java/com/gk/firework/Service/EntryService.java
new file mode 100644
index 0000000..29a24ce
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/EntryService.java
@@ -0,0 +1,47 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.EntryOrderInfo;
+import com.gk.firework.Domain.SoldNoStockInfo;
+import com.gk.firework.Domain.UserInfo;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+import com.gk.firework.Domain.Vo.EntryOrderInfoVo;
+
+import java.util.Map;
+
+/**
+ * @author : jingjy
+ * @date : 2021/3/24 11:10
+ */
+public interface EntryService extends IService<EntryOrderInfo> {
+
+    void entryPatch(List<SoldNoStockInfo> soldNoStockInfos, UserInfo user, String auth);
+
+    IPage selectPage(Page<EntryOrderInfoVo> page, Map filter, UserInfo user);
+
+    IPage selectDetailPage(Page<Map> page, Map filter);
+
+    BigDecimal getEntryNumByCondition(Map<String, Object> condition);
+
+    BigDecimal getReturnNumByCondition(Map<String, Object> condition);
+
+    boolean isEntryExist(String datetime, UserInfo userInfo);
+
+    List<EntryOrderInfo> selectExportInBound(Map filter, UserInfo user);
+
+    BigDecimal selectEnterpriseEntryNumber(String enterprisenumber, Object starttime, Object endtime);
+
+    BigDecimal selectCityEntryNumber(String name, Object starttime, Object endtime);
+
+    Boolean isTransportCertEntry(String code);
+
+    IPage selectStockPage(Page<EntryOrderInfoVo> page, Map<String, Object> filter, UserInfo user);
+
+    EntryOrderInfo generateEntryOrderInfo(String type, UserInfo userInfo, Date date, String transport, String auth);
+}
diff --git a/src/main/java/com/gk/firework/Service/ExcelExportService.java b/src/main/java/com/gk/firework/Service/ExcelExportService.java
new file mode 100644
index 0000000..a45b499
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ExcelExportService.java
@@ -0,0 +1,41 @@
+package com.gk.firework.Service;
+
+import com.gk.firework.Domain.ProductCodeInfo;
+import com.gk.firework.Domain.ProductInfo;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.BooleanReason;
+import com.gk.firework.Domain.Vo.Product2JsonVo;
+
+import java.io.InputStream;
+import java.util.List;
+
+public interface ExcelExportService {
+
+    BooleanReason importDistrictExcel(InputStream in,String operator, Boolean isExcel2007);
+
+    BooleanReason imporSelfCheckExcel(InputStream in, String username, Boolean isExcel2007);
+
+    BooleanReason importEnterpriseExcel(InputStream in, UserInfo userInfo, Boolean isExcel2007);
+
+    void importFeedExcel(InputStream in, UserInfo user, Boolean isExcel2007,Long enterpriseId);
+    BooleanReason importUserExcel(InputStream in, String operator, Boolean isExcel2007);
+
+    List<Product2JsonVo> parsingProduct(InputStream inputStream, UserInfo userInfo, boolean isExcel2007, String enterprisenumber);
+
+    List<Product2JsonVo> parsingProduct(InputStream inputStream, UserInfo userInfo, boolean isExcel2007);
+
+    BooleanReason imporEditPriceExcel(InputStream in, String companynumber,String username, Boolean isExcel2007);
+
+    List<String> parseProductCode(InputStream inputStream, UserInfo userInfo, boolean isExcel2007);
+
+    List<ProductInfo>  parseProductFromOldSystem(InputStream inputStream, UserInfo user, boolean isExcel2007);
+
+    BooleanReason importUserCodeExcel(InputStream in, String operator, Boolean isExcel2007);
+
+    BooleanReason importDLCompanyCodeExcel(InputStream in, UserInfo userInfo, boolean isExcel2007);
+
+    BooleanReason imporSaleProductExcel(InputStream in, String username, Boolean isExcel2007);
+
+    BooleanReason imporSaleOrderExcel(InputStream in, String username, Boolean isExcel2007);
+
+}
diff --git a/src/main/java/com/gk/firework/Service/HelpDocService.java b/src/main/java/com/gk/firework/Service/HelpDocService.java
new file mode 100644
index 0000000..1922ff5
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/HelpDocService.java
@@ -0,0 +1,13 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.HelpDocInfo;
+import com.gk.firework.Domain.Utils.PageInfo;
+
+/**
+ * @author : jingjy
+ * @date : 2021/6/16 10:20
+ */
+public interface HelpDocService extends IService<HelpDocInfo> {
+    void selectDataGrid(PageInfo pageInfo);
+}
diff --git a/src/main/java/com/gk/firework/Service/HiddenDangerCheckService.java b/src/main/java/com/gk/firework/Service/HiddenDangerCheckService.java
new file mode 100644
index 0000000..6927ce6
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/HiddenDangerCheckService.java
@@ -0,0 +1,14 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.HiddenDangerCheckContent;
+import com.gk.firework.Domain.Vo.HiddenDangerTableRow;
+
+import java.util.List;
+
+public interface HiddenDangerCheckService extends IService<HiddenDangerCheckContent> {
+
+    List<HiddenDangerCheckContent> selectList(Long id);
+
+    List<HiddenDangerTableRow> selectRowList(Long id,String level);
+}
diff --git a/src/main/java/com/gk/firework/Service/HiddenDangerMenuService.java b/src/main/java/com/gk/firework/Service/HiddenDangerMenuService.java
new file mode 100644
index 0000000..67b8001
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/HiddenDangerMenuService.java
@@ -0,0 +1,11 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.HiddenDangerMenu;
+import java.util.List;
+
+public interface HiddenDangerMenuService extends IService<HiddenDangerMenu> {
+
+    List<HiddenDangerMenu> selectMenu();
+
+}
diff --git a/src/main/java/com/gk/firework/Service/HiddenDangerReportDetailService.java b/src/main/java/com/gk/firework/Service/HiddenDangerReportDetailService.java
new file mode 100644
index 0000000..5a0db4e
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/HiddenDangerReportDetailService.java
@@ -0,0 +1,13 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.HiddenDangerReportDetail;
+
+import java.util.List;
+
+public interface HiddenDangerReportDetailService extends IService<HiddenDangerReportDetail> {
+
+    void update2Qualified(List<HiddenDangerReportDetail> upds2Qualified);
+
+   int countOverdueByReportCode(String code);
+}
diff --git a/src/main/java/com/gk/firework/Service/HiddenDangerReportService.java b/src/main/java/com/gk/firework/Service/HiddenDangerReportService.java
new file mode 100644
index 0000000..85d078f
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/HiddenDangerReportService.java
@@ -0,0 +1,41 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.HiddenDangerReport;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.FilterObject;
+import com.gk.firework.Domain.Vo.CheckReportVo;
+import com.gk.firework.Domain.Vo.HiddenDangerTableRow;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.Map;
+
+public interface HiddenDangerReportService extends IService<HiddenDangerReport> {
+
+    void addCheck(CheckReportVo checkReportVo, UserInfo user);
+
+    IPage reportList(Page<HiddenDangerReport> page, Map filter, UserInfo user);
+
+    List<HiddenDangerTableRow> getReport(String code);
+
+    void modReport(CheckReportVo checkReportVo, UserInfo user);
+
+    String upload(MultipartFile file);
+
+    List<HiddenDangerTableRow> viewReport(String code);
+
+    void commitReport(String code);
+
+    void checkMod(CheckReportVo checkReportVo);
+
+    void checkCommit(String code);
+
+    HiddenDangerReport getReportByCode(String code);
+
+    void checkAdd(CheckReportVo checkReportVo, UserInfo user);
+
+    List<Map> selectExportReport(Map filter, UserInfo user);
+}
diff --git a/src/main/java/com/gk/firework/Service/HistoryStockService.java b/src/main/java/com/gk/firework/Service/HistoryStockService.java
new file mode 100644
index 0000000..09a05b2
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/HistoryStockService.java
@@ -0,0 +1,24 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.HistoryStock;
+import com.gk.firework.Domain.UserInfo;
+
+import java.util.List;
+import java.util.Map;
+
+public interface HistoryStockService extends IService<HistoryStock> {
+
+
+    void hisStockPersisting();
+
+    IPage selectHistoryStock(Page<Map> page, Map<String, Object> filter, UserInfo user);
+
+    IPage selectCityStock(Page<Map> page, Map<String, Object> filter, UserInfo user);
+
+    IPage selectHistoryCityStock(Page<Map> page, Map<String, Object> filter, UserInfo user);
+
+    List<Map> selectExportHistoryStock(Map<String, Object> filter, UserInfo user);
+}
diff --git a/src/main/java/com/gk/firework/Service/LicenseService.java b/src/main/java/com/gk/firework/Service/LicenseService.java
new file mode 100644
index 0000000..dcf3d9f
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/LicenseService.java
@@ -0,0 +1,41 @@
+package com.gk.firework.Service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.LicenseInfo;
+import com.gk.firework.Domain.LicenseStorage;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Vo.LicenseVo;
+
+import java.util.Date;
+import java.util.Map;
+import java.util.List;
+
+/**
+ * @author : jingjy
+ * @date : 2021/5/11 16:41
+ */
+public interface LicenseService extends IService<LicenseInfo> {
+    void selectDataGrid(PageInfo pageInfo);
+
+    LicenseInfo getLastOne();
+
+    LicenseInfo getLicenseById(Long id);
+
+    StringBuilder dealDealingRange(String dealingRange);
+
+    void rejectLicense(JSONObject data, UserInfo userInfo);
+
+    IPage selectLicenseStatistic(Page<Map> page, Map filter, UserInfo user);
+
+    List<LicenseVo> exportLicense(Map<String, Object> condition);
+
+    void delayLicense(Long id, String issuingunit, Date issuingdate, Date validstarttime, Date validendtime,UserInfo userInfo);
+
+    void generateLicenseDetail(LicenseInfo licenseInfo);
+
+    void modLicense(LicenseVo licenseVo, List<LicenseStorage> licenseStorageList, UserInfo user);
+}
diff --git a/src/main/java/com/gk/firework/Service/LicenseStorageService.java b/src/main/java/com/gk/firework/Service/LicenseStorageService.java
new file mode 100644
index 0000000..85837cd
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/LicenseStorageService.java
@@ -0,0 +1,14 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.LicenseStorage;
+
+import java.util.List;
+
+/**
+ * @author : jingjy
+ * @date : 2021/5/11 16:42
+ */
+public interface LicenseStorageService extends IService<LicenseStorage> {
+    List<LicenseStorage> getListByLicenseCode(String licensecode);
+}
diff --git a/src/main/java/com/gk/firework/Service/PatrolDetailService.java b/src/main/java/com/gk/firework/Service/PatrolDetailService.java
new file mode 100644
index 0000000..2b1b1ae
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/PatrolDetailService.java
@@ -0,0 +1,12 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.PatrolDetailInfo;
+import com.gk.firework.Domain.Utils.PageInfo;
+
+public interface PatrolDetailService extends IService<PatrolDetailInfo> {
+
+    void selectDataGrid(PageInfo pageInfo);
+
+    int selectIsNotMend(Long orderid);
+}
diff --git a/src/main/java/com/gk/firework/Service/PatrolOrderService.java b/src/main/java/com/gk/firework/Service/PatrolOrderService.java
new file mode 100644
index 0000000..5b1fee2
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/PatrolOrderService.java
@@ -0,0 +1,15 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.PatrolOrderInfo;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Vo.PatrolOrderVo;
+
+import java.util.List;
+
+public interface PatrolOrderService extends IService<PatrolOrderInfo> {
+
+    void selectDataGrid(PageInfo pageInfo);
+
+    List<PatrolOrderVo> selectListByEnterprise(String enterprisename, String username);
+}
diff --git a/src/main/java/com/gk/firework/Service/PermissionService.java b/src/main/java/com/gk/firework/Service/PermissionService.java
new file mode 100644
index 0000000..1abc25f
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/PermissionService.java
@@ -0,0 +1,14 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.PermissionInfo;
+import com.gk.firework.Domain.Vo.Menu;
+
+import java.util.List;
+
+public interface PermissionService extends IService<PermissionInfo> {
+
+    List<Menu> selectByUserId(String userId);
+
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ProductCategoryService.java b/src/main/java/com/gk/firework/Service/ProductCategoryService.java
new file mode 100644
index 0000000..2bfee7d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ProductCategoryService.java
@@ -0,0 +1,24 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.ProductCategory;
+
+import java.util.List;
+
+/**
+ * @author : jingjy
+ * @date : 2021/4/22 9:55
+ */
+public interface ProductCategoryService extends IService<ProductCategory> {
+    List<ProductCategory> selectAllOrByName(String name);
+
+    List<ProductCategory> selectCategoryByType(byte type);
+
+    List<ProductCategory> selectCategoryByTypeAndName(ProductCategory category);
+
+    List<ProductCategory> selectCategoryByMajorType(String major);
+
+    ProductCategory selectCategoryByLevelAndName(String level, String secondaryType);
+
+    boolean selectOne(String type, String secondaryType, String level);
+}
diff --git a/src/main/java/com/gk/firework/Service/ProductCodeService.java b/src/main/java/com/gk/firework/Service/ProductCodeService.java
new file mode 100644
index 0000000..4aa7d64
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ProductCodeService.java
@@ -0,0 +1,19 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.ProductCodeInfo;
+
+import java.util.List;
+
+public interface ProductCodeService extends IService<ProductCodeInfo> {
+
+    ProductCodeInfo selectByFourteen(String fourteen,String date);
+
+    void insertBatch(List<ProductCodeInfo> productCodeInfoList);
+
+    List<ProductCodeInfo> selectByOrderCode(String ordercode);
+
+    ProductCodeInfo selectByOriginalCode(String code);
+
+    List<ProductCodeInfo> selectByItemCode(String directionCode);
+}
diff --git a/src/main/java/com/gk/firework/Service/ProductLocusService.java b/src/main/java/com/gk/firework/Service/ProductLocusService.java
new file mode 100644
index 0000000..4cd69ef
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ProductLocusService.java
@@ -0,0 +1,22 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.ProductLocusInfo;
+import com.gk.firework.Domain.Vo.ProductLocusVo;
+
+import java.util.List;
+
+/**
+ * @author : jingjy
+ * @date : 2021/3/24 14:33
+ */
+public interface ProductLocusService extends IService<ProductLocusInfo> {
+    int insertProductLocus(ProductLocusInfo productLocusInfo);
+
+    int insertBatch(List<ProductLocusInfo> productLocusInfos);
+
+    List<ProductLocusVo> getFlow(String directionCode);
+
+    int saveBatchLocus(List<ProductLocusInfo> productLocuses);
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ProductPriceService.java b/src/main/java/com/gk/firework/Service/ProductPriceService.java
new file mode 100644
index 0000000..e714b59
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ProductPriceService.java
@@ -0,0 +1,13 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.ProductPriceInfo;
+
+import java.util.List;
+
+public interface ProductPriceService extends IService<ProductPriceInfo> {
+
+    ProductPriceInfo selectByCode(String companynumber, String directionCode);
+
+    List<ProductPriceInfo> selectByCodes(String companynumber, List<String> direction10CodesList);
+}
diff --git a/src/main/java/com/gk/firework/Service/ProductService.java b/src/main/java/com/gk/firework/Service/ProductService.java
new file mode 100644
index 0000000..57a295e
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ProductService.java
@@ -0,0 +1,58 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.DO.ProductDO;
+import com.gk.firework.Domain.ProductInfo;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Vo.Product2JsonVo;
+import com.gk.firework.Domain.Vo.ProductVo;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author : jingjy
+ * @date : 2021/3/16 10:20
+ */
+public interface ProductService extends IService<ProductInfo> {
+
+    List<ProductInfo> selectProductInfos(Map<String,Object> condition);
+
+    void selectDataGrid(PageInfo pageInfo);
+
+    List<ProductInfo> selectByProduct(ProductInfo productInfo);
+
+    boolean hasProductByDire(String directionCode);
+
+    List<String> hasNoProductByCodes (List<String> directionCodes);
+
+    ProductInfo selectByDirection(String dire);
+
+    ProductVo selectVoByDirection(String dire);
+
+    String getSlice(String dire);
+
+    String getSlice(Long productId);
+
+    void deleteByEnterpriseName(String enterpriseName,String name);
+
+    List<Product2JsonVo> transform2Json(String enterprisenumber, MultipartFile file, UserInfo userInfo);
+
+    int countByEnterpriseNumberAndDirectionCode(String enterprisenumber, String directionCode);
+
+    List<Product2JsonVo> transform2JsonSimple(MultipartFile file, UserInfo user);
+
+    List<ProductInfo> selectProductInfo(Map<String, Object> condition);
+
+    List<String> getAllProductCodes();
+
+    void importDataByExcel(MultipartFile file, UserInfo user);
+
+    boolean isProductUsed(Long id);
+
+    List<String> selectTypes();
+
+    List<ProductDO> selectDoByDirections(List<String> direction10Codes);
+}
diff --git a/src/main/java/com/gk/firework/Service/ProductThresholdService.java b/src/main/java/com/gk/firework/Service/ProductThresholdService.java
new file mode 100644
index 0000000..75ed075
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ProductThresholdService.java
@@ -0,0 +1,11 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.ProductThresholdInfo;
+
+/**
+ * @author : jingjy
+ * @date : 2021/4/15 10:29
+ */
+public interface ProductThresholdService extends IService<ProductThresholdInfo> {
+}
diff --git a/src/main/java/com/gk/firework/Service/RegisterService.java b/src/main/java/com/gk/firework/Service/RegisterService.java
new file mode 100644
index 0000000..eabebf9
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/RegisterService.java
@@ -0,0 +1,17 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.RegisterInfo;
+import com.gk.firework.Domain.Utils.PageInfo;
+
+import java.util.List;
+
+/**
+ * @author : jingjy
+ * @date : 2021/6/24 16:54
+ */
+public interface RegisterService extends IService<RegisterInfo> {
+    List<RegisterInfo> needSendSmsList();
+
+    void selectDataGrid(PageInfo pageInfo);
+}
diff --git a/src/main/java/com/gk/firework/Service/RolePermissionsService.java b/src/main/java/com/gk/firework/Service/RolePermissionsService.java
new file mode 100644
index 0000000..9a2d1ee
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/RolePermissionsService.java
@@ -0,0 +1,14 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.RolePermissionsInfo;
+import com.gk.firework.Domain.Vo.Menu;
+
+import java.util.List;
+
+public interface RolePermissionsService extends IService<RolePermissionsInfo> {
+
+    List<Menu> selectMenuList(String roleId);
+
+    void delRolePermissionByRoleId(Long roleid);
+}
diff --git a/src/main/java/com/gk/firework/Service/RoleService.java b/src/main/java/com/gk/firework/Service/RoleService.java
new file mode 100644
index 0000000..04592fc
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/RoleService.java
@@ -0,0 +1,18 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.RoleInfo;
+import com.gk.firework.Domain.Utils.PageInfo;
+
+import java.util.List;
+
+public interface RoleService extends IService<RoleInfo> {
+
+    List<RoleInfo> selectRoleByUser(Long id);
+
+    List<RoleInfo> selectList(String name);
+
+    RoleInfo selectRoleByName(RoleInfo roleInfo);
+
+    List<RoleInfo> selectExistRole(Long id, String name);
+}
diff --git a/src/main/java/com/gk/firework/Service/SaleOrderDetailService.java b/src/main/java/com/gk/firework/Service/SaleOrderDetailService.java
new file mode 100644
index 0000000..5877459
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/SaleOrderDetailService.java
@@ -0,0 +1,136 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.SaleOrderDetailInfo;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Vo.PageInfoExtension;
+import com.gk.firework.Domain.Vo.SaleDetailVo;
+import com.gk.firework.Domain.Vo.SaleNumVo;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author : jingjy
+ * @date : 2021/3/30 17:33
+ */
+public interface SaleOrderDetailService extends IService<SaleOrderDetailInfo> {
+
+    void selectByCustomId(PageInfo pageInfo);
+
+
+    /**
+    * @Description: 近n天销售数据统计图
+    * @date 2021/4/16 16:27
+    */
+    List<Map> getSaleDataInDays(Integer days);
+
+    /**
+     * @Description: 销售数量按地区统计 n天 默认90
+     * @date 2021/4/16 16:21
+     */
+    List<Map> getSaleDataAreaInDays(Integer days);
+
+
+    /**
+     * @Description: 销售数量按品种统计 n天 默认90
+     * @date 2021/4/16 17:03
+     */
+    List<Map> getSaleDataProductTypeInDays(Integer days);
+
+    /**
+    * @Description: 销售量同年对比
+    * @date 2021/4/22 15:05
+    */
+    Map getSaleDataCompareInYear(String province, String city);
+
+    /**
+    * @Description: 获得{xxxx}年的销售量(省,市,年份)
+    * @date 2021/4/22 15:28
+    */
+    List<Map> getSaleDataInYear(String province, String city,Integer year);
+
+    /**
+    * @Description: 进货量同年对比
+    * @date 2021/4/23 9:28
+    */
+    Map getInboundCompareInYear(String province, String city);
+
+    /**
+    * @Description: 获得{xxxx}年的进货量(省,市,年份)
+    * @date 2021/4/23 9:29
+    */
+    List<Map> getInboundInYear(String province, String city,Integer year);
+
+    List<SaleOrderDetailInfo> selectByOrderCode(String code);
+
+    /**
+     * @Description: 标题数据 (零售店数量 今日销售数量 今年销售总量 今年购买人次)
+     * @date 2021/4/25 9:44
+     */
+    Map getTitleData();
+
+    /**
+    * @Description: 统计各城市某时间的销量、进货量(箱数)显示新疆15个地州市的统计信息
+    * @date 2021/5/15 9:29
+    */
+    IPage getCityInAndOut(Page<Map> page, Map filter);
+
+
+    /**
+     * @Description: 性别统计购买
+     * @date 2021/5/15 16:21
+     */
+    IPage  getGenderSale(Page<Map> page, Map filter, UserInfo userInfo);
+
+    /**
+     * @Description: 种族别
+     * @date 2021/5/15 16:21
+     */
+    IPage getRaceSale(Page<Map> page, Map filter,UserInfo userInfo);
+
+
+    /**
+    * @Description: 年龄段
+    * @date 2021/5/15 16:50
+    */
+    List<Map> getGenerationSale(Map filter,UserInfo userInfo);
+
+    /**
+    * @Description: 根据年龄段获取销售零
+    * @date 2021/5/15 17:04
+    */
+    int getSaleInfoByGeneration(Integer head, Integer tail, Map filter,UserInfo userInfo);
+
+    List<SaleDetailVo> getDetailList(String directionCode);
+
+    void returnAndStorage(String directionCode, String userId, String auth);
+
+    IPage selectSaleNumInfo(Page<SaleNumVo> page, Map<String, Object> filter, UserInfo user);
+
+    IPage selectSaleNumInfoDetail(Page<SaleOrderDetailInfo> page, Map<String, Object> filter, UserInfo user);
+
+    IPage getCityInAndOutDetail(Page<Map> page, Map<String, Object> filter);
+
+    List<Map> getCityInAndOutExport(Map<String, Object> filter);
+
+    IPage selectCityTypeSale(Page<Map> page, Map<String, Object> filter);
+
+    List<Map> selectCityTypeSaleExport(Map<String, Object> filter);
+
+    IPage selectEnterpriseTypeSale(Page<Map> page, Map<String, Object> filter, UserInfo user);
+
+    List<Map> selectExportEnterpriseTypeSale(Map<String, Object> filter, UserInfo user);
+
+    IPage selectDistrictTypeSale(Page<Map> page, Map<String, Object> filter);
+
+    List<Map> selectDistrictTypeSaleExport(Map<String, Object> filter);
+
+    /**
+    * @Description: 批量插入
+    */
+    void saveBatchOrderDetailInfo(List<SaleOrderDetailInfo> detailInfoList);
+}
diff --git a/src/main/java/com/gk/firework/Service/SaleOrderService.java b/src/main/java/com/gk/firework/Service/SaleOrderService.java
new file mode 100644
index 0000000..fef49ab
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/SaleOrderService.java
@@ -0,0 +1,76 @@
+package com.gk.firework.Service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.BO.SaleOrderDetailInfoBO;
+import com.gk.firework.Domain.Utils.Msg;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Vo.EnterpriseDataVo;
+import com.gk.firework.Domain.Vo.PageInfoExtension;
+
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author : jingjy
+ * @date : 2021/3/30 17:30
+ */
+public interface SaleOrderService extends IService<SaleOrderInfo> {
+    SaleOrderInfo createOrder(UserInfo userInfo, List<SaleOrderDetailInfoBO> detailInfoList, String type, Integer num, Date salesTime, Long id, String pay, String total, String change, String auth);
+
+    Msg doSalesProcess(JSONObject customer, Integer num, String idCardNum, UserInfo userInfo, List<SaleOrderDetailInfoBO> detailInfoList, String type, Date salesTime, String pay, String total, String change, String auth);
+
+    List<SaleOrderDetailInfo> selectDetailByIdCardNum(String idCardNum, String directionCode);
+
+    SaleOrderDetailInfo selectOrderByDirectionAndCustomer(String directionCode, CustomerInfo customerInfo);
+
+    void selectReturnDataGrid(PageInfo pageInfo);
+
+    IPage selectSaleRecord1(Page<Map> page, Map filter, UserInfo user);
+
+    IPage selectSaleRecord2(Page<Map> page, Map filter, UserInfo user);
+
+    PageInfoExtension<Map> selectSaleRecord3(Page<Map> page, Map filter, UserInfo user);
+
+    IPage selectSaleRecord4(Page<Map> page, Map filter, UserInfo user);
+
+    IPage getPurchaseDetailInUnit(Page<SaleOrderDetailInfo> page, Map filter, UserInfo user);
+
+    List<SaleOrderInfo> selectEarlyWarn(String starttime, String endttime, Integer min, Integer max);
+
+    List<SaleOrderInfo> selectAlarm(String starttime, String endttime, Integer max);
+
+    Long selectByCustomer(Long customid);
+
+    BigDecimal getSaleNumByCondition(Map<String, Object> condition);
+
+    List<Map> selectExportSaleRecord3(Map filter, UserInfo user);
+
+    List<Map> selectExportSaleRecord4(Map filter, UserInfo user);
+
+    PageInfoExtension selectDailySaleReport(PageInfo pageInfo);
+
+    void selectOrderDataGrid(PageInfo pageInfo);
+
+    int getDailySaleCount(UserInfo userInfo);
+
+    void selectEnterpriseEnterSellStoreDataGrid(PageInfo pageInfo, Map<String, Object> filter,UserInfo userInfo);
+
+    void selectCityEnterSellStoreDataGrid(PageInfo pageInfo, Map<String, Object> filter);
+
+    List<EnterpriseDataVo> selectEnterpriseEnterSellStoreData(Map<String, Object> filter,UserInfo userInfo);
+
+    SaleOrderDetailInfo selectOrderByDirectionReturnflag(String directionCode, byte returnflag, String datetime);
+
+    List<SaleOrderInfo> getWaitUploadOrderByEnterprise(Enterprise enterprise);
+
+    String generateOrderCode(String moduleDelivery, String type, Date date, Long userId);
+
+    SaleOrderInfo isExist(Long id, String companynumber, Date salesTime);
+}
diff --git a/src/main/java/com/gk/firework/Service/SaleProductService.java b/src/main/java/com/gk/firework/Service/SaleProductService.java
new file mode 100644
index 0000000..9bdaaaa
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/SaleProductService.java
@@ -0,0 +1,12 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.SaleProductInfo;
+
+import java.util.List;
+
+public interface SaleProductService extends IService<SaleProductInfo> {
+
+    List<SaleProductInfo> selectRandom(int n);
+
+}
diff --git a/src/main/java/com/gk/firework/Service/SecuritySupervisoryService.java b/src/main/java/com/gk/firework/Service/SecuritySupervisoryService.java
new file mode 100644
index 0000000..428e56a
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/SecuritySupervisoryService.java
@@ -0,0 +1,13 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.Enterprise;
+import com.gk.firework.Domain.SecuritySupervisory;
+
+public interface SecuritySupervisoryService extends IService<SecuritySupervisory> {
+
+
+    IPage<SecuritySupervisory> selectPage(Page<SecuritySupervisory> page, String name);
+}
diff --git a/src/main/java/com/gk/firework/Service/SelfCheckReportService.java b/src/main/java/com/gk/firework/Service/SelfCheckReportService.java
new file mode 100644
index 0000000..246f56a
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/SelfCheckReportService.java
@@ -0,0 +1,24 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.SelfCheckReport;
+import com.gk.firework.Domain.Vo.SelfCheckReportSearchVo;
+import com.gk.firework.Domain.Vo.SelfCheckReportVo;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+public interface SelfCheckReportService extends IService<SelfCheckReport> {
+
+    int createNewReport(SelfCheckReportVo selfCheckReportVo);
+
+    SelfCheckReport getSelfCheckReportById(Long id);
+
+    int updateSelfCheckReport(SelfCheckReportVo selfCheckReportVo);
+
+    List<SelfCheckReport> findSelfCheckReportList(Long enterpriseId,Byte status,Byte yhlevel);
+
+    List<SelfCheckReport> findSelfCheckReportListWithAllCondition(SelfCheckReportSearchVo searchVo);
+
+}
diff --git a/src/main/java/com/gk/firework/Service/SelfCheckService.java b/src/main/java/com/gk/firework/Service/SelfCheckService.java
new file mode 100644
index 0000000..ee2c762
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/SelfCheckService.java
@@ -0,0 +1,16 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.SelfCheckInfo;
+import com.gk.firework.Domain.Utils.PageInfo;
+
+import java.util.List;
+
+public interface SelfCheckService extends IService<SelfCheckInfo> {
+
+    List<SelfCheckInfo> selctByType(String type);
+
+    void selectDataGrid(PageInfo pageInfo);
+
+    List<SelfCheckInfo> selectByIds(List<Long> idList);
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/AccessAssessApplyServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/AccessAssessApplyServiceImpl.java
new file mode 100644
index 0000000..e3693b2
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/AccessAssessApplyServiceImpl.java
@@ -0,0 +1,239 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.AccessAssessApply;
+import com.gk.firework.Domain.AssessApply;
+import com.gk.firework.Domain.Enum.AssessAppealStatus;
+import com.gk.firework.Domain.Enum.AssessApplyStatus;
+import com.gk.firework.Domain.Enum.AssessType;
+import com.gk.firework.Domain.Enum.PunishStatus;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.Properties;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Utils.UploadUtil;
+import com.gk.firework.Domain.Vo.AssessApplyAppealVo;
+import com.gk.firework.Mapper.AccessAssessApplyMapper;
+import com.gk.firework.Service.AccessAssessApplyService;
+import com.gk.firework.Service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+
+@Service("accessAssessApplyService")
+public class AccessAssessApplyServiceImpl extends ServiceImpl<AccessAssessApplyMapper, AccessAssessApply> implements AccessAssessApplyService {
+
+    @Autowired
+    private AccessAssessApplyMapper accessAssessApplyMapper;
+    @Autowired
+    private UserService userService;
+
+
+    /**
+     * @Description: 准入评定分页查询
+     * @date 2021/7/5 14:30
+     */
+    @Override
+    public IPage selectAccessPages(Page<AccessAssessApply> page, Map filter, UserInfo user) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("type", AssessType.ACCESS);
+        params.put("code", filter.get("code"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("status", filter.get("status"));
+        //不是超级管理员只能看到自己的
+        if (user.getType() != 1 && user.getType()!= 2) {
+            params.put("requestorid", user.getId());
+        }
+        List<AccessAssessApply> data = accessAssessApplyMapper.selectPages(params, page);
+        return page.setRecords(data);
+    }
+
+
+    @Override
+    public void AccessAppeal(AccessAssessApply accessAccessApply, UserInfo user) {
+
+        Long id = accessAccessApply.getId();
+        if (id == null) throw new
+                BusinessException("参数传递错误,请联系管理员");
+        String appealcontent = accessAccessApply.getAppealcontent();
+        AccessAssessApply aa = this.getById(id);
+        assert aa.getDeadline() != null;
+        Date now = new Date();
+        //时间检查
+        if (now.after(aa.getDeadline()))
+            throw new BusinessException("已超过截止日期,不可申诉");
+        //处罚状态
+        if (aa.getPunishstatus() != PunishStatus.UNPUNISH)
+            throw new BusinessException("处罚已经执行,不能申诉");
+        //状态变更为申诉中
+        if (aa.getAppealstatus() != AssessAppealStatus.UNAPPEALED)
+            throw new BusinessException("单子已经在申诉中或者已经完成,无法再次申诉");
+
+        if (accessAccessApply.getFile() == null)
+            throw new BusinessException("请上传申诉文件");
+
+        try {
+            String filename = UploadUtil.uploadFile(accessAccessApply.getFile(), com.gk.firework.Domain.Utils.Properties.assessApplyPath);
+            aa.setPath2(Properties.assessApply + filename);
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new BusinessException("上传文件出现问题,请联系管理员");
+        }
+        aa.setAppealstatus(AssessAppealStatus.APPEALING);
+        aa.setAppealtime(now);
+        aa.setAppealcontent(StringUtils.isBlank(appealcontent) ? null : appealcontent);
+        this.updateById(aa);
+    }
+
+
+    @Override
+    public void approveAccessAssessApply(JSONObject entity, UserInfo user) {
+        Long id = entity.getLong("id");
+        if (id == null ) throw new BusinessException("传参有误,请联系管理员");
+
+        AccessAssessApply accessAssessApply = this.getById(id);
+        if (accessAssessApply == null) throw new BusinessException("传参有误或者单子不存在");
+
+        accessAssessApply.setApprover(user.getUsername());
+        Date approveDate = new Date();
+        accessAssessApply.setApprovetime(approveDate);
+        //往后推两周 后的晚上零点为截止日期
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(approveDate);
+        calendar.add(Calendar.WEEK_OF_YEAR, 2);
+        calendar.add(Calendar.DATE,1);
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        calendar.set(Calendar.MILLISECOND, 0);
+        accessAssessApply.setDeadline(calendar.getTime());
+        accessAssessApply.setStatus(AssessApplyStatus.APPROVED);
+        accessAssessApply.setAppealstatus(AssessAppealStatus.UNAPPEALED);
+        this.updateById(accessAssessApply);
+    }
+
+    @Override
+    public void rejectAccessAssessApply(JSONObject entity, UserInfo user) {
+        Long id = entity.getLong("id");
+        String lastrejectreason = entity.getString("lastrejectreason");
+
+        if (id == null ) throw new BusinessException("传参有误,请联系管理员");
+
+        if (StringUtils.isBlank(lastrejectreason)) throw new BusinessException("请填写拒绝理由");
+
+        AccessAssessApply accessAssessApply = this.getById(id);
+        if (accessAssessApply == null) throw new BusinessException("传参有误或者单子不存在");
+
+        Date now = new Date();
+        accessAssessApply.setApprover(user.getUsername());
+        accessAssessApply.setApprovetime(now);
+        accessAssessApply.setLastrejecttime(now);
+        accessAssessApply.setStatus(AssessApplyStatus.REJECT);
+        accessAssessApply.setLastrejectreason(lastrejectreason);
+        this.updateById(accessAssessApply);
+    }
+
+
+    /**
+     * @Description: 申诉通过
+     * @date 2021/7/9 9:11
+     */
+    @Override
+    @Transactional
+    public void appealAccessPass(Long id, UserInfo user) {
+
+        if (id == null)
+            throw new BusinessException("参数传递错误,请联系管理员");
+
+        AccessAssessApply accessAssessApply = this.getById(id);
+        if (accessAssessApply == null)
+            throw new BusinessException("参数传递错误或者申请单不存在");
+
+        if (accessAssessApply.getAppealstatus() == AssessAppealStatus.UNPASSED)
+            throw new BusinessException("申请单已被拒绝,不能再次审批");
+
+        if (accessAssessApply.getAppealstatus() == AssessAppealStatus.PASSED)
+            throw new BusinessException("申诉已通过,请勿再次审批");
+
+        //通过
+        accessAssessApply.setAppealstatus(AssessAppealStatus.PASSED);
+        accessAssessApply.setAppealapprovetime(new Date());
+        accessAssessApply.setAppealapprover(user.getUsername());
+        this.updateById(accessAssessApply);
+
+    }
+
+    @Override
+    public void appealAccessReject(JSONObject entity, UserInfo user) {
+        Long id = entity.getLong("id");
+        if (id == null)
+            throw new BusinessException("参数传递错误,请联系管理员");
+
+        AccessAssessApply accessAssessApply = this.getById(id);
+        if (accessAssessApply == null)
+            throw new BusinessException("参数传递错误或者申请单不存在");
+
+        AssessAppealStatus appealstatus = accessAssessApply.getAppealstatus();
+        if (appealstatus != AssessAppealStatus.APPEALING)
+            throw new BusinessException("当前申请单状态为"+appealstatus.getMsg()+",不可以拒绝");
+
+        String appealrejectreason = entity.getString("appealrejectreason");
+        accessAssessApply.setAppealstatus(AssessAppealStatus.UNPASSED);
+        accessAssessApply.setAppealrejectreason(StringUtils.isBlank(appealrejectreason) ? null : appealrejectreason);
+        this.updateById(accessAssessApply);
+
+    }
+
+    /**
+     * @Description: 获取所有超过14日公示日的未申诉的准入评定信息
+     * @date 2021/7/12 13:56
+     */
+    @Override
+    public List<AccessAssessApply> selectAllOverTimeAccessAssessApply() {
+        //条件一:type准入
+        //条件二:不是申诉通过的
+        //条件三:未惩罚的
+        return accessAssessApplyMapper.selectAllOverTimeAccessAssessApply(AssessType.ACCESS,AssessAppealStatus.PASSED,PunishStatus.UNPUNISH);
+    }
+
+    @Override
+    public List<AccessAssessApply> selectAllPunishingAccessAssessApply() {
+        //条件一:type准入
+        //条件二:惩罚中的
+        return accessAssessApplyMapper.selectAllPunishingAccessAssessApply(AssessType.ACCESS,PunishStatus.PUNISHING);
+    }
+
+
+    @Override
+    public IPage selectAccessAppealPages(Page<AssessApplyAppealVo> page, Map filter, UserInfo user) {
+        UserInfo userInfo = userService.getById(user.getId());
+
+        Map<String, Object> params = new HashMap<>();
+        //判断参数  参数-未申诉
+        params.put("unappealed", AssessAppealStatus.UNAPPEALED);
+        params.put("passed", AssessAppealStatus.PASSED);
+        params.put("unpunish", PunishStatus.UNPUNISH);
+        //固定页面变量
+        params.put("type", AssessType.ACCESS);
+        params.put("status", AssessApplyStatus.APPROVED);
+
+        //页面过滤条件
+        params.put("code", filter.get("code"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("appealstatus", filter.get("appealstatus"));
+
+        //只看到自己的
+        if (user.getType() != 1 && user.getType()!= 2) {
+            params.put("enterprisenumber", userInfo.getCompanynumber());
+        }
+
+        List<AssessApplyAppealVo> data  = accessAssessApplyMapper.selectAppealPages(params,page);
+        return page.setRecords(data);
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/AppFileServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/AppFileServiceImpl.java
new file mode 100644
index 0000000..6dbc4b2
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/AppFileServiceImpl.java
@@ -0,0 +1,46 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.AppFileInfo;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Mapper.AppFileInfoMapper;
+import com.gk.firework.Service.AppFileService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service("AppFileService")
+public class AppFileServiceImpl extends ServiceImpl<AppFileInfoMapper, AppFileInfo> implements AppFileService {
+    @Autowired
+    AppFileInfoMapper appFileInfoMapper;
+
+
+    @Override
+    public void selectDataGrid(PageInfo pageInfo) {
+        Page<AppFileInfo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+        List<OrderItem> orderItems = new ArrayList<>();
+        OrderItem orderItem = new OrderItem();
+        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+            orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
+            orderItem.setColumn(pageInfo.getSort());
+        }else {
+            orderItem.setAsc(false);
+            orderItem.setColumn("updated");
+        }
+        orderItems.add(orderItem);
+        page.setOrders(orderItems);
+        List<AppFileInfo> list = appFileInfoMapper.selectDataGrid(page,pageInfo.getCondition());
+        pageInfo.setResult(list);
+        pageInfo.setTotalCount(page.getTotal());
+    }
+
+    @Override
+    public AppFileInfo selectNew(String filetype) {
+        return appFileInfoMapper.selectNew(filetype);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/AssessApplyServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/AssessApplyServiceImpl.java
new file mode 100644
index 0000000..afaea34
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/AssessApplyServiceImpl.java
@@ -0,0 +1,286 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.AssessApply;
+import com.gk.firework.Domain.Enterprise;
+import com.gk.firework.Domain.Enum.AssessApplyStatus;
+import com.gk.firework.Domain.Enum.AssessPunishment;
+import com.gk.firework.Domain.Enum.AssessType;
+import com.gk.firework.Domain.Enum.PunishStatus;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.Properties;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Utils.UploadUtil;
+import com.gk.firework.Domain.Vo.AssessApplyAppealVo;
+import com.gk.firework.Mapper.AssessApplyMapper;
+import com.gk.firework.Service.AssessApplyService;
+import com.gk.firework.Service.EnterpriseService;
+import com.gk.firework.Service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+
+@Service("assessApplyService")
+public class AssessApplyServiceImpl extends ServiceImpl<AssessApplyMapper, AssessApply> implements AssessApplyService {
+
+    @Autowired
+    private AssessApplyMapper assessApplyMapper;
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private EnterpriseService enterpriseService;
+
+    @Override
+    public void addSaleAssessApply(AssessApply assessApply, UserInfo user)  {
+
+        if (StringUtils.isBlank(assessApply.getEnterprisename())
+                || StringUtils.isBlank(assessApply.getEnterprisenumber()))
+            throw new BusinessException("请选择企业信息");
+
+        if (assessApply.getPunishmentmeasure() == null)
+            throw new BusinessException("请选择处罚措施");
+
+        if (StringUtils.isBlank(assessApply.getPunishmentreason()))
+            throw new BusinessException("请填写处罚原因");
+
+        assessApply.setValidflag(true);
+        assessApply.setCode("SA-" + System.currentTimeMillis());
+        assessApply.setCreatetime(new Date());
+        assessApply.setRequestor(user.getUsername());
+        assessApply.setRequestorid(user.getId());
+        assessApply.setPunishstatus(PunishStatus.UNPUNISH);
+        assessApply.setStatus(AssessApplyStatus.TOSUBMIT);
+        assessApply.setType(AssessType.SALE);
+        if (assessApply.getFile() != null) {
+            try {
+                String filename = UploadUtil.uploadFile(assessApply.getFile(), Properties.assessApplyPath);
+                assessApply.setPath1(Properties.assessApply + filename);
+            } catch (Exception e) {
+                e.printStackTrace();
+                throw new BusinessException("上传文件出现问题,请联系管理员");
+            }
+        }
+
+        this.save(assessApply);
+    }
+
+    @Override
+    public void modSaleAssessApply(AssessApply assessApply, UserInfo user) {
+
+        AssessApply aa = this.getById(assessApply.getId());
+        if (aa == null)
+            throw new BusinessException("单子不存在,请联系管理员");
+
+        if (aa.getStatus() != AssessApplyStatus.TOSUBMIT
+                && aa.getStatus() != AssessApplyStatus.REJECT)
+            throw new BusinessException("提交后的单子不能修改");
+
+        if (StringUtils.isBlank(assessApply.getEnterprisename())
+                || StringUtils.isBlank(assessApply.getEnterprisenumber()))
+            throw new BusinessException("请选择企业信息");
+
+        if (assessApply.getPunishmentmeasure() == null)
+            throw new BusinessException("请选择处罚措施");
+
+        if (StringUtils.isBlank(assessApply.getPunishmentreason()))
+            throw new BusinessException("请填写处罚原因");
+
+        if (assessApply.getFile() != null) {
+            try {
+                String filename = UploadUtil.uploadFile(assessApply.getFile(), Properties.assessApplyPath);
+                aa.setPath1(Properties.assessApply + filename);
+            } catch (Exception e) {
+                e.printStackTrace();
+                throw new BusinessException("上传文件出现问题,请联系管理员");
+            }
+        }
+
+        aa.setPunishmentmeasure(assessApply.getPunishmentmeasure());
+        aa.setPunishmentreason(assessApply.getPunishmentreason());
+        aa.setModifytime(new Date());
+        aa.setEnterprisename(assessApply.getEnterprisename());
+        aa.setEnterprisenumber(assessApply.getEnterprisenumber());
+        this.updateById(aa);
+    }
+
+    @Override
+    public void submitSaleAssessApply(Long id, UserInfo user) {
+        AssessApply assessApply = this.getById(id);
+        if (assessApply.getStatus() != AssessApplyStatus.REJECT
+                && assessApply.getStatus() != AssessApplyStatus.TOSUBMIT) {
+            throw new BusinessException("当前状态不能提交");
+        }
+
+        assessApply.setStatus(AssessApplyStatus.PENDING);
+        assessApply.setSubmittime(new Date());
+        this.updateById(assessApply);
+    }
+
+    /**
+     * @Description: 审批通过,直接停用
+     * @date 2021/7/12 8:47
+     */
+    @Override
+    @Transactional
+    public void approveSaleAssessApply(JSONObject entity, UserInfo user) {
+        Long id = entity.getLong("id");
+//        String approvenote = entity.getString("approvenote");
+
+        if (id == null ) throw new BusinessException("传参有误,请联系管理员");
+
+        AssessApply assessApply = this.getById(id);
+        if (assessApply == null) throw new BusinessException("传参有误或者单子不存在");
+
+        assessApply.setApprover(user.getUsername());
+        assessApply.setApprovetime(new Date());
+        assessApply.setStatus(AssessApplyStatus.APPROVED);
+//        assessApply.setApprovenote(StringUtils.isBlank(approvenote) ? null : approvenote);
+        assessApply.setPunishstatus(PunishStatus.PUNISHING);
+        this.updateById(assessApply);
+        //直接执行处罚 先停用
+        enterpriseService.deactivateEnterprise(null,assessApply.getEnterprisenumber(), user);
+    }
+
+    @Override
+    public void rejectSaleAssessApply(JSONObject entity, UserInfo user) {
+        Long id = entity.getLong("id");
+        String lastrejectreason = entity.getString("lastrejectreason");
+
+        if (id == null ) throw new BusinessException("传参有误,请联系管理员");
+
+        if (StringUtils.isBlank(lastrejectreason)) throw new BusinessException("请填写拒绝理由");
+
+        AssessApply assessApply = this.getById(id);
+        if (assessApply == null) throw new BusinessException("传参有误或者单子不存在");
+
+        Date now = new Date();
+        assessApply.setApprover(user.getUsername());
+        assessApply.setApprovetime(now);
+        assessApply.setLastrejecttime(now);
+        assessApply.setStatus(AssessApplyStatus.REJECT);
+        assessApply.setLastrejectreason(lastrejectreason);
+        this.updateById(assessApply);
+    }
+
+    /**
+     * @Description: 销售评定分页查询
+     * @date 2021/7/5 14:30
+     */
+    @Override
+    public IPage selectSalePages(Page<AssessApply> page, Map filter, UserInfo user) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("type", AssessType.SALE);
+        params.put("code", filter.get("code"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("status", filter.get("status"));
+        //不是超级管理员只能看到自己的
+        if (user.getType() != 1 && user.getType()!= 2) {
+            params.put("requestorid", user.getId());
+        }
+        List<AssessApply> data = assessApplyMapper.selectPages(params, page);
+        return page.setRecords(data);
+    }
+
+
+    @Override
+    public void addAccessAssessApply(AssessApply assessApply, UserInfo user) {
+        if (StringUtils.isBlank(assessApply.getEnterprisename())
+                || StringUtils.isBlank(assessApply.getEnterprisenumber()))
+            throw new BusinessException("请选择企业信息");
+
+        if (assessApply.getPunishmentmeasure() == null)
+            throw new BusinessException("请选择处罚措施");
+
+        if (StringUtils.isBlank(assessApply.getPunishmentreason()))
+            throw new BusinessException("请填写处罚意见");
+
+        if (assessApply.getFile() == null)
+            throw new BusinessException("请上传处罚凭证");
+
+        assessApply.setValidflag(true);
+        assessApply.setPunishstatus(PunishStatus.UNPUNISH);
+        assessApply.setCode("AA-" + System.currentTimeMillis());
+        assessApply.setCreatetime(new Date());
+        assessApply.setRequestor(user.getUsername());
+        assessApply.setRequestorid(user.getId());
+        assessApply.setStatus(AssessApplyStatus.TOSUBMIT);
+        assessApply.setType(AssessType.ACCESS);
+
+        try {
+            String filename = UploadUtil.uploadFile(assessApply.getFile(), Properties.assessApplyPath);
+            assessApply.setPath1(Properties.assessApply + filename);
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new BusinessException("上传文件出现问题,请联系管理员");
+        }
+        this.save(assessApply);
+
+    }
+
+    @Override
+    public void modAccessAssessApply(AssessApply assessApply, UserInfo user) {
+        AssessApply aa = this.getById(assessApply.getId());
+        if (aa == null)
+            throw new BusinessException("单子不存在,请联系管理员");
+
+        if (aa.getStatus() != AssessApplyStatus.TOSUBMIT
+                && aa.getStatus() != AssessApplyStatus.REJECT)
+            throw new BusinessException("提交后的单子不能修改");
+
+        if (StringUtils.isBlank(assessApply.getEnterprisename())
+                || StringUtils.isBlank(assessApply.getEnterprisenumber()))
+            throw new BusinessException("请选择企业信息");
+
+        if (StringUtils.isBlank(assessApply.getPunishmentreason()))
+            throw new BusinessException("请填写处罚意见");
+
+        if (assessApply.getFile() == null)
+            throw new BusinessException("请上传处罚凭证");
+
+
+        try {
+            String filename = UploadUtil.uploadFile(assessApply.getFile(), Properties.assessApplyPath);
+            aa.setPath1(Properties.assessApply + filename);
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new BusinessException("上传文件出现问题,请联系管理员");
+        }
+        aa.setPunishmentmeasure(assessApply.getPunishmentmeasure());
+        aa.setPunishmentreason(assessApply.getPunishmentreason());
+        aa.setModifytime(new Date());
+        aa.setEnterprisename(assessApply.getEnterprisename());
+        aa.setEnterprisenumber(assessApply.getEnterprisenumber());
+        //处罚的信息
+        this.updateById(aa);
+
+    }
+
+    @Override
+    public void submitAccessAssessApply(Long id, UserInfo user) {
+        AssessApply assessApply = this.getById(id);
+        if (assessApply.getStatus() != AssessApplyStatus.REJECT
+                && assessApply.getStatus() != AssessApplyStatus.TOSUBMIT) {
+            throw new BusinessException("当前状态不能提交");
+        }
+
+        assessApply.setStatus(AssessApplyStatus.PENDING);
+        assessApply.setSubmittime(new Date());
+        this.updateById(assessApply);
+    }
+
+
+    @Override
+    public List<AssessApply> selectAllPunishingSaleAssessApply() {
+        //条件一:type为sale 销售评定
+        //条件二:处罚中的单子 punishing
+        return assessApplyMapper.selectAllPunishingSaleAssessApply(AssessType.SALE, PunishStatus.PUNISHING);
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/AuthorizationServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/AuthorizationServiceImpl.java
new file mode 100644
index 0000000..8a25e48
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/AuthorizationServiceImpl.java
@@ -0,0 +1,49 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.AuthorizationInfo;
+import com.gk.firework.Mapper.AuthorizationInfoMapper;
+import com.gk.firework.Service.AuthorizationService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author : jingjy
+ * @date : 2021/7/2 9:41
+ */
+@Service("AuthorizationService")
+public class AuthorizationServiceImpl extends ServiceImpl<AuthorizationInfoMapper, AuthorizationInfo> implements AuthorizationService {
+    @Autowired
+    AuthorizationInfoMapper authorizationInfoMapper;
+
+    @Override
+    public AuthorizationInfo selectByUser(String enterprisenumber, String authcode) {
+        return authorizationInfoMapper.selectByUser(enterprisenumber, authcode);
+    }
+
+    @Override
+    public List<AuthorizationInfo> getAuthByEnterprise(String enterpriseNumber) {
+        LambdaQueryWrapper<AuthorizationInfo>wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(AuthorizationInfo::getEnterprisenumber,enterpriseNumber);
+        return authorizationInfoMapper.selectList(wrapper);
+    }
+
+    @Override
+    public boolean checkPrefixExist(String prefix) {
+        LambdaQueryWrapper<AuthorizationInfo>wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(AuthorizationInfo::getAuthcodeprefix,prefix);
+        AuthorizationInfo authorizationInfo = authorizationInfoMapper.selectOne(wrapper);
+        return authorizationInfo != null;
+    }
+
+    @Override
+    public boolean checkCodeExist(String code) {
+        LambdaQueryWrapper<AuthorizationInfo>wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(AuthorizationInfo::getAuthcode,code);
+        AuthorizationInfo authorizationInfo = authorizationInfoMapper.selectOne(wrapper);
+        return authorizationInfo != null;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/BlackListServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/BlackListServiceImpl.java
new file mode 100644
index 0000000..ed2cdee
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/BlackListServiceImpl.java
@@ -0,0 +1,139 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.BlackList;
+import com.gk.firework.Domain.Enterprise;
+import com.gk.firework.Domain.Enum.EnterpriseStatus;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.FilterObject;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Mapper.BlackListMapper;
+import com.gk.firework.Mapper.EnterpriseMapper;
+import com.gk.firework.Service.BlackListService;
+import com.gk.firework.Service.EnterpriseService;
+import com.gk.firework.Service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.List;
+
+@Service("blackListService")
+public class BlackListServiceImpl extends ServiceImpl<BlackListMapper, BlackList> implements BlackListService {
+
+
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private BlackListMapper blackListMapper;
+    @Autowired
+    private EnterpriseService enterpriseService;
+
+
+    /**
+    * @Description: 修改
+    * @date 2021/7/9 15:15
+    */
+    @Override
+    @Transactional
+    public void addBlackList(BlackList blackList, UserInfo user) {
+
+        String enterprisename = blackList.getEnterprisename();
+        if (StringUtils.isBlank(enterprisename))
+            throw new BusinessException("请填写企业名称");
+
+        Enterprise enterprise = enterpriseService.selectEnterpriseByName(enterprisename);
+        if (enterprise == null)
+            throw new BusinessException("企业信息不存在");
+
+        blackList.setCreateby(user.getUsername());
+        blackList.setCreatetime(new Date());
+        blackList.setCreatebyid(user.getId());
+        blackList.setValidflag(Boolean.TRUE);
+        this.save(blackList);
+        //停用企业
+        //1.修改企业状态为 停止
+        enterpriseService.setEnterpriseStatus(EnterpriseStatus.OFF, enterprise.getId());
+
+        //2.修改企业用户isdel=1     3.修改终端用户isdel=1
+        List<UserInfo> userList = userService.selectByCompanyId(enterprise.getId(),0);
+        if (userList.size() != 2) {
+            throw new BusinessException("发生错误,请联系管理员");
+        }
+        for (UserInfo info : userList) {
+            userService.deleteById(info.getId());
+        }
+    }
+
+
+    /**
+    * @Description: 删除
+    * @date 2021/7/9 15:15
+    */
+    @Override
+    @Transactional
+    public void delBlackList(Long id, UserInfo user) {
+        if (id == null)
+            throw new BusinessException("参数传递错误,请联系管理员");
+        BlackList one = this.getById(id);
+        if (one == null) throw new BusinessException("数据不存在,请联系管理员");
+        String enterprisename = one.getEnterprisename();
+        Enterprise enterprise = enterpriseService.selectEnterpriseByName(enterprisename);
+        one.setValidflag(Boolean.FALSE);
+        one.setModifyby(user.getUsername());
+        one.setModifytime(new Date());
+        this.updateById(one);
+        //启用
+        //1.修改企业状态为 启用
+        enterpriseService.setEnterpriseStatus(EnterpriseStatus.ON, id);
+        //2.修改企业用户isdel 0
+        //3.修改终端用户isdel 0
+        List<UserInfo> userList = userService.selectByCompanyId(enterprise.getId(),1);
+        if (userList.size() != 2) {
+            throw new BusinessException("发生错误,请联系管理员");
+        }
+        for (UserInfo info : userList) {
+            userService.recoverOneById(info.getId());
+        }
+    }
+
+    @Override
+    public IPage selectPages(Page<BlackList> page, Map filter, UserInfo user) {
+        Map<String, Object> params = new HashMap<>();
+        //可见自己建的  管理员(1,2)没有限制
+        if (user.getType() != 1 && user.getType() != 2) {
+            params.put("createbyid", user.getId());
+        }
+
+        //页面过滤
+        params.put("enterprisename", filter.get("enterprisename"));
+        List<BlackList> data = blackListMapper.selectPages(page, params);
+        return page.setRecords(data);
+
+    }
+
+    /**
+    * @Description: 根据企业编号查找企业企业名单
+    * @date 2021/7/9 16:51
+    */
+    @Override
+    public BlackList getByEnterprisenumber(String enterprisenumber) {
+        if (StringUtils.isBlank(enterprisenumber)) {
+            throw new BusinessException("单位编号不能为空");
+        }
+        LambdaQueryWrapper<BlackList> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(BlackList::getEnterprisenumber, enterprisenumber)
+                    .eq(BlackList::getValidflag,Boolean.TRUE);
+        return blackListMapper.selectOne(queryWrapper);
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/ContractDetailServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/ContractDetailServiceImpl.java
new file mode 100644
index 0000000..0db5653
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/ContractDetailServiceImpl.java
@@ -0,0 +1,40 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.ContractDetailInfo;
+import com.gk.firework.Domain.Vo.ProductVo;
+import com.gk.firework.Mapper.ContractDetailInfoMapper;
+import com.gk.firework.Service.ContractDetailService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+@Service("ContractDetailService")
+public class ContractDetailServiceImpl extends ServiceImpl<ContractDetailInfoMapper, ContractDetailInfo> implements ContractDetailService {
+    @Autowired
+    ContractDetailInfoMapper contractDetailInfoMapper;
+
+
+    @Override
+    public void deleteByOrder(String ordercode) {
+        contractDetailInfoMapper.deleteByOrder(ordercode);
+    }
+
+    @Override
+    public List<ProductVo> selectByOrder(String ordercode) {
+        return contractDetailInfoMapper.selectByOrder(ordercode);
+    }
+
+    @Override
+    public void updateChangNum(String ordercode,String productCode, Integer returnNum) {
+        contractDetailInfoMapper.updateChangNum(ordercode, productCode, returnNum);
+    }
+
+    @Override
+    public List<ContractDetailInfo> selectAllDetailAtSpecificDate(String productCode, Date producedate) {
+        return contractDetailInfoMapper.selectAllDetailAtSpecificDate(productCode,producedate);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/ContractFileServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/ContractFileServiceImpl.java
new file mode 100644
index 0000000..8aa6013
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/ContractFileServiceImpl.java
@@ -0,0 +1,42 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.ContractFile;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Mapper.ContractFileMapper;
+import com.gk.firework.Service.ContractFileService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service("contractFileService")
+public class ContractFileServiceImpl extends ServiceImpl<ContractFileMapper, ContractFile> implements ContractFileService {
+
+    @Autowired
+    private ContractFileMapper contractFileMapper;
+
+    @Override
+    public ContractFile selectByOrderCode(String ordercode) {
+        if (StringUtils.isBlank(ordercode)) {
+            throw new BusinessException("单号出现问题");
+        }
+        LambdaQueryWrapper<ContractFile> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ContractFile::getValidflag, true).eq(ContractFile::getOrdercode,ordercode);
+        return contractFileMapper.selectOne(queryWrapper) ;
+    }
+
+    @Override
+    public void deleteAll(String ordercode) {
+        if (StringUtils.isBlank(ordercode)) {
+            throw new BusinessException("单号出现问题");
+        }
+        LambdaUpdateWrapper<ContractFile> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(ContractFile::getValidflag, false)
+                .eq(ContractFile::getOrdercode, ordercode);
+        this.update(updateWrapper);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/ContractLogServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/ContractLogServiceImpl.java
new file mode 100644
index 0000000..ca8b085
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/ContractLogServiceImpl.java
@@ -0,0 +1,16 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.ContractLogInfo;
+import com.gk.firework.Mapper.ContractLogInfoMapper;
+import com.gk.firework.Service.ContractLogService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service("ContractLogService")
+public class ContractLogServiceImpl extends ServiceImpl<ContractLogInfoMapper, ContractLogInfo> implements ContractLogService {
+
+    @Autowired
+    ContractLogInfoMapper contractLogInfoMapper;
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/ContractOrderServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/ContractOrderServiceImpl.java
new file mode 100644
index 0000000..3c288d8
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/ContractOrderServiceImpl.java
@@ -0,0 +1,774 @@
+package com.gk.firework.Service.ServiceImpl;
+import com.gk.firework.Domain.ContractFile;
+
+import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.Enum.EnterpriseSafetySupervision;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Utils.Properties;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Utils.UploadUtil;
+import com.gk.firework.Domain.Vo.*;
+import com.gk.firework.Mapper.ContractDetailInfoMapper;
+import com.gk.firework.Mapper.ContractOrderInfoMapper;
+import com.gk.firework.Service.*;
+import org.apache.commons.lang3.time.DateFormatUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@Service("ContractOrderService")
+public class ContractOrderServiceImpl extends ServiceImpl<ContractOrderInfoMapper, ContractOrderInfo> implements ContractOrderService {
+    @Autowired
+    ContractOrderInfoMapper contractOrderInfoMapper;
+    @Autowired
+    ContractDetailInfoMapper contractDetailInfoMapper;
+    @Autowired
+    ContractFileService contractFileService;
+    @Autowired
+    ContractDetailService contractDetailService;
+    @Autowired
+    ContractLogService contractLogService;
+    @Autowired
+    UserService userService;
+    @Autowired
+    EnterpriseService enterpriseService;
+    @Autowired
+    ProductCodeService productCodeService;
+    @Autowired
+    ProductLocusService productLocusService;
+    @Autowired
+    ProductService productService;
+    @Autowired
+    ExcelExportService excelExportService;
+    @Autowired
+    ControlPrintParamService controlPrintParamService;
+
+    @Override
+    public void selectDataGrid(PageInfo pageInfo) {
+        Page<ContractOrderVo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+        List<OrderItem> orderItems = new ArrayList<>();
+        OrderItem orderItem = new OrderItem();
+        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+            orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
+            orderItem.setColumn(pageInfo.getSort());
+        }else {
+            orderItem.setAsc(false);
+            orderItem.setColumn("createddate");
+        }
+        orderItems.add(orderItem);
+        page.setOrders(orderItems);
+        List<ContractOrderVo> list = contractOrderInfoMapper.selectDataGrid(page,pageInfo.getCondition());
+        for (ContractOrderVo contractOrderVo : list) {
+            List<ProductVo> productVoList = contractDetailInfoMapper.selectByOrder(contractOrderVo.getOrdercode());
+            ContractFile contractFile =  contractFileService.selectByOrderCode(contractOrderVo.getOrdercode());
+            contractOrderVo.setProductInfoList(productVoList);
+            contractOrderVo.setContractFile(contractFile);
+        }
+        pageInfo.setResult(list);
+        pageInfo.setTotalCount(page.getTotal());
+    }
+
+    @Override
+    public List<ContractOrderInfo> selectByStatus(String status, String now) {
+        return contractOrderInfoMapper.selectByStatus(status,now);
+    }
+
+    @Override
+    public ContractOrderInfo selectByOrderCode(String ordercode) {
+        return contractOrderInfoMapper.selectByOrderCode(ordercode);
+    }
+
+    @Override
+    @Transactional
+    public void addApply(ContractOrderVo contractOrderVo, UserInfo user) {
+
+
+        UserInfo userInfo = userService.getById(user.getId());
+        if (StringUtils.isBlank(userInfo.getCompanynumber())) {
+            throw new BusinessException("没有权限新增");
+        }
+        Enterprise enterprise = enterpriseService.selectEnterpriseByNumber(userInfo.getCompanynumber());
+        assert enterprise.getSafetysupervision() != null;
+        if (enterprise.getSafetysupervision().equals(EnterpriseSafetySupervision.PRODUCE.getMsg())) {
+            throw new BusinessException("生产企业不可以申请合同");
+        }
+        //单号
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+        String ordercode = "CT"+sdf.format(new Date());
+        String operator = user.getUsername();
+        //规律的单号
+        String regularCode = this.generateRegularCode();
+
+
+        JSONArray jsonArray = JSONArray.parseArray(contractOrderVo.getProductList());
+        List<ContractDetailInfo> contractDetails = jsonArray.toJavaList(ContractDetailInfo.class);
+        if (contractDetails.size() <1) throw new BusinessException("产品不能为空");
+        //上传附件
+        MultipartFile file = contractOrderVo.getFile();
+        if (file != null ) {
+            try {
+                ContractFile attachment = new ContractFile();
+                String name = UploadUtil.uploadFile(file, Properties.contractPath);
+                attachment.setValidflag(true);
+                attachment.setOrdercode(ordercode);
+                attachment.setFilename(file.getOriginalFilename());
+                attachment.setUrl(Properties.contract + name);
+                attachment.setCreateby(user.getId());
+                attachment.setCreatebyname(user.getUsername());
+                attachment.setCreatetime(new Date());
+                contractFileService.save(attachment);
+            } catch (Exception e) {
+                e.printStackTrace();
+                throw new BusinessException("上传文件失败");
+            }
+        }
+        //甲方单位编号
+        contractOrderVo.setPurchaseenterprisenumber(userInfo.getCompanynumber());
+        contractOrderVo.setRegularcode(regularCode);
+        contractOrderVo.setOrdercode(ordercode);
+        contractOrderVo.setStatus(ContractStatus.WAIT_SUBMIT);
+        contractOrderVo.setOperator(operator);
+        contractOrderVo.setCreatedby(operator);
+        contractOrderVo.setCreateddate(new Date());
+        contractOrderVo.setModifiedby(operator);
+        contractOrderVo.setModifieddate(new Date());
+        contractOrderVo.setIsdel((byte)0);
+        contractOrderVo.setManufacturer(contractOrderVo.getSupplyunitname());
+        this.save(contractOrderVo);
+
+        if (contractDetails.size() > 0) {
+            for (ContractDetailInfo contractDetail : contractDetails) {
+                ProductInfo productInfo = productService.selectByDirection(contractDetail.getDirectioncode());
+                if (productInfo == null) {
+                    throw new BusinessException(String.format("产品不存在,流向码:%s", contractDetail.getName()));
+                }
+                if (contractDetail.getNum() == null) {
+                    throw new BusinessException(String.format("请输入%s"+"的产品数量",contractDetail.getName()));
+                }
+                if (contractDetail.getPrice() == null) {
+                    throw new BusinessException(String.format("请输入%s"+"的进货单价",contractDetail.getName()));
+                }
+                contractDetail.setOrdercode(ordercode);
+                contractDetailService.save(contractDetail);
+            }
+        }
+        ContractLogInfo contractLogInfo = new ContractLogInfo();
+        contractLogInfo.setOptlog("新增合同");
+        contractLogInfo.setOperator(operator);
+        contractLogInfo.setOrdercode(ordercode);
+        contractLogInfo.setOperatordate(new Date());
+        contractLogService.save(contractLogInfo);
+    }
+
+    @Override
+    @Transactional
+    public void putApply(ContractOrderVo contractOrderVo, UserInfo user) {
+
+        UserInfo userInfo = userService.getById(user.getId());
+        if (StringUtils.isBlank(userInfo.getCompanynumber())) {
+            throw new BusinessException("没有权限修改");
+        }
+        String operator = user.getUsername();
+        JSONArray jsonArray = JSONArray.parseArray(contractOrderVo.getProductList());
+        List<ContractDetailInfo> contractDetails = jsonArray.toJavaList(ContractDetailInfo.class);
+        if (contractDetails.size() <1) throw new BusinessException("产品不能为空");
+
+        ContractOrderInfo contractOrderInfo = this.getById(contractOrderVo.getId());
+        if (!contractOrderInfo.getStatus().equals(ContractStatus.WAIT_SUBMIT) &&
+                !contractOrderInfo.getStatus().equals(ContractStatus.Refuse_Product)){
+            throw new BusinessException("合同状态不为待提交、拒绝生产,无法修改");
+        }
+        //上传附件
+        MultipartFile file = contractOrderVo.getFile();
+        if (file != null ) {
+            try {
+                contractFileService.deleteAll(contractOrderVo.getOrdercode());
+                ContractFile attachment = new ContractFile();
+                String name = UploadUtil.uploadFile(file, Properties.contractPath);
+                attachment.setValidflag(true);
+                attachment.setOrdercode(contractOrderVo.getOrdercode());
+                attachment.setFilename(file.getOriginalFilename());
+                attachment.setUrl(Properties.contract + name);
+                attachment.setCreateby(user.getId());
+                attachment.setCreatebyname(user.getUsername());
+                attachment.setCreatetime(new Date());
+                contractFileService.save(attachment);
+            } catch (Exception e) {
+                e.printStackTrace();
+                throw new BusinessException("上传文件失败");
+            }
+        }
+
+        contractOrderVo.setManufacturer(contractOrderVo.getSupplyunitname());
+        this.updateById(contractOrderVo);
+
+        if (contractDetails != null && contractDetails.size() > 0) {
+            contractDetailService.deleteByOrder(contractOrderInfo.getOrdercode());
+            for (ContractDetailInfo contractDetail : contractDetails) {
+                if (contractDetail.getNum() == null) {
+                    throw new BusinessException(String.format("请输入%s"+"的产品数量",contractDetail.getName()));
+                }
+                if (contractDetail.getPrice() == null) {
+                    throw new BusinessException(String.format("请输入%s"+"的进货单价",contractDetail.getName()));
+                }
+                contractDetail.setOrdercode(contractOrderVo.getOrdercode());
+                contractDetailService.save(contractDetail);
+            }
+        }
+
+        ContractLogInfo contractLogInfo = new ContractLogInfo();
+        contractLogInfo.setOptlog("修改合同");
+        contractLogInfo.setOperator(operator);
+        contractLogInfo.setOrdercode(contractOrderInfo.getOrdercode());
+        contractLogInfo.setOperatordate(new Date());
+        contractLogService.save(contractLogInfo);
+
+    }
+
+    @Override
+    @Transactional
+    public void confirmProduct(ContractOrderVo contractOrderVo, UserInfo user) {
+
+        String operator = user.getUsername();
+        ContractOrderInfo contractOrderInfo = this.getById(contractOrderVo.getId());
+        //上传附件
+        MultipartFile file = contractOrderVo.getFile();
+        if (file != null ) {
+            try {
+                ContractFile attachment = new ContractFile();
+                String name = UploadUtil.uploadFile(file, Properties.contractPath);
+                attachment.setValidflag(true);
+                attachment.setFilename(file.getOriginalFilename());
+                attachment.setUrl(Properties.contract + name);
+                attachment.setCreateby(user.getId());
+                attachment.setCreatebyname(user.getUsername());
+                attachment.setCreatetime(new Date());
+                contractFileService.save(attachment);
+            } catch (Exception e) {
+                e.printStackTrace();
+                throw new BusinessException("上传文件失败");
+            }
+        }
+
+        if (!contractOrderInfo.getStatus().equals(ContractStatus.WAIT_CONFIRM)) {
+            throw new BusinessException("合同状态不为待确认,无法确认生产");
+        }
+
+        contractOrderInfo.setStatus(ContractStatus.Confirm_Product);
+        contractOrderInfo.setModifiedby(operator);
+        contractOrderInfo.setModifieddate(new Date());
+        contractOrderInfo.setReturnstatus("未退回");
+        contractOrderInfo.setSupplyunitaddress(contractOrderVo.getSupplyunitaddress());
+        contractOrderInfo.setSupplyrepresentative(contractOrderVo.getSupplyrepresentative());
+        contractOrderInfo.setSupplyrepresentativephone(contractOrderVo.getSupplyrepresentativephone());
+        contractOrderInfo.setSupplybank(contractOrderVo.getSupplybank());
+        contractOrderInfo.setSupplylicensenumber(contractOrderVo.getSupplylicensenumber());
+        contractOrderInfo.setSupplyzipcode(contractOrderVo.getSupplyzipcode());
+        contractOrderInfo.setSupplyagent(contractOrderVo.getSupplyagent());
+        contractOrderInfo.setSupplyagentphone(contractOrderVo.getSupplyagentphone());
+        contractOrderInfo.setSupplyagentemail(contractOrderVo.getSupplyagentemail());
+        contractOrderInfo.setSupplyaccount(contractOrderVo.getSupplyaccount());
+        this.updateById(contractOrderInfo);
+
+        ContractLogInfo contractLogInfo = new ContractLogInfo();
+        contractLogInfo.setOptlog("确认合同");
+        contractLogInfo.setOperator(operator);
+        contractLogInfo.setOrdercode(contractOrderInfo.getOrdercode());
+        contractLogInfo.setOperatordate(new Date());
+        contractLogService.save(contractLogInfo);
+    }
+
+    /**
+    * @Description: 申请校验
+    * @date 2021/5/11 13:55
+    */
+    @Override
+    public void checkAdd(ContractOrderVo contractOrderVo) {
+        if (StringUtils.isBlank(contractOrderVo.getSignlocation())) {
+            throw new BusinessException("签订地点不能为空");
+        }
+
+        if (contractOrderVo.getSigntime() == null) {
+            throw new BusinessException("签订时间不能为空");
+        }
+
+        if (StringUtils.isBlank(contractOrderVo.getProductList())) {
+            throw new BusinessException("产品列表不能为空");
+        }
+
+        if (StringUtils.isBlank(contractOrderVo.getSupplyenterprisenumber())
+                || StringUtils.isBlank(contractOrderVo.getSupplyunitname())) {
+            throw new BusinessException("生产企业不能为空");
+        }
+
+
+        if (StringUtils.isBlank(contractOrderVo.getPurchaseunitaddress())) {
+            throw new BusinessException("供货单位地址不能为空");
+        }
+
+        if (StringUtils.isBlank(contractOrderVo.getPurchaserepresentative())) {
+            throw new BusinessException("供货单位法定代表人联系电话不能为空");
+        }
+
+        if (StringUtils.isBlank(contractOrderVo.getPurchaserepresentativeemail())) {
+            throw new BusinessException("供货单位法定代表人电子邮箱不能为空");
+        }
+
+        if (StringUtils.isBlank(contractOrderVo.getPurchasebank())) {
+            throw new BusinessException("供货单位开户银行不能为空");
+        }
+
+        if (StringUtils.isBlank(contractOrderVo.getPurchaselicensenumber())) {
+            throw new BusinessException("供货单位许可证编号不能为空");
+        }
+
+        if (StringUtils.isBlank(contractOrderVo.getPurchasezipcode())) {
+            throw new BusinessException("供货单位许可证编号不能为空");
+        }
+
+        if (StringUtils.isBlank(contractOrderVo.getPurchaseagent())) {
+            throw new BusinessException("供货单位委托代理人不能为空");
+        }
+
+        if (StringUtils.isBlank(contractOrderVo.getPurchaseagentphone())) {
+            throw new BusinessException("供货单位委托代理人联系电话不能为空");
+        }
+
+        if (StringUtils.isBlank(contractOrderVo.getPurchaseaccount())) {
+            throw new BusinessException("供货单位账户不能为空");
+        }
+
+
+
+        //合同内容:
+        if (StringUtils.isBlank(contractOrderVo.getQualitystandard())) {
+            throw new BusinessException("产品质量标准及要求不能为空");
+        }
+
+        if (StringUtils.isBlank(contractOrderVo.getProhibiteddrug())) {
+            throw new BusinessException("禁(限)用药物要求不能为空");
+        }
+
+        if (StringUtils.isBlank(contractOrderVo.getPackingstandard())) {
+            throw new BusinessException("产品包装标准及要求不能为空");
+        }
+
+        if (StringUtils.isBlank(contractOrderVo.getTimeandlocation())) {
+            throw new BusinessException("提(交)货时间和地点不能为空");
+        }
+
+        if (StringUtils.isBlank(contractOrderVo.getTransportandcost())) {
+            throw new BusinessException("运输方式及费用负担不能为空");
+        }
+
+        if (StringUtils.isBlank(contractOrderVo.getAcceptstandard())) {
+            throw new BusinessException("验收标准与方法不能为空");
+        }
+
+        if (StringUtils.isBlank(contractOrderVo.getObjectdeadline())) {
+            throw new BusinessException("提出异议期限不能为空");
+        }
+
+        if (StringUtils.isBlank(contractOrderVo.getSettlemethod())) {
+            throw new BusinessException("结算方式与期限不能为空");
+        }
+
+        if (StringUtils.isBlank(contractOrderVo.getProductsafetyandquality())) {
+            throw new BusinessException("产品安全与质量责任不能为空");
+        }
+
+        if (StringUtils.isBlank(contractOrderVo.getTransportsafety())) {
+            throw new BusinessException("运输安全责任不能为空");
+        }
+
+        if (StringUtils.isBlank(contractOrderVo.getBreakcontract())) {
+            throw new BusinessException("违约责任不能为空");
+        }
+
+        if (StringUtils.isBlank(contractOrderVo.getContractdisputesfelid())) {
+            throw new BusinessException("合同争议的解决方式不能为空");
+        }
+
+        if (StringUtils.isBlank(contractOrderVo.getOtheragreedmatters())) {
+            throw new BusinessException("其他约定事项不能为空");
+        }
+        //有效期
+        if (contractOrderVo.getValidstarttime() == null || contractOrderVo.getValidendtime() == null) {
+            throw new BusinessException("合同有效期不能为空");
+        }
+    }
+
+
+    /**
+     * @Description: 确认校验
+     * @date 2021/5/11 13:55
+     */
+    @Override
+    public void checkConfirm(ContractOrderVo contractOrderVo) {
+
+
+        if (StringUtils.isBlank(contractOrderVo.getSupplyunitaddress())) {
+            throw new BusinessException("生产单位地址不能为空");
+        }
+
+        if (StringUtils.isBlank(contractOrderVo.getSupplyrepresentative())) {
+            throw new BusinessException("生产单位法定代表人联系电话不能为空");
+        }
+
+        if (StringUtils.isBlank(contractOrderVo.getSupplyrepresentativeemail())) {
+            throw new BusinessException("生产单位法定代表人电子邮箱不能为空");
+        }
+
+        if (StringUtils.isBlank(contractOrderVo.getSupplybank())) {
+            throw new BusinessException("生产单位开户银行不能为空");
+        }
+
+        if (StringUtils.isBlank(contractOrderVo.getSupplylicensenumber())) {
+            throw new BusinessException("生产单位许可证编号不能为空");
+        }
+
+        if (StringUtils.isBlank(contractOrderVo.getSupplyzipcode())) {
+            throw new BusinessException("生产单位邮政编码不能为空");
+        }
+
+        if (StringUtils.isBlank(contractOrderVo.getSupplyagent())) {
+            throw new BusinessException("生产单位委托代理人不能为空");
+        }
+
+        if (StringUtils.isBlank(contractOrderVo.getSupplyagentphone())) {
+            throw new BusinessException("生产单位委托代理人联系电话不能为空");
+        }
+
+        if (StringUtils.isBlank(contractOrderVo.getSupplyaccount())) {
+            throw new BusinessException("生产单位账户不能为空");
+        }
+    }
+
+    @Override
+    @Transactional
+    public void returnTag(String ordercode, MultipartFile file,UserInfo userInfo) {
+        if (StringUtils.isBlank(ordercode)) {
+            throw new BusinessException("参数传递错误");
+        }
+        List<ProductCodeInfo> productCodeInfos = productCodeService.selectByOrderCode(ordercode);
+        if (productCodeInfos.size() < 1) {
+            throw new BusinessException("订单编号或者产品出现问题");
+        }
+        byte [] byteArr;
+        try {
+            byteArr = file.getBytes();
+            String originalFilename = file.getOriginalFilename();
+            InputStream inputStream = new ByteArrayInputStream(byteArr);
+            assert originalFilename != null;
+            boolean isExcel2007 = originalFilename.substring(originalFilename.lastIndexOf(".") + 1).endsWith("xlsx");
+        //解析
+            List<String> parsedTags = excelExportService.parseProductCode(inputStream, userInfo, isExcel2007);
+            assert parsedTags.size() > 0;
+            Set<String> distinctSet = new HashSet<>(parsedTags);
+            if (distinctSet.size() != parsedTags.size()) {
+                throw new BusinessException("文件中有重复标签在不同行");
+            }
+            //更新电子标签isdel = 1
+            {
+                List<ProductCodeInfo> updatesTags = new ArrayList<>();
+                Date now = new Date();
+                for (String returnTag : parsedTags) {
+                    boolean isError = true;
+                    for (ProductCodeInfo realCode : productCodeInfos) {
+                        if (realCode.getOriginalcode().equals(returnTag)) {
+                            isError = false;
+                            //开始更新计数
+                            realCode.setIsdel((byte) 1);
+                            updatesTags.add(realCode);
+                            //流向
+                            ProductLocusInfo flow = new ProductLocusInfo();
+                            flow.setCreateddate(now);
+                            flow.setModifieddate(now);
+                            //流向内容为 退货人
+                            flow.setContent(userInfo.getUsername());
+                            flow.setDirectioncode(returnTag);
+                            flow.setType(ProductLocusInfo.ELECTRONIC_LABEL_RETURN_STATUS);
+                            flow.setBoxcode(Integer.valueOf(returnTag.substring(19,22)).toString());
+                            productLocusService.insertProductLocus(flow);
+                        }
+                    }
+                    //如果上传的标签不在合同编号的电子标签,则有问题
+                    if (isError) {
+                        throw new BusinessException(returnTag + ":上传的产品电子标签不是该订单的电子标签或者该标签已经退回");
+                    }
+                }
+                //执行退回标签
+                productCodeService.updateBatchById(updatesTags);
+            }
+            //变更数量统计
+            {
+                Map<String, Integer> changeMap = new HashMap<>();
+
+                for (String parsedTag : parsedTags) {
+                    String productCode = parsedTag.substring(0, 10);
+                    if (changeMap.get(productCode) == null) {
+                        changeMap.put(productCode, 1);
+                    } else {
+                        Integer count = changeMap.get(productCode);
+                        changeMap.put(productCode, ++count);
+                    }
+                }
+
+                for (Map.Entry<String, Integer> entry : changeMap.entrySet()) {
+                    String productCode = entry.getKey();
+                    Integer returnNum = entry.getValue();
+                    //ordercode 和10位productCode 来更新一个变更数量
+                    contractDetailService.updateChangNum(ordercode,productCode, returnNum);
+                }
+            }
+
+            //更新单子状态-》有退回
+
+            contractOrderInfoMapper.updateReturnStatus(ordercode,"有退回");
+
+
+
+        } catch (IOException e) {
+            e.printStackTrace();
+            throw new BusinessException("文件传输发生错误");
+        }
+    }
+
+    @Override
+    public String generateZplString(ProductCodePrint productPrint, UserInfo userInfo) {
+        List<ProductCodeVo>productCodeVos = productPrint.getProductCodeVos();
+        //ZplUtil zplUtil = new ZplUtil();
+        return generateInnerTag(productCodeVos, userInfo);
+    }
+
+    @Override
+    public String generateInnerTag(List<ProductCodeVo> productCodeVos, UserInfo userInfo){
+        StringBuilder builder = new StringBuilder();
+        byte type = 1;
+        ControlPrintParam controlPrintParam = controlPrintParamService.getParamsByUser(userInfo,type);
+        for (int i = 0; i < productCodeVos.size(); i++){
+            ProductCodeVo productCodeVo = productCodeVos.get(i);
+            if (productCodeVo == null || (StringUtils.isBlank(productCodeVo.getOrdercode())&& StringUtils.isBlank(productCodeVo.getItemcode()))){
+                if (i % 2 == 1){
+                    if (!builder.toString().endsWith("^XZ")){
+                        builder.append("^XZ");
+                    }else {
+                        builder.append("^XA^FD.").append("^XZ");
+                    }
+                }
+                continue;
+            }
+            String code = productCodeVo.getItemcode();
+            String title = "新疆流向专用";
+            String date = DateFormatUtils.format(productCodeVo.getCreateddate(), "yyyy-MM-dd HH:mm:ss");
+            Integer baseX = controlPrintParam.getLeftBaseX();
+            Integer titleY = controlPrintParam.getTitleY();
+            Integer titleOffsetX = controlPrintParam.getTitleOffsetX();
+            Integer barCodeWidth = controlPrintParam.getBarcodeWidth();
+            Integer barCodeWidthRatio = controlPrintParam.getBarcodeWidthRadio();
+            Integer barCodeHeight = controlPrintParam.getBarcodeHeight();
+            Integer barCodeY = controlPrintParam.getBarcodeY();
+            Integer qrCodeModel = controlPrintParam.getQrCodeModel();
+            Integer qrCodeMagnification = controlPrintParam.getQrCodeMagnification();
+            Integer qrX = controlPrintParam.getLeftQrX();
+            Integer qrY = controlPrintParam.getQrY();
+            Integer fontSize = controlPrintParam.getFontsize1();
+            Integer fontSize2 = controlPrintParam.getFontsize2();
+            Integer fontSize3 = controlPrintParam.getFontsize3();
+            Integer barCodeTextY = controlPrintParam.getBarcodeTextY();
+            Integer itemNameY = controlPrintParam.getItemNameY();
+            Integer typeY = controlPrintParam.getTypeY();
+            Integer dateY = controlPrintParam.getDateY();
+            Integer manufacturerY = controlPrintParam.getManufacturerY();
+            Integer manufacturerY2 = controlPrintParam.getManufacturerY2();
+            Integer frameX = controlPrintParam.getLeftFrameX();
+            Integer frameY = controlPrintParam.getFrameY();
+            Integer frameWidth = controlPrintParam.getFrameWidth();
+            Integer frameHeight = controlPrintParam.getFrameHeight();
+            Integer darkness = controlPrintParam.getDarkness();
+
+
+            //左标签
+            if (i % 2 == 0){
+                //^XA 开始 ;^JMA 正常打印浓度 ;^SEE:GB18030.DAT^CW1,E:SIMSUN.FNT 支持中文编码
+                builder.append("^XA").append("^JMA").append("^MD").append(darkness).append("^CI28^SEE:GB18030.DAT^CW1,E:SIMSUN.TTF");
+            }else {
+                baseX = controlPrintParam.getRightBaseX();
+                qrX = controlPrintParam.getRightQrX();
+                frameX = controlPrintParam.getRightFrameX();
+            }
+            //标签头
+            //builder.append("^FO").append(baseX).append(",").append(titleY).append("^GFA,64896,64896,00156,").append(title);
+            builder.append("^FO").append(baseX+titleOffsetX).append(",").append(titleY).append("^A1N,").append(fontSize3)
+                    .append(",").append(fontSize3).append("^FD").append(title).append("^FS");
+            //条形码
+            builder.append("^BY").append(barCodeWidth).append(",").append(barCodeWidthRatio).append(",")
+                    .append(barCodeHeight).append("^FO").append(baseX).append(",").append(barCodeY)
+                    .append("^BCN,,N,N^FD").append(code).append("^FS");
+            //二维码
+            builder.append("^BQN,").append(qrCodeModel).append(",").append(qrCodeMagnification).append("^FO")
+                    .append(qrX).append(",").append(qrY).append("^FDLA,").append(code).append("^FS");
+            //条形码文字
+            builder.append("^FO").append(baseX).append(",").append(barCodeTextY).append("^A1N,")
+                    .append(fontSize).append("^FD").append(code).append("^FS");
+            //其他信息
+            //文字转换图片打印,但转换后数据太大
+            // builder.append(zplUtil.getCharPicture(productCodeVo.getItemname(),baseX,itemNameY,30,34,1));
+            // builder.append(zplUtil.getCharPicture(productCodeVo.getType(),baseX,typeY,30,34,1));
+            // builder.append(zplUtil.getCharPicture(productCodeVo.getManufacturer(),baseX,manufacturerY,30,34,1));
+            // builder.append("^FO").append(baseX).append(",").append(dateY).append("^A,").append(fontSize).append(",")
+            // .append(fontSize).append("^FD").append(date).append("^FS");
+            builder.append("^FO").append(baseX).append(",").append(itemNameY).append("^A1N,").append(fontSize2)
+                    .append(",").append(fontSize2).append("^FD").append(productCodeVo.getItemname()).append("^FS");
+            builder.append("^FO").append(baseX).append(",").append(typeY).append("^A1N,").append(fontSize2).append(",")
+                    .append(fontSize2).append("^FD").append(productCodeVo.getType()).append("^FS");
+            builder.append("^FO").append(baseX).append(",").append(dateY).append("^A1N,").append(fontSize).append(",")
+                    .append(fontSize).append("^FD").append(date).append("^FS");
+            String manufacturer = productCodeVo.getManufacturer();
+            if (StringUtils.isBlank(manufacturer)){
+                throw new BusinessException("错误:生产厂家为空");
+            }
+            builder.append("^FO").append(baseX).append(",").append(manufacturerY).append("^A1N,").append(fontSize2)
+                    .append(",").append(fontSize2).append("^FD").append(manufacturer.length()>16?manufacturer.substring(0,16):manufacturer).append("^FS");
+            if (manufacturer.length()>16){
+                builder.append("^FO").append(baseX).append(",").append(manufacturerY2).append("^A1N,").append(fontSize2)
+                        .append(",").append(fontSize2).append("^FD").append(manufacturer.substring(16)).append("^FS");
+            }
+            builder.append("^FO").append(frameX).append(",").append(frameY).append("^GB").append(frameWidth)
+                    .append(",").append(frameHeight).append(",4,B,1^FS");
+            if (i % 2 != 0){
+                builder.append("^XZ");
+            }
+
+        }
+
+        return builder.toString();
+    }
+
+    @Override
+    public String generateOuterTag(List<ProductCodeVo> productCodeVos, UserInfo userInfo){
+        StringBuilder builder = new StringBuilder();
+        byte type = 2;
+        ControlPrintParam controlPrintParam = controlPrintParamService.getParamsByUser(userInfo,type);
+        for (int i = 0; i < productCodeVos.size(); i++){
+            ProductCodeVo productCodeVo = productCodeVos.get(i);
+            if (productCodeVo == null || (StringUtils.isBlank(productCodeVo.getOrdercode())&& StringUtils.isBlank(productCodeVo.getItemcode()))){
+                if (i % 2 == 1){
+                    builder.append("^XZ");
+                }
+                builder.append("^XA").append("^XZ");
+                continue;
+            }
+            String code = productCodeVo.getOriginalcode();
+            if (code.length()!= 22){
+                continue;
+            }
+            String codePrefix = code.substring(0,19);
+            String codeSuffix = code.substring(19);
+
+            String title = "新疆专用:包装识别码";
+            String date = DateFormatUtils.format(productCodeVo.getCreateddate(), "yyyy/MM/dd");
+            int baseX = controlPrintParam.getLeftBaseX();
+            int titleY = controlPrintParam.getTitleY();
+            int barCodeWidth = controlPrintParam.getBarcodeWidth();
+            int barCodeWidthRatio = controlPrintParam.getBarcodeWidthRadio();
+            int barCodeHeight = controlPrintParam.getBarcodeHeight();
+            int barCodeY = controlPrintParam.getBarcodeY();
+            int qrCodeModel = controlPrintParam.getQrCodeModel();
+            int qrCodeMagnification = controlPrintParam.getQrCodeMagnification();
+            int qrX = controlPrintParam.getLeftQrX();
+            int qrY = controlPrintParam.getQrY();
+            int fontSize = controlPrintParam.getFontsize1();
+            int fontSize2 = controlPrintParam.getFontsize2();
+            int barCodeTextY = controlPrintParam.getBarcodeTextY();
+            int itemNameY = controlPrintParam.getItemNameY();
+            int typeY = controlPrintParam.getTypeY();
+            int dateY = controlPrintParam.getDateY();
+            int totalY = controlPrintParam.getTotalY();
+            int manufacturerY = controlPrintParam.getManufacturerY();
+            int manufacturerY2 = controlPrintParam.getManufacturerY2();
+            int darkness = controlPrintParam.getDarkness();
+
+            //左标签
+            if (i % 2 == 0){
+                //^XA 开始 ;^JMA 正常打印浓度 ;^SEE:GB18030.DAT^CW1,E:SIMSUN.FNT 支持中文编码
+                builder.append("^XA").append("^JMA").append("^MD").append(darkness).append("^CI28^SEE:GB18030.DAT^CW1,E:SIMSUN.TTF");
+            }else {
+                baseX = controlPrintParam.getRightBaseX();
+                qrX = controlPrintParam.getRightQrX();
+            }
+            //标签头
+            builder.append("^FO").append(baseX).append(",").append(titleY).append("^A1N,").append(fontSize2)
+                    .append("^FD").append(title).append(productCodeVo.getBoxrange()).append("^FS");
+            //条形码
+            builder.append("^BY").append(barCodeWidth).append(",").append(barCodeWidthRatio).append(",")
+                    .append(barCodeHeight).append("^FO").append(baseX-20).append(",").append(barCodeY)
+                    .append("^BCN,,N,N^FD").append(code).append("^FS");
+            //二维码
+            builder.append("^BQN,").append(qrCodeModel).append(",").append(qrCodeMagnification).append("^FO")
+                    .append(qrX).append(",").append(qrY).append("^FDLA,").append(code).append("^FS");
+            //条形码文字
+            builder.append("^FO").append(baseX).append(",").append(barCodeTextY).append("^A1,")
+                    .append(fontSize).append("^FD").append(codePrefix).append("  ").append(codeSuffix).append("^FS");
+            builder.append("^FO").append(baseX).append(",").append(itemNameY).append("^A1N,").append(fontSize2)
+                    .append(",").append(fontSize2).append("^FD").append(productCodeVo.getItemname()).append("^FS");
+            builder.append("^FO").append(baseX).append(",").append(typeY).append("^A1N,").append(fontSize2).append(",")
+                    .append(fontSize2).append("^FD").append(productCodeVo.getType()).append("^FS");
+            builder.append("^FO").append(baseX).append(",").append(dateY).append("^A1N,").append(fontSize).append(",")
+                    .append(fontSize).append("^FD").append(date).append("^FS");
+            builder.append("^FO").append(baseX).append(",").append(totalY).append("^A1N,").append(fontSize).append(",")
+                    .append(fontSize).append("^FD").append("总装药量:").append(productCodeVo.getExplosivecontent()).append("^FS");
+            builder.append("^FO").append(qrX).append(",").append(totalY).append("^A1N,").append(fontSize).append(",")
+                    .append(fontSize).append("^FD").append("箱含量:").append(productCodeVo.getBoxnumber()).append("^FS");
+            String manufacturer = productCodeVo.getManufacturer();
+            if (StringUtils.isBlank(manufacturer)){
+                throw new BusinessException("错误:生产厂家为空");
+            }
+            builder.append("^FO").append(baseX).append(",").append(manufacturerY).append("^A1N,").append(fontSize2)
+                    .append(",").append(fontSize2).append("^FD").append(manufacturer.length()>16?manufacturer.substring(0,16):manufacturer).append("^FS");
+            if (manufacturer.length()>16){
+                builder.append("^FO").append(baseX).append(",").append(manufacturerY2).append("^A1N,").append(fontSize2)
+                        .append(",").append(fontSize2).append("^FD").append(manufacturer.substring(16)).append("^FS");
+            }
+            if (i % 2 != 0){
+                builder.append("^XZ");
+            }
+        }
+        if (!builder.toString().endsWith("^XZ")){
+            builder.append("^XZ");
+        }
+        return builder.toString();
+    }
+
+    /**
+    * @Description: 生成规律单号
+    * @date 2021/5/10 10:11
+    */
+    private String generateRegularCode() {
+        //查询当日合同总数
+        int num = contractOrderInfoMapper.selectCountToday();
+        String numStr = num + 1 + "";
+        //超过3位 显示原位数据 不需要补0
+        if (numStr.length() >= 3) {
+            return numStr;
+        }
+        //不超过则需要补0
+        //距离
+        int i = 3 - numStr.length();
+        return String.format("%03d", num + 1);
+
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/ContractUnitDetailServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/ContractUnitDetailServiceImpl.java
new file mode 100644
index 0000000..80152f3
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/ContractUnitDetailServiceImpl.java
@@ -0,0 +1,166 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.ContractUnitDetail;
+import com.gk.firework.Domain.Enterprise;
+import com.gk.firework.Domain.Enum.EnterpriseSafetySupervision;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Mapper.ContractUnitDetailMapper;
+import com.gk.firework.Service.ContractUnitDetailService;
+import com.gk.firework.Service.EnterpriseService;
+import com.gk.firework.Service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.List;
+
+@Service("contractUnitDetailService")
+public class ContractUnitDetailServiceImpl extends ServiceImpl<ContractUnitDetailMapper, ContractUnitDetail> implements ContractUnitDetailService {
+
+    @Autowired
+    ContractUnitDetailMapper contractUnitDetailMapper;
+    @Autowired
+    UserService userService;
+    @Autowired
+    EnterpriseService enterpriseService;
+
+    @Override
+    public IPage selectSupplyAndPurchaseUnitPage(Page<ContractUnitDetail> page, Map filter, UserInfo userInfo) {
+        Map<String, Object> params = new HashMap<>();
+        UserInfo user = userService.getById(userInfo.getId());
+
+        {
+            params.put("enterprisenumber", user.getCompanynumber());
+            params.put("province", user.getProvince());
+            params.put("city", user.getCity());
+            params.put("district", user.getArea());
+            params.put("street", user.getTown());
+            params.put("committee", user.getCommunity());
+        }
+
+        {
+            params.put("unitname", filter.get("unitname"));
+            params.put("filterProvince", filter.get("province"));
+            params.put("filterCity", filter.get("city"));
+            params.put("filterDistrict", filter.get("district"));
+            params.put("filterStreet", filter.get("street"));
+            params.put("filterCommittee", filter.get("committee"));
+        }
+        List<ContractUnitDetail> data = contractUnitDetailMapper.selectPages(page, params);
+        return page.setRecords(data);
+    }
+
+    /**
+    * @Description: 新增购货|购货
+    * @date 2021/5/26 9:58
+    */
+    @Override
+    public void addSupplyAndPurchaseUnit(ContractUnitDetail contractUnitDetail, UserInfo userInfo) {
+        UserInfo user = userService.getById(userInfo.getId());
+        if (user.getCompanynumber() == null) {
+            throw new BusinessException("没有新建权限");
+        }
+
+        Enterprise enterprise = enterpriseService.getById(user.getCompanyid());
+        if (EnterpriseSafetySupervision.PRODUCE.getMsg().equals(enterprise.getSafetysupervision())) {
+            //生产单位->供货单位
+            contractUnitDetail.setType(1);
+        }else{
+            //购买单位
+            contractUnitDetail.setType(0);
+        }
+        contractUnitDetail.setCreateby(userInfo.getId());
+        contractUnitDetail.setCreatebyname(userInfo.getUsername());
+        contractUnitDetail.setEnterprisenumber(user.getCompanynumber());
+        contractUnitDetail.setCreatetime(new Date());
+        contractUnitDetail.setValidflag(true);
+        this.save(contractUnitDetail);
+    }
+
+    /**
+     * @Description: 修改购货|购货
+     * @date 2021/5/26 9:58
+     */
+    @Override
+    public void modSupplyAndPurchaseUnit(ContractUnitDetail contractUnitDetail, UserInfo userInfo) {
+        contractUnitDetail.setUpdateby(userInfo.getId());
+        contractUnitDetail.setUpdatebyname(userInfo.getUsername());
+        contractUnitDetail.setUpdatetime(new Date());
+        this.updateById(contractUnitDetail);
+    }
+
+    /**
+     * @Description: 删除购货|购货
+     * @date 2021/5/26 9:58
+     */
+    @Override
+    public void delSupplyAndPurchaseUnit(Long id, UserInfo user) {
+        LambdaUpdateWrapper<ContractUnitDetail> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(ContractUnitDetail::getValidflag, false)
+                .eq(ContractUnitDetail::getId, id)
+                .eq(ContractUnitDetail::getValidflag, true);
+        this.update(updateWrapper);
+    }
+
+    @Override
+    public void checkAdd(ContractUnitDetail contractUnitDetail) {
+
+        if (StringUtils.isBlank(contractUnitDetail.getUnitname())) {
+            throw new BusinessException("单位名称不能为空");
+        }
+        if (StringUtils.isBlank(contractUnitDetail.getUnitaddress())) {
+            throw new BusinessException("单位地址不能为空");
+        }
+
+        if (StringUtils.isBlank(contractUnitDetail.getRepresentative())) {
+            throw new BusinessException("法定代表人不能为空");
+        }
+
+        if (StringUtils.isBlank(contractUnitDetail.getRepresentativephone())) {
+            throw new BusinessException("法定代表人联系电话不能为空");
+        }
+
+        if (StringUtils.isBlank(contractUnitDetail.getRepresentativeemail())) {
+            throw new BusinessException("法定代表人电子邮箱不能为空");
+
+        }
+        if (StringUtils.isBlank(contractUnitDetail.getBank())) {
+            throw new BusinessException("开户银行不能为空");
+        }
+
+        if (StringUtils.isBlank(contractUnitDetail.getLicensenumber())) {
+            throw new BusinessException("许可证编号不能为空");
+        }
+
+        if (StringUtils.isBlank(contractUnitDetail.getZipcode())) {
+            throw new BusinessException("邮政编码不能为空");
+        }
+        if (StringUtils.isBlank(contractUnitDetail.getAgent())) {
+            throw new BusinessException("委托代理人不能为空");
+        }
+
+        if (StringUtils.isBlank(contractUnitDetail.getAgentphone())) {
+            throw new BusinessException("委托代理人联系电话不能为空");
+        }
+        if (StringUtils.isBlank(contractUnitDetail.getAgentemail())) {
+            throw new BusinessException("委托代理人电子邮箱不能为空");
+        }
+
+        if (StringUtils.isBlank(contractUnitDetail.getAccount())) {
+            throw new BusinessException("账户不能为空");
+        }
+
+
+
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/ControlPrintParamServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/ControlPrintParamServiceImpl.java
new file mode 100644
index 0000000..5f44c72
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/ControlPrintParamServiceImpl.java
@@ -0,0 +1,155 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.ControlPrintParam;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Mapper.ControlPrintParamMapper;
+import com.gk.firework.Service.ControlPrintParamService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service
+public class ControlPrintParamServiceImpl extends ServiceImpl<ControlPrintParamMapper, ControlPrintParam> implements ControlPrintParamService {
+    @Autowired
+    ControlPrintParamMapper controlPrintParamMapper;
+
+    private static final String defaultSettingsOwner = "admin";
+    //内包装设置
+    private static final byte inner = 1;
+    //外包装设置
+    private static final byte outer = 2;
+
+    @Override
+    public ControlPrintParam getParamsByUser(UserInfo userInfo, byte type) {
+        LambdaQueryWrapper<ControlPrintParam> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ControlPrintParam::getOwner,userInfo.getUsername());
+        wrapper.eq(ControlPrintParam::getType,type);
+        ControlPrintParam controlPrintParam = baseMapper.selectOne(wrapper);
+        if (controlPrintParam == null){
+            wrapper = new LambdaQueryWrapper<>();
+            wrapper.eq(ControlPrintParam::getOwner,"admin");
+            wrapper.eq(ControlPrintParam::getType,type);
+        }
+        return baseMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public void selectDataGrid(PageInfo pageInfo) {
+        Page<ControlPrintParam> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+        List<OrderItem> orderItems = new ArrayList<>();
+        OrderItem orderItem = new OrderItem();
+        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+            orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
+            orderItem.setColumn(pageInfo.getSort());
+        }else {
+            orderItem.setAsc(false);
+            orderItem.setColumn("id");
+        }
+        orderItems.add(orderItem);
+        page.setOrders(orderItems);
+        List<ControlPrintParam> res = controlPrintParamMapper.selectDataGrid(page,pageInfo.getCondition());
+        //没有配置就返回默认配置
+        List<ControlPrintParam> settings = new ArrayList<>(res);
+        boolean flag = pageInfo.getCondition().get("enterprisename") == null &&
+                pageInfo.getCondition().get("type") == null;
+        //默认内包装
+        if (flag && settings.stream().filter(item -> item.getType() == inner).count() < 1) {
+            settings.addAll(this.selectDefaultSettings(inner,defaultSettingsOwner));
+            page.setTotal(page.getTotal() + 1);
+        }
+        //默认外包装
+        if (flag && settings.stream().filter(item -> item.getType() == outer).count() < 1) {
+            settings.addAll(this.selectDefaultSettings(outer,defaultSettingsOwner));
+            page.setTotal(page.getTotal() + 1);
+        }
+        pageInfo.setResult(settings);
+        pageInfo.setTotalCount(page.getTotal());
+    }
+
+    /**
+     * @Description: 获取内外包装默认设置,owner为admin
+     * @param type 类型 null 查询所有
+     * @date 2022/2/9 16:32
+     */
+    @Override
+    public List<ControlPrintParam> selectDefaultSettings(Byte type,String owner) {
+        return controlPrintParamMapper.selectList(
+                new LambdaQueryWrapper<ControlPrintParam>()
+                        .eq(ControlPrintParam::getOwner, owner)
+                        .eq(ControlPrintParam::getType,type));
+    }
+
+    /**
+    * @Description: 查找自己的type方案
+    * @date 2022/2/11 14:02
+    */
+    @Override
+    public ControlPrintParam getOwnSelectType(Byte type, UserInfo user) {
+        if (type == null) throw new BusinessException("参数不能为空");
+        List<ControlPrintParam> ownType = this.selectDefaultSettings(type, user.getUsername());
+        if (ownType.size() > 1)  throw new BusinessException("配置重复,请检查数据");
+        //没有配置返回默认配置
+        ControlPrintParam param = new ControlPrintParam();
+        param.setType(type);
+        if (ownType.size() == 0) {
+            List<ControlPrintParam> defaultSettings = this.selectDefaultSettings(type, defaultSettingsOwner);
+            if (defaultSettings.size() > 0) param = defaultSettings.get(0);
+        }
+        if (ownType.size() == 1) {
+            param = ownType.get(0);
+        }
+
+        return  param;
+
+    }
+
+
+    /**
+    * @Description: 新增配置方案
+    * @date 2022/2/11 16:17
+    */
+    @Override
+    public void addOrUpdateControlParams(ControlPrintParam controlPrintParam,UserInfo userInfo) {
+
+        Long id = controlPrintParam.getId();
+        if (id == null) {
+            controlPrintParam.setOwner(userInfo.getUsername());
+            this.save(controlPrintParam);
+        } else{
+            if (userInfo.getUsername().equals(controlPrintParam.getOwner())) {
+                this.updateById(controlPrintParam);
+            }else{
+                if (userInfo.getType() != 1)
+                    controlPrintParam.setOwner(userInfo.getUsername());
+                this.save(controlPrintParam);
+            }
+        }
+
+
+    }
+
+    /**
+    * @Description: 更新配置方案
+    * @date 2022/2/11 17:30
+    */
+    @Override
+    public void updateControlParams(ControlPrintParam controlPrintParam, UserInfo user) {
+
+        Long id = controlPrintParam.getId();
+        if (id == null) throw new BusinessException("参数不能为空");
+        controlPrintParam.setOwner(null);
+        controlPrintParam.setType(null);
+        this.updateById(controlPrintParam);
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/CustomerServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/CustomerServiceImpl.java
new file mode 100644
index 0000000..f25eeb7
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/CustomerServiceImpl.java
@@ -0,0 +1,161 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.CustomerInfo;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.Utils.Properties;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Utils.UploadUtil;
+import com.gk.firework.Mapper.CustomerInfoMapper;
+import com.gk.firework.Service.CustomerService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * @author : jingjy
+ * @date : 2021/3/31 14:19
+ */
+@Service("CustomerService")
+public class CustomerServiceImpl extends ServiceImpl<CustomerInfoMapper, CustomerInfo> implements CustomerService {
+    @Autowired
+    private CustomerInfoMapper customerInfoMapper;
+    @Override
+    public CustomerInfo createOrUpdate(JSONObject customer, Integer num, Date salesTime) throws ParseException {
+        //TODO:新增或修改顾客信息
+        String idCardNum = customer.getString("idCardNumber");
+        String workerName = customer.getString("workerName");
+        String nation = customer.getString("nation");
+//        String gender = customer.getString("sex");
+        String gender = userType(idCardNum);
+        byte byteGender = 0;
+        if (CustomerInfo.GENDER_MALE.equals(gender)){
+            byteGender = 1;
+        }else if (CustomerInfo.GENDER_FEMALE.equals(gender)){
+            byteGender = 2;
+        }
+
+        String bornDay = customer.getString("csrq");
+        DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
+        Date date = new Date();
+        Date born = dateFormat.parse(bornDay);
+        String address = customer.getString("certAddress");
+        CustomerInfo customerInfo = customerInfoMapper.selectCustomerByIdCardNum(idCardNum);
+        if (customerInfo == null){
+            customerInfo = new CustomerInfo(workerName,byteGender,idCardNum,nation,born,address);
+            customerInfo.setFrequency(1);
+            customerInfo.setCreateddate(date);
+            customerInfo.setLasttime(salesTime);
+            customerInfo.setLastnum(num);
+            customerInfo.setNum(num);
+            customerInfoMapper.insert(customerInfo);
+        }else {
+            if (customerInfo.getLasttime().compareTo(salesTime) < 0){
+                customerInfo.setLasttime(salesTime);
+                customerInfo.setLastnum(num);
+            }
+            customerInfo.setFrequency(customerInfo.getFrequency()+1);
+            customerInfo.setNum(customerInfo.getNum() + num);
+            customerInfo.setModifieddate(date);
+            customerInfoMapper.updateById(customerInfo);
+        }
+        return customerInfo;
+
+    }
+
+    //根据身份证号分辨男女
+    public static String userType(String idNumber) {
+        String userType = "";
+        int gender = 0;
+        idNumber = idNumber.replaceAll("[\r\n]","").trim();
+        if(idNumber.length() == 18){
+            //如果身份证号18位,取身份证号倒数第二位
+            char c = idNumber.charAt(idNumber.length() - 2);
+            gender = Integer.parseInt(String.valueOf(c));
+        }else if (idNumber.length() == 15){
+            //如果身份证号15位,取身份证号最后一位
+            char c = idNumber.charAt(idNumber.length() - 1);
+            gender = Integer.parseInt(String.valueOf(c));
+        }
+        if(gender % 2 == 1){
+            userType =  "男";
+        }else{
+            userType =  "女";
+        }
+        return userType;
+    }
+
+    @Override
+    public CustomerInfo getCustomerByIdCardNum(String idCardNum) {
+        return customerInfoMapper.selectCustomerByIdCardNum(idCardNum);
+    }
+
+    @Override
+    public CustomerInfo getCustomerBySaleOrder(String orderCode) {
+        return customerInfoMapper.getCustomerBySaleOrder(orderCode);
+    }
+
+    @Override
+    public void uploadPhoto(String idCard, MultipartFile file) {
+
+        if (StringUtils.isBlank(idCard))
+            throw new BusinessException("身份证参数传递错误,请联系管理员");
+        if (file == null)
+            throw new BusinessException("请上传文件");
+        CustomerInfo customer = getCustomerByIdCardNum(idCard);
+        if (customer == null)
+            throw new BusinessException("身份证信息不存在,请联系管理员");
+
+        try {
+            String name = UploadUtil.uploadFile(file, Properties.customerPath);
+            customer.setPath(Properties.customer + name);
+        } catch (Exception e) {
+            throw new BusinessException("上传文件失败");
+        }
+        this.updateById(customer);
+
+    }
+
+    @Override
+    public void createOrUpdateCard(String idCardNum, Integer num, Date createdat) throws ParseException {
+        //TODO:新增或修改顾客信息
+        String gender = userType(idCardNum);
+        byte byteGender = 0;
+        if (CustomerInfo.GENDER_MALE.equals(gender)){
+            byteGender = 1;
+        }else if (CustomerInfo.GENDER_FEMALE.equals(gender)){
+            byteGender = 2;
+        }
+
+        String bornDay = idCardNum.substring(6,14);
+        DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
+        Date date = new Date();
+        Date born = dateFormat.parse(bornDay);
+
+        CustomerInfo customerInfo = customerInfoMapper.selectCustomerByIdCardNum(idCardNum);
+        if (customerInfo == null){
+            customerInfo = new CustomerInfo("",byteGender,idCardNum,"",born,"");
+            customerInfo.setFrequency(1);
+            customerInfo.setCreateddate(date);
+            customerInfo.setLasttime(createdat);
+            customerInfo.setLastnum(num);
+            customerInfo.setNum(num);
+            customerInfoMapper.insert(customerInfo);
+        }else {
+            if (customerInfo.getLasttime().compareTo(createdat) < 0){
+                customerInfo.setLasttime(createdat);
+                customerInfo.setLastnum(num);
+            }
+            customerInfo.setFrequency(customerInfo.getFrequency()+1);
+            customerInfo.setNum(customerInfo.getNum() + num);
+            customerInfo.setModifieddate(date);
+            customerInfoMapper.updateById(customerInfo);
+        }
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/DeliveryDetailServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/DeliveryDetailServiceImpl.java
new file mode 100644
index 0000000..3bed010
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/DeliveryDetailServiceImpl.java
@@ -0,0 +1,173 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.DeliveryDetailInfo;
+import com.gk.firework.Domain.DeliveryOrderInfo;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.ProductInfo;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Vo.DirectionDetail;
+import com.gk.firework.Domain.Vo.FireworkDeal;
+import com.gk.firework.Mapper.DeliveryDetailInfoMapper;
+import com.gk.firework.Mapper.ProductInfoMapper;
+import com.gk.firework.Service.DeliveryDetailService;
+import com.gk.firework.Service.ProductService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.*;
+
+/**
+ * @author : jingjy
+ * @date : 2021/4/1 10:25
+ */
+@Service("DeliveryDetailService")
+public class DeliveryDetailServiceImpl extends ServiceImpl<DeliveryDetailInfoMapper, DeliveryDetailInfo> implements DeliveryDetailService {
+    @Autowired
+    private ProductInfoMapper productInfoMapper;
+    @Autowired
+    private DeliveryDetailInfoMapper deliveryDetailInfoMapper;
+    @Autowired
+    private ProductService productService;
+
+    @Override
+    public List<DeliveryDetailInfo> generateDeliveryDetail(DeliveryOrderInfo deliveryOrderInfo, UserInfo userInfo, List<String> directionCodes) {
+        List<DeliveryDetailInfo> deliveryDetailInfos = new ArrayList<>();
+        int boxNum = 0;
+        for (String dire : directionCodes){
+            DirectionDetail detail = FireworkDeal.dealDirectionCode(dire);
+            ProductInfo productInfo= productInfoMapper.selectProductByDirectionCode(detail.getItemCode());
+            int num = 1;
+            if (productInfo != null){
+                if (detail.getLength() == FireworkDeal.DIRECTION_OUTSIDE){
+                    num = Integer.parseInt(detail.getBoxNo());
+                }
+                DeliveryDetailInfo deliveryDetailInfo = new DeliveryDetailInfo();
+                deliveryDetailInfo.setCreateby(userInfo.getUsername());
+                deliveryDetailInfo.setCreateat(new Date());
+                deliveryDetailInfo.setDeliverycode(deliveryOrderInfo.getOrdercode());
+                deliveryDetailInfo.setDirectioncode(dire);
+                deliveryDetailInfo.setItemname(productInfo.getName());
+                deliveryDetailInfo.setItemcode(productInfo.getDirectionCode());
+                deliveryDetailInfo.setNum(num);
+                deliveryDetailInfos.add(deliveryDetailInfo);
+                boxNum += num;
+            }
+        }
+        deliveryOrderInfo.setBoxnum(boxNum);
+        return deliveryDetailInfos;
+    }
+
+    /**
+    * @Description: 根据{出库单号}查询出库明细
+    * @date 2021/4/15 14:36
+    */
+    @Override
+    public Page selectDetailPage(Page<Map> page, Map filter) {
+        String code = (String) filter.get("code");
+        if (StringUtils.isBlank(code)) {
+            throw new BusinessException("出库单号不能为空");
+        }
+
+        Map<String, Object> params = new HashMap<>();
+        params.put("code", code);
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        List<Map> list = deliveryDetailInfoMapper.selectDetailPage(page,params);
+        return page.setRecords(list);
+    }
+
+    /**
+     * @Description: 根据{出库单code}查询出库明细并导出
+     * @date 2021/4/15 11:09
+     */
+    @Override
+    public List<Map> selectDetailExport(String code) {
+        return deliveryDetailInfoMapper.selectDetailExport(code);
+    }
+
+    @Override
+    public List<DeliveryDetailInfo> getDetailByCode(String ordercode) {
+        LambdaQueryWrapper<DeliveryDetailInfo> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(DeliveryDetailInfo::getDeliverycode,ordercode);
+        return deliveryDetailInfoMapper.selectList(wrapper);
+    }
+
+    @Override
+    public BigDecimal selectEnterpriseDeliveryNumber(String enterprisenumber, Object starttime, Object endtime) {
+        return deliveryDetailInfoMapper.selectEnterpriseDeliveryNumber(enterprisenumber,starttime,endtime);
+    }
+
+    @Override
+    public IPage selectEnterpriseTypeDelivery(Page<Map> page, Map<String, Object> filter, UserInfo user) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        params.put("province", filter.get("province"));
+        params.put("city", filter.get("city"));
+        params.put("district", filter.get("district"));
+        List<String> list = productService.selectTypes();
+        List<Map> res = deliveryDetailInfoMapper.selectEnterpriseTypeDelivery(page, params, list);
+        Map totalRow = deliveryDetailInfoMapper.selectAllType(params, list);
+        ArrayList<Map> result = new ArrayList<>(res);
+        result.add(totalRow);
+        return page.setRecords(result);
+    }
+
+    @Override
+    public List<Map> selectExportEnterpriseTypeDelivery(Map<String, Object> filter, UserInfo user) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        params.put("province", filter.get("province"));
+        params.put("city", filter.get("city"));
+        params.put("district", filter.get("district"));
+        List<String> list = productService.selectTypes();
+        List<Map> res = deliveryDetailInfoMapper.selectEnterpriseTypeDelivery(params, list);
+        Map totalRow = deliveryDetailInfoMapper.selectAllType(params, list);
+        ArrayList<Map> result = new ArrayList<>(res);
+        result.add(totalRow);
+        return result;
+    }
+
+    @Override
+    public IPage selectCityTypeDelivery(Page<Map> page, Map<String, Object> filter, UserInfo user) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("province", "新疆维吾尔自治区");
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        List<String> list = productService.selectTypes();
+        List<Map> res = deliveryDetailInfoMapper.selectCityTypeDelivery(page,params, list);
+        Map totalRow = deliveryDetailInfoMapper.selectAllType(params, list);
+        ArrayList<Map> result = new ArrayList<>(res);
+        result.add(totalRow);
+        return page.setRecords(result);
+    }
+
+    @Override
+    public List<Map> selectExportCityTypeDelivery(Map<String, Object> filter, UserInfo user) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("province", "新疆维吾尔自治区");
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        List<String> list = productService.selectTypes();
+        List<Map> res = deliveryDetailInfoMapper.selectCityTypeDelivery(params, list);
+        Map totalRow = deliveryDetailInfoMapper.selectAllType(params, list);
+        ArrayList<Map> result = new ArrayList<>(res);
+        result.add(totalRow);
+        return result;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/DeliveryOrderServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/DeliveryOrderServiceImpl.java
new file mode 100644
index 0000000..df9c53d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/DeliveryOrderServiceImpl.java
@@ -0,0 +1,177 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.DeliveryOrderInfo;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Vo.DeliveryOrderInfoVo;
+import com.gk.firework.Domain.Vo.FireworkDeal;
+import com.gk.firework.Domain.Vo.ProductVo;
+import com.gk.firework.Mapper.DeliveryOrderInfoMapper;
+import com.gk.firework.Service.DeliveryOrderService;
+import com.gk.firework.Service.SaleOrderService;
+import com.gk.firework.Service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.List;
+
+/**
+ * @author : jingjy
+ * @date : 2021/4/1 10:22
+ */
+@Service("DeliveryOrderService")
+public class DeliveryOrderServiceImpl extends ServiceImpl<DeliveryOrderInfoMapper, DeliveryOrderInfo> implements DeliveryOrderService {
+
+    @Autowired
+    private DeliveryOrderInfoMapper deliveryOrderInfoMapper;
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private SaleOrderService orderService;
+
+    @Override
+    public DeliveryOrderInfo generateDeliveryOrder(String type, Date datetime, UserInfo userInfo, String cert, String auth) {
+        DeliveryOrderInfo deliveryOrderInfo = new DeliveryOrderInfo();
+        deliveryOrderInfo.setOrdercode(orderService.generateOrderCode(FireworkDeal.MODULE_DELIVERY,type,new Date(),userInfo.getId()));
+        deliveryOrderInfo.setCreateat(new Date());
+        deliveryOrderInfo.setCreateby(userInfo.getId().toString());
+        deliveryOrderInfo.setOperatat(datetime);
+        deliveryOrderInfo.setOperator(userInfo.getUsername());
+        deliveryOrderInfo.setShop(userInfo.getCompany());
+        deliveryOrderInfo.setType(Byte.parseByte(type));
+        deliveryOrderInfo.setCompanynumber(userInfo.getCompanynumber());
+        if (StringUtils.isNotBlank(cert)){
+            deliveryOrderInfo.setTransportcert(cert);
+        }
+        return deliveryOrderInfo;
+    }
+
+    @Override
+    public BigDecimal getDeliveryNum(Map<String, Object> condition) {
+        return deliveryOrderInfoMapper.getDeliveryNum(condition);
+    }
+
+    @Override
+    public BigDecimal getReturnDeliveryNum(Map<String, Object> condition) {
+        return deliveryOrderInfoMapper.getReturnDeliveryNum(condition);
+    }
+
+    @Override
+    public boolean isOrderExist(String datetime, UserInfo userInfo) {
+        DeliveryOrderInfo deliveryOrderInfo = deliveryOrderInfoMapper.selectDeliveryOrderByTimeAndUser(datetime,userInfo.getUsername());
+        return deliveryOrderInfo != null;
+    }
+
+    /**
+    * @Description: 出库导出
+    * @date 2021/4/19 17:27
+    */
+    @Override
+    public List<DeliveryOrderInfo> selectExportList(Map filter, UserInfo user) {
+        UserInfo userInfo = userService.getById(user.getId());
+        Map<String, Object> params = new HashMap<>();
+
+        //可视权限
+        {
+            params.put("enterprisenumber", userInfo.getCompanynumber());
+            params.put("province", userInfo.getProvince());
+            params.put("city", userInfo.getCity());
+            params.put("district", userInfo.getArea());
+            params.put("street", userInfo.getTown());
+            params.put("committee", userInfo.getCommunity());
+        }
+
+        //基本查询
+        {
+            params.put("filterProvince", filter.get("province"));
+            params.put("filterCity", filter.get("city"));
+            params.put("filterDistrict", filter.get("district"));
+            params.put("filterStreet", filter.get("street"));
+            params.put("filterCommittee", filter.get("committee"));
+            params.put("filterType", filter.get("type"));
+        }
+        return deliveryOrderInfoMapper.selectPages(params);
+    }
+
+    @Override
+    public List<DeliveryOrderInfo> getDeliveryOrderByCert(String cert) {
+        LambdaQueryWrapper<DeliveryOrderInfo>wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(DeliveryOrderInfo::getTransportcert,cert);
+        return deliveryOrderInfoMapper.selectList(wrapper);
+    }
+
+    @Override
+    public List<ProductVo> getProductVosByCert(String cert) {
+        return deliveryOrderInfoMapper.getProductVosByCert(cert);
+    }
+
+    @Override
+    public IPage selectStockPage(Page<DeliveryOrderInfoVo> page, Map<String, Object> filter, UserInfo user) {
+
+        //基本查询
+        Map<String, Object> params = new HashMap<>();
+        {
+            params.put("filterProvince", filter.get("province"));
+            params.put("filterCity", filter.get("city"));
+            params.put("filterDistrict", filter.get("district"));
+            params.put("filterStreet", filter.get("street"));
+            params.put("filterCommittee", filter.get("committee"));
+            params.put("type", filter.get("type"));
+            params.put("code", filter.get("code"));
+            params.put("transportcert", filter.get("transportcert"));
+            params.put("starttime", filter.get("starttime"));
+            params.put("endtime", filter.get("endtime"));
+            params.put("enterprisename", filter.get("enterprisename"));
+            params.put("safetysupervision", filter.get("safetysupervision"));
+        }
+        List<DeliveryOrderInfoVo> list =  deliveryOrderInfoMapper.selectPages(page, params);
+        return page.setRecords(list);
+    }
+
+    /**
+    * @Description: 出库查询
+    * @date 2021/4/15 12:25
+    */
+    @Override
+    public Page selectPage(Page<DeliveryOrderInfoVo> page, Map filter, UserInfo user) {
+
+        UserInfo userInfo = userService.getById(user.getId());
+        Map<String, Object> params = new HashMap<>();
+
+        //可视权限
+        {
+            params.put("enterprisenumber", userInfo.getCompanynumber());
+            params.put("province", userInfo.getProvince());
+            params.put("city", userInfo.getCity());
+            params.put("district", userInfo.getArea());
+            params.put("street", userInfo.getTown());
+            params.put("committee", userInfo.getCommunity());
+        }
+
+        //基本查询
+        {
+            params.put("filterProvince", filter.get("province"));
+            params.put("filterCity", filter.get("city"));
+            params.put("filterDistrict", filter.get("district"));
+            params.put("filterStreet", filter.get("street"));
+            params.put("filterCommittee", filter.get("committee"));
+            params.put("type", filter.get("type"));
+            params.put("code", filter.get("code"));
+            params.put("transportcert", filter.get("transportcert"));
+            params.put("starttime", filter.get("starttime"));
+            params.put("endtime", filter.get("endtime"));
+            params.put("enterprisename", filter.get("enterprisename"));
+            params.put("safetysupervision", filter.get("safetysupervision"));
+        }
+        List<DeliveryOrderInfoVo> list =  deliveryOrderInfoMapper.selectPages(page, params);
+        return page.setRecords(list);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/DictionaryItemServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/DictionaryItemServiceImpl.java
new file mode 100644
index 0000000..73b9093
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/DictionaryItemServiceImpl.java
@@ -0,0 +1,64 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.DictionaryItemInfo;
+import com.gk.firework.Domain.DictionaryTypeInfo;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Mapper.DictionaryItemInfoMapper;
+import com.gk.firework.Service.DictionaryItemService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service("DictionaryItemService")
+public class DictionaryItemServiceImpl extends ServiceImpl<DictionaryItemInfoMapper, DictionaryItemInfo> implements DictionaryItemService {
+
+    @Autowired
+    DictionaryItemInfoMapper dictionaryItemInfoMapper;
+
+    @Override
+    public void selectDataGrid(PageInfo pageInfo) {
+        Page<DictionaryItemInfo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+        List<OrderItem> orderItems = new ArrayList<>();
+        OrderItem orderItem = new OrderItem();
+        orderItem.setAsc(true);
+        orderItem.setColumn("sort");
+        orderItems.add(orderItem);
+        page.setOrders(orderItems);
+        List<DictionaryItemInfo> list = dictionaryItemInfoMapper.selectDataGrid(page,pageInfo.getCondition());
+
+        pageInfo.setResult(list);
+        pageInfo.setTotalCount(page.getTotal());
+    }
+
+    @Override
+    public DictionaryItemInfo selctByText(String text) {
+        DictionaryItemInfo dictionaryItemInfo = new DictionaryItemInfo();
+        dictionaryItemInfo.setText(text);
+        QueryWrapper<DictionaryItemInfo> queryWrapper = new QueryWrapper<>(dictionaryItemInfo);
+        return dictionaryItemInfoMapper.selectOne(queryWrapper);
+    }
+
+    @Override
+    public DictionaryItemInfo selctByValue(String value) {
+        DictionaryItemInfo dictionaryItemInfo = new DictionaryItemInfo();
+        dictionaryItemInfo.setValue(value);
+        QueryWrapper<DictionaryItemInfo> queryWrapper = new QueryWrapper<>(dictionaryItemInfo);
+        return dictionaryItemInfoMapper.selectOne(queryWrapper);
+    }
+
+    @Override
+    public List<DictionaryTypeInfo> selectExistInfo(Long id, String value, String text) {
+        return dictionaryItemInfoMapper.selectExistInfo(id,value,text);
+    }
+
+    @Override
+    public List<DictionaryItemInfo> selectByType(String dictionaryType) {
+        return dictionaryItemInfoMapper.selectByType(dictionaryType);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/DictionaryTypeServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/DictionaryTypeServiceImpl.java
new file mode 100644
index 0000000..a23b9bf
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/DictionaryTypeServiceImpl.java
@@ -0,0 +1,61 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.DictionaryTypeInfo;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Mapper.DictionaryTypeInfoMapper;
+import com.gk.firework.Service.DictionaryTypeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service("DictionaryTypeService")
+public class DictionaryTypeServiceImpl extends ServiceImpl<DictionaryTypeInfoMapper, DictionaryTypeInfo>  implements DictionaryTypeService {
+
+    @Autowired
+    DictionaryTypeInfoMapper dictionaryTypeInfoMapper;
+
+    @Override
+    public void selectDataGrid(PageInfo pageInfo) {
+        Page<DictionaryTypeInfo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+        List<OrderItem> orderItems = new ArrayList<>();
+        OrderItem orderItem = new OrderItem();
+        orderItem.setAsc(false);
+        orderItem.setColumn("createddate");
+        orderItems.add(orderItem);
+        page.setOrders(orderItems);
+        List<DictionaryTypeInfo> list = dictionaryTypeInfoMapper.selectDataGrid(page,pageInfo.getCondition());
+
+        pageInfo.setResult(list);
+        pageInfo.setTotalCount(page.getTotal());
+    }
+
+    @Override
+    public DictionaryTypeInfo selctByCode(String code) {
+        DictionaryTypeInfo dictionaryTypeInfo = new DictionaryTypeInfo();
+        dictionaryTypeInfo.setCode(code);
+        dictionaryTypeInfo.setStatus((byte)1);
+        QueryWrapper<DictionaryTypeInfo> queryWrapper = new QueryWrapper<>(dictionaryTypeInfo);
+        return dictionaryTypeInfoMapper.selectOne(queryWrapper);
+    }
+
+    @Override
+    public DictionaryTypeInfo selctByText(String text) {
+        DictionaryTypeInfo dictionaryTypeInfo = new DictionaryTypeInfo();
+        dictionaryTypeInfo.setText(text);
+        dictionaryTypeInfo.setStatus((byte)1);
+        QueryWrapper<DictionaryTypeInfo> queryWrapper = new QueryWrapper<>(dictionaryTypeInfo);
+        return dictionaryTypeInfoMapper.selectOne(queryWrapper);
+    }
+
+    @Override
+    public List<DictionaryTypeInfo> selectExistInfo(Long id, String code, String text) {
+        return dictionaryTypeInfoMapper.selectExistInfo(id, code, text);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/DistrictServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/DistrictServiceImpl.java
new file mode 100644
index 0000000..7c31a56
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/DistrictServiceImpl.java
@@ -0,0 +1,66 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.DistrictInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Mapper.DistrictInfoMapper;
+import com.gk.firework.Service.DistrictService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service("DistrictService")
+public class DistrictServiceImpl extends ServiceImpl<DistrictInfoMapper, DistrictInfo> implements DistrictService {
+
+    @Autowired
+    DistrictInfoMapper districtInfoMapper;
+
+
+    @Override
+    public List<DistrictInfo> selectDistrictInfo(String type, String parentcode) {
+        return districtInfoMapper.selectDistrictInfo(type, parentcode);
+    }
+
+    @Override
+    public DistrictInfo selectInfoByName(String name, Byte type) {
+        DistrictInfo districtInfo = new DistrictInfo();
+        districtInfo.setName(name);
+        districtInfo.setType(type);
+        QueryWrapper<DistrictInfo> wrapper = new QueryWrapper<> (districtInfo);
+        return districtInfoMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public DistrictInfo selectInfoByCode(String code, Byte type) {
+        DistrictInfo districtInfo = new DistrictInfo();
+        districtInfo.setCode(code);
+        districtInfo.setType(type);
+        QueryWrapper<DistrictInfo> wrapper = new QueryWrapper<> (districtInfo);
+        return districtInfoMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<DistrictInfo> selectDistrictByName(String type, String parentname, String parenttype) {
+        return districtInfoMapper.selectDistrictByName(type, parentname, parenttype);
+    }
+
+    @Override
+    public List<DistrictInfo> selectInfoByParentCode(String s) {
+        LambdaQueryWrapper<DistrictInfo> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(DistrictInfo::getParentcode,s);
+        return districtInfoMapper.selectList(wrapper);
+    }
+
+    @Override
+    public List<DistrictInfo> selectInfoByParentCodeAndCity(String s, Object city) {
+        LambdaQueryWrapper<DistrictInfo> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(DistrictInfo::getParentcode,s);
+        if (StringUtils.isNotBlank(city.toString())){
+            wrapper.eq(DistrictInfo::getName,city);
+        }
+        return districtInfoMapper.selectList(wrapper);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseAnnualServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseAnnualServiceImpl.java
new file mode 100644
index 0000000..6593dc8
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseAnnualServiceImpl.java
@@ -0,0 +1,95 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.EnterpriseAnnual;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Mapper.EnterpriseAnnualMapper;
+import com.gk.firework.Service.EnterpriseAnnualService;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+@Service("enterpriseAnnualService")
+public class EnterpriseAnnualServiceImpl extends ServiceImpl<EnterpriseAnnualMapper, EnterpriseAnnual> implements EnterpriseAnnualService {
+
+    /**
+    * @Description: 分页查询年度库存
+    * @date 2021/3/26 16:46
+    */
+    @Override
+    public IPage selectPage(Page<EnterpriseAnnual> page, Long id) {
+        LambdaQueryWrapper<EnterpriseAnnual> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(EnterpriseAnnual::getEnterpriseid,id)
+                .eq(EnterpriseAnnual::getValidflag,true);
+        return this.page(page,queryWrapper);
+    }
+
+    /**
+    * @Description: 新增年度库存
+    * @date 2021/3/26 16:45
+    */
+    @Override
+    public void addEnterpriseAnnual(EnterpriseAnnual enterpriseAnnual, UserInfo user) {
+        enterpriseAnnual.setCreateby(user.getId());
+        enterpriseAnnual.setCreatebyname(user.getUsername());
+        enterpriseAnnual.setCreatetime(new Date());
+        enterpriseAnnual.setValidflag(true);
+        this.save(enterpriseAnnual);
+    }
+
+    /**
+    * @Description: 修改年度库存
+    * @date 2021/3/26 16:48
+    */
+    @Override
+    public void modEnterpriseAnnual(EnterpriseAnnual enterpriseAnnual, UserInfo user) {
+        enterpriseAnnual.setUpdateby(user.getId());
+        enterpriseAnnual.setUpdatebyname(user.getUsername());
+        enterpriseAnnual.setCreatetime(new Date());
+        this.updateById(enterpriseAnnual);
+    }
+
+    /**
+     * @Description: 删除年度库存
+     * @date 2021/3/26 16:46
+     */
+    @Override
+    public void delEnterpriseAnnual(Long id, UserInfo user) {
+        EnterpriseAnnual annual = new EnterpriseAnnual();
+        annual.setId(id);
+        annual.setUpdatebyname(user.getUsername());
+        annual.setUpdateby(user.getId());
+        annual.setUpdatetime(new Date());
+        annual.setValidflag(false);
+        this.updateById(annual);
+    }
+
+
+    /**
+    * @Description: 年度库存校验  新增|修改
+    * @date 2021/4/6 15:15
+    */
+    @Override
+    public void checkEnterpriseAnnual(EnterpriseAnnual enterpriseAnnual) {
+
+        if (StringUtils.isBlank(enterpriseAnnual.getYear())) {
+            throw new BusinessException("年度不能为空");
+        }
+
+        if (enterpriseAnnual.getAmount() == null) {
+            throw new BusinessException("数量不能为空");
+        }
+
+        if (enterpriseAnnual.getType() == null) {
+            throw new BusinessException("类型不能为空");
+        }
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseApplyServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseApplyServiceImpl.java
new file mode 100644
index 0000000..1b1c414
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseApplyServiceImpl.java
@@ -0,0 +1,95 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.Enterprise;
+import com.gk.firework.Domain.EnterpriseApply;
+import com.gk.firework.Domain.Enum.ApplyStatus;
+import com.gk.firework.Domain.Enum.CommitStatus;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Vo.ApprovalVo;
+import com.gk.firework.Mapper.EnterpriseApplyMapper;
+import com.gk.firework.Service.EnterpriseApplyService;
+import com.gk.firework.Service.EnterpriseService;
+import com.gk.firework.Service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.lang.reflect.Field;
+import java.util.*;
+
+@Service("enterpriseApplyService")
+public class EnterpriseApplyServiceImpl  extends ServiceImpl<EnterpriseApplyMapper, EnterpriseApply> implements EnterpriseApplyService {
+
+    @Autowired
+    private EnterpriseApplyMapper enterpriseApplyMapper;
+    @Autowired
+    private EnterpriseService enterpriseService;
+    @Autowired
+    private UserService userService;
+
+    @Override
+    public IPage<EnterpriseApply> selectEnterpriseApply(Page<EnterpriseApply> page, EnterpriseApply enterpriseApplyFilter,UserInfo user) {
+        UserInfo userInfo = userService.getById(user.getId());
+        LambdaQueryWrapper<EnterpriseApply> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.select(EnterpriseApply::getId,
+                EnterpriseApply::getApplytime,
+                EnterpriseApply::getApplypersonname,
+                EnterpriseApply::getProcesstime,
+                EnterpriseApply::getProcesspersonname,
+                EnterpriseApply::getApplystatus
+               )
+                .orderByDesc(EnterpriseApply::getApplytime)
+                .eq(EnterpriseApply::getValidflag, true);
+
+        //企业用户
+        if (userInfo.getCompanyid() != null) {
+            queryWrapper.eq(EnterpriseApply::getId, userInfo.getCompanyid());
+        }
+        //监管部门 根据 地区看所有
+        if(userInfo.getType()==3){
+            if (StringUtils.isNotBlank(userInfo.getProvince()))
+                queryWrapper.eq(EnterpriseApply::getProvince, userInfo.getProvince());
+            if (StringUtils.isNotBlank(userInfo.getCity()))
+                queryWrapper.eq(EnterpriseApply::getCity, userInfo.getCity());
+            if (StringUtils.isNotBlank(userInfo.getArea()))
+                queryWrapper.eq(EnterpriseApply::getDistrict, userInfo.getArea());
+            if (StringUtils.isNotBlank(userInfo.getTown()))
+                queryWrapper.eq(EnterpriseApply::getStreet, userInfo.getTown());
+            if (StringUtils.isNotBlank(userInfo.getCommunity()))
+                queryWrapper.eq(EnterpriseApply::getCommittee, userInfo.getCommunity());
+        }
+        return this.page(page, queryWrapper);
+    }
+
+    @Override
+    public List getApplyList(EnterpriseApply enterpriseApplyFilter) {
+        LambdaQueryWrapper<EnterpriseApply> queryWrapper = new LambdaQueryWrapper<>();
+        return enterpriseApplyMapper.selectList(queryWrapper);
+    }
+
+
+    /**
+    * @Description:
+    * @param enterprise 需要更新字段的对象 updateObj 更新字段
+    */
+    private void updateSetFields(Enterprise enterprise, JSONObject updateObj) throws NoSuchFieldException, IllegalAccessException {
+        Map<String, Object> innerMap = updateObj.getInnerMap();
+        assert innerMap.size() > 0;
+        for (Map.Entry<String, Object> entry : innerMap.entrySet()) {
+            String field = entry.getKey();
+            Field declaredField = enterprise.getClass().getDeclaredField(field);
+            declaredField.setAccessible(true);
+            declaredField.set(enterprise, entry.getValue());
+
+        }
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseDocumentServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseDocumentServiceImpl.java
new file mode 100644
index 0000000..bc806b6
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseDocumentServiceImpl.java
@@ -0,0 +1,194 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.EnterpriseDocument;
+import com.gk.firework.Domain.EnterpriseResource;
+import com.gk.firework.Domain.Enum.DocumentType;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.Constants;
+import com.gk.firework.Domain.Utils.Properties;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Utils.UploadUtil;
+import com.gk.firework.Domain.Vo.EnterpriseDocumentVo;
+import com.gk.firework.Mapper.EnterpriseDocumentMapper;
+import com.gk.firework.Mapper.EnterpriseResourceMapper;
+import com.gk.firework.Service.EnterpriseDocumentService;
+import com.gk.firework.Service.EnterpriseResourceService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.*;
+
+@Service("enterpriseDocumentService")
+public class EnterpriseDocumentServiceImpl extends ServiceImpl<EnterpriseDocumentMapper, EnterpriseDocument> implements EnterpriseDocumentService {
+
+    @Autowired
+    private EnterpriseDocumentMapper enterpriseDocumentMapper;
+    @Autowired
+    private EnterpriseResourceService enterpriseResourceService;
+
+
+    /**
+    * @Description: 分页查询
+    * @date 2021/3/26 19:41
+    */
+    @Override
+    public IPage selectPage(Page<EnterpriseDocument> page, Long id, DocumentType type) {
+        Map<String,Object> params = new HashMap<>();
+        params.put("id", id);
+        params.put("type", type);
+        params.put("tabletype", Constants.DOCUMENT);
+        List<EnterpriseDocument> list = enterpriseDocumentMapper.selectPages(page, params);
+        return  page.setRecords(list);
+    }
+
+    /**
+     * @Description: 新增
+     * @date 2021/3/26 19:41
+     */
+    @Override
+    @Transactional
+    public void addDocument(EnterpriseDocumentVo enterpriseDocumentVo, UserInfo user) throws Exception {
+
+        //新增信息
+        EnterpriseDocument document = new EnterpriseDocument();
+        document.setName(enterpriseDocumentVo.getName());
+        document.setSettime(enterpriseDocumentVo.getSettime());
+        document.setCreateby(user.getId());
+        document.setCreatebyname(user.getUsername());
+        document.setCreatetime(new Date());
+        document.setValidflag(true);
+        document.setMemo(enterpriseDocumentVo.getMemo());
+        document.setType(enterpriseDocumentVo.getType());
+        document.setEnterpriseid(enterpriseDocumentVo.getEnterpriseid());
+        this.save(document);
+
+        //新建资源
+        List<EnterpriseResource> adds = null;
+        if (enterpriseDocumentVo.getFile() != null && enterpriseDocumentVo.getFile().length > 0) {
+            adds = new ArrayList<>();
+            Date now = new Date();
+            for (MultipartFile file : enterpriseDocumentVo.getFile()) {
+                String name = UploadUtil.uploadFile(file, Properties.enterprisePath);
+                EnterpriseResource er = new EnterpriseResource();
+                er.setTabletype(Constants.DOCUMENT);
+                er.setFilename(file.getOriginalFilename());
+                er.setUrl(Properties.enterprise + name);
+                er.setCreatetime(now);
+                er.setCreateby(user.getId());
+                er.setCreatebyname(user.getUsername());
+                er.setBelongid(document.getId());
+                er.setValidflag(true);
+                adds.add(er);
+            }
+            //执行
+            enterpriseResourceService.saveBatch(adds);
+        }
+    }
+
+    /**
+    * @Description: 修改
+    * @date 2021/3/26 19:51
+    */
+    @Override
+    @Transactional
+    public void modDocument(EnterpriseDocumentVo enterpriseDocumentVo, UserInfo user) throws Exception {
+
+        //修改信息
+        EnterpriseDocument document = new EnterpriseDocument();
+        document.setId(enterpriseDocumentVo.getId());
+        document.setName(enterpriseDocumentVo.getName());
+        document.setSettime(enterpriseDocumentVo.getSettime());
+        document.setUpdateby(user.getId());
+        document.setUpdatebyname(user.getUsername());
+        document.setUpdatetime(new Date());
+        document.setValidflag(true);
+        document.setMemo(enterpriseDocumentVo.getMemo());
+        document.setType(enterpriseDocumentVo.getType());
+        document.setEnterpriseid(enterpriseDocumentVo.getEnterpriseid());
+        this.updateById(document);
+
+        //删除资源
+        List<Long> ids = enterpriseDocumentVo.getIds();
+
+        List<EnterpriseResource> dels = null;
+        if (ids != null && ids.size() > 0) {
+            dels = new ArrayList<>();
+            Date now = new Date();
+            for (Long id:ids) {
+                EnterpriseResource er = new EnterpriseResource();
+                er.setId(id);
+                er.setValidflag(false);
+                er.setUpdateby(user.getId());
+                er.setUpdatebyname(user.getUsername());
+                er.setUpdatetime(now);
+                dels.add(er);
+            }
+            //删除
+            enterpriseResourceService.updateBatchById(dels);
+        }
+
+        //2.新增
+        List<EnterpriseResource> adds = null;
+        if (enterpriseDocumentVo.getFile() !=null && enterpriseDocumentVo.getFile().length > 0) {
+            adds = new ArrayList<>();
+            Date now = new Date();
+            for (MultipartFile file : enterpriseDocumentVo.getFile()) {
+                String name = UploadUtil.uploadFile(file, Properties.enterprisePath);
+                EnterpriseResource er = new EnterpriseResource();
+                er.setTabletype(Constants.DOCUMENT);
+                er.setFilename(file.getOriginalFilename());
+                er.setUrl(Properties.enterprise + name);
+                er.setCreatetime(now);
+                er.setCreateby(user.getId());
+                er.setCreatebyname(user.getUsername());
+                er.setBelongid(enterpriseDocumentVo.getId());
+                er.setValidflag(true);
+                adds.add(er);
+            }
+            //执行
+            enterpriseResourceService.saveBatch(adds);
+        }
+
+    }
+
+    @Override
+    public void delDocument(Long id, UserInfo user) {
+        EnterpriseDocument document = new EnterpriseDocument();
+        document.setId(id);
+        document.setUpdatetime(new Date());
+        document.setCreateby(user.getId());
+        document.setCreatebyname(user.getUsername());
+        document.setValidflag(false);
+        this.updateById(document);
+    }
+
+    /**
+    * @Description: 救援|流向信息管理 校验
+    * @date 2021/4/6 15:58
+    */
+    @Override
+    public void checkDocument(EnterpriseDocumentVo enterpriseDocumentVo,boolean flag) {
+
+        if (StringUtils.isBlank(enterpriseDocumentVo.getName())) {
+            throw new BusinessException("制度名称不能为空");
+        }
+
+        if (enterpriseDocumentVo.getSettime() == null) {
+            throw new BusinessException("制订日期不能为空");
+        }
+
+        if (enterpriseDocumentVo.getMemo() == null) {
+            throw new BusinessException("内容不能为空");
+        }
+        //新增必须上传文件
+        if (flag && enterpriseDocumentVo.getFile() == null) {
+            throw new BusinessException("上传文件不能为空");
+        }
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseFeedServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseFeedServiceImpl.java
new file mode 100644
index 0000000..49af7c4
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseFeedServiceImpl.java
@@ -0,0 +1,183 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.EnterpriseFeed;
+import com.gk.firework.Domain.EnterpriseResource;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.*;
+import com.gk.firework.Domain.Utils.Properties;
+import com.gk.firework.Domain.Vo.EnterpriseFeedVo;
+import com.gk.firework.Mapper.EnterpriseFeedMapper;
+import com.gk.firework.Service.EnterpriseFeedService;
+import com.gk.firework.Service.EnterpriseResourceService;
+import com.gk.firework.Service.ExcelExportService;
+import com.gk.firework.Service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.*;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@Service("enterpriseFeedService")
+public class EnterpriseFeedServiceImpl extends ServiceImpl<EnterpriseFeedMapper, EnterpriseFeed> implements EnterpriseFeedService {
+
+    @Autowired
+    private EnterpriseFeedMapper enterpriseFeedMapper;
+    @Autowired
+    private ExcelExportService excelExportService;
+    @Autowired
+    private EnterpriseResourceService enterpriseResourceService;
+    @Autowired
+    private UserService userService;
+
+
+    /**
+    * @Description: 查询自检
+    * @date 2021/5/13 18:44
+    */
+    @Override
+    public IPage selectPages(Page<EnterpriseFeed> page, Long id, UserInfo user) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("tabletype", Constants.FEED);
+        params.put("id", id);
+        List<EnterpriseFeed> list = enterpriseFeedMapper.selectPages(page, params);
+        return page.setRecords(list);
+    }
+
+    /**
+    * @Description: 新增自检
+    * @date 2021/5/13 18:44
+    */
+    @Override
+    @Transactional
+    public void addFeed(EnterpriseFeedVo enterpriseFeedVo, UserInfo user) {
+
+        if (enterpriseFeedVo.getEnterpriseid() == null) {
+            throw new BusinessException("缺少企业关键数据");
+        }
+
+        enterpriseFeedVo.setValidflag(true);
+        enterpriseFeedVo.setCreatetime(new Date());
+        enterpriseFeedVo.setCreateby(user.getId());
+        enterpriseFeedVo.setCreatebyname(user.getUsername());
+        this.save(enterpriseFeedVo);
+
+        List<EnterpriseResource> adds = null;
+        MultipartFile[] files = enterpriseFeedVo.getFile();
+        try {
+            if (files != null && files.length > 0) {
+                adds = new ArrayList<>();
+                Date now = new Date();
+                for (MultipartFile file : files) {
+                    String name = UploadUtil.uploadFile(file, Properties.enterprisePath);
+                    EnterpriseResource er = new EnterpriseResource();
+                    er.setTabletype(Constants.FEED);
+                    er.setFilename(file.getOriginalFilename());
+                    er.setUrl(Properties.enterprise + name);
+                    er.setCreatetime(now);
+                    er.setCreateby(user.getId());
+                    er.setCreatebyname(user.getUsername());
+                    er.setBelongid(enterpriseFeedVo.getId());
+                    er.setValidflag(true);
+                    adds.add(er);
+                }
+                //执行
+                enterpriseResourceService.saveBatch(adds);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new BusinessException("上传失败,请联系管理员");
+        }
+
+    }
+
+    /**
+    * @Description: 导入反馈
+    * @date 2021/5/13 18:52
+    */
+    @Override
+    public void importFeed(MultipartFile file, UserInfo user,Long enterpriseId) {
+        if (file == null || file.getSize() == 0) {
+            throw new BusinessException("上传文件或者请求出现问题");
+        }
+
+        if(!FileOptUtils.isDirExists(Properties.filePath)){
+            throw new BusinessException("发生错误或不为目录");
+        }
+        if (enterpriseId == null) {
+            throw new BusinessException("缺少企业关键数据");
+        }
+
+        SimpleDateFormat sdf = new SimpleDateFormat( "yyyyMMddHHmmssSSS" );
+        String fileSave = Properties.enterprisePath + user.getUsername() +"_feed_" + sdf.format(new Date()) +".xlsx";
+
+        try {
+            file.transferTo(new File(fileSave));
+            InputStream in = new FileInputStream(fileSave);
+            String name = file.getOriginalFilename();
+            assert name != null;
+            Boolean isExcel2007 = name.substring(name.lastIndexOf(".") + 1).endsWith("xlsx");
+            excelExportService.importFeedExcel(in, user, isExcel2007,enterpriseId);
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+            throw new BusinessException("找不到文件");
+        } catch (IOException e) {
+            e.printStackTrace();
+            throw new BusinessException("发生错误,请联系管理员");
+        }
+    }
+
+
+    /**
+    * @Description: 导出反馈
+    * @date 2021/5/14 11:11
+    */
+    @Override
+    public List<Map> exportFeed(Map filter, UserInfo user) {
+        UserInfo userInfo = userService.getById(user.getId());
+        Map<String, Object> params = new HashMap<>();
+        //监管部门 根据 地区看所有
+        params.put("province", userInfo.getProvince());
+        params.put("city", userInfo.getCity());
+        params.put("district", userInfo.getArea());
+        params.put("street", userInfo.getTown());
+        params.put("committee", userInfo.getCommunity());
+        //企业用户
+        params.put("enterprisenumber", userInfo.getCompanynumber());
+
+        //过滤条件
+        { //企业类型
+            params.put("safetySupervision", filter.get("safetysupervision"));
+            //经济类型
+            params.put("economicIndustry", filter.get("economicindustry"));
+            //许可证有效|过期
+            params.put("valid", filter.get("valid"));
+            //地区
+            params.put("filterProvince", filter.get("province"));
+            params.put("filterCity", filter.get("city"));
+            params.put("filterDistrict", filter.get("district"));
+            params.put("filterStreet", filter.get("street"));
+            params.put("filterCommittee", filter.get("committee"));
+            //企业名称
+            params.put("enterprisename", filter.get("enterprisename"));
+
+        }
+        return enterpriseFeedMapper.selectExportFeed(params);
+    }
+
+    @Override
+    public List<Map> exportFeedById(Long id) {
+        if (id == null) {
+            throw new BusinessException("参数传递为空");
+        }
+        return enterpriseFeedMapper.selectExportFeedById(id);
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseLicenseServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseLicenseServiceImpl.java
new file mode 100644
index 0000000..2b96019
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseLicenseServiceImpl.java
@@ -0,0 +1,222 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Config.Oauth2.IRedisService;
+import com.gk.firework.Domain.Enterprise;
+import com.gk.firework.Domain.EnterpriseLicense;
+import com.gk.firework.Domain.EnterpriseResource;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.Constants;
+import com.gk.firework.Domain.Utils.Properties;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Utils.UploadUtil;
+import com.gk.firework.Domain.Vo.EnterpriseLicenseVo;
+import com.gk.firework.Mapper.EnterpriseLicenseMapper;
+import com.gk.firework.Service.EnterpriseLicenseService;
+import com.gk.firework.Service.EnterpriseResourceService;
+import org.apache.catalina.User;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.*;
+
+@Service("enterpriseLicenseService")
+public class EnterpriseLicenseServiceImpl extends ServiceImpl<EnterpriseLicenseMapper, EnterpriseLicense> implements EnterpriseLicenseService {
+
+    @Autowired
+    private EnterpriseLicenseMapper enterpriseLicenseMapper;
+    @Autowired
+    private EnterpriseResourceService enterpriseResourceService;
+
+
+    /**
+     * @Description: 根据创建时间排序,分页
+     * @date 2021/3/24 14:57
+     */
+    @Override
+    public IPage<EnterpriseLicense> selectPage(Long id, Page<EnterpriseLicense> page) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("id", id);
+        params.put("tabletype", Constants.LICENSE);
+        List<EnterpriseLicense> list = enterpriseLicenseMapper.selectPages(page,params);
+        page.setRecords(list);
+        return page;
+
+    }
+
+
+    /**
+    * @Description: 新增许可证信息
+    * @date 2021/3/24 14:09
+    */
+    @Override
+    @Transactional
+    public void addEnterpriseLicense(EnterpriseLicenseVo enterpriseLicenseVo, UserInfo user) throws Exception {
+        //新增信息
+        EnterpriseLicense el = new EnterpriseLicense();
+        el.setLicensenumber(enterpriseLicenseVo.getLicensenumber());
+        el.setLicensename(enterpriseLicenseVo.getLicensename());
+        el.setRanges(enterpriseLicenseVo.getRanges());
+        el.setValidstarttime(enterpriseLicenseVo.getValidstarttime());
+        el.setValidendtime(enterpriseLicenseVo.getValidendtime());
+        el.setEnterpriseid(enterpriseLicenseVo.getEnterpriseid());
+        el.setAuthority(enterpriseLicenseVo.getAuthority());
+        el.setCreateby(user.getId());
+        el.setCreatebyname(user.getUsername());
+        el.setCreatetime(new Date());
+        el.setValidflag(true);
+        this.save(el);
+
+        //新增资源
+        List<EnterpriseResource> adds = null;
+        if (enterpriseLicenseVo.getFile() != null && enterpriseLicenseVo.getFile().length > 0) {
+            adds = new ArrayList<>();
+            Date now = new Date();
+            for (MultipartFile file : enterpriseLicenseVo.getFile()) {
+                String name = UploadUtil.uploadFile(file, Properties.enterprisePath);
+                EnterpriseResource er = new EnterpriseResource();
+                er.setTabletype(Constants.LICENSE);
+                er.setFilename(file.getOriginalFilename());
+                er.setUrl(Properties.enterprise + name);
+                er.setCreatetime(now);
+                er.setCreateby(user.getId());
+                er.setCreatebyname(user.getUsername());
+                er.setBelongid(el.getId());
+                er.setValidflag(true);
+                adds.add(er);
+            }
+            //执行
+            enterpriseResourceService.saveBatch(adds);
+        }
+
+    }
+
+
+    /**
+    * @Description: 修改许可证信息
+    * @date 2021/3/24 14:35
+    */
+    @Override
+    @Transactional
+    public void modEnterpriseLicense(EnterpriseLicenseVo enterpriseLicenseVo, UserInfo user) throws Exception {
+        //修改
+        EnterpriseLicense el = new EnterpriseLicense();
+        el.setId(enterpriseLicenseVo.getId());
+        el.setLicensenumber(enterpriseLicenseVo.getLicensenumber());
+        el.setLicensename(enterpriseLicenseVo.getLicensename());
+        el.setRanges(enterpriseLicenseVo.getRanges());
+        el.setAuthority(enterpriseLicenseVo.getAuthority());
+        el.setValidstarttime(enterpriseLicenseVo.getValidstarttime());
+        el.setValidendtime(enterpriseLicenseVo.getValidendtime());
+        el.setEnterpriseid(enterpriseLicenseVo.getEnterpriseid());
+        el.setAuthority(enterpriseLicenseVo.getAuthority());
+        el.setValidflag(true);
+        el.setUpdateby(user.getId());
+        el.setUpdatebyname(user.getUsername());
+        el.setUpdatetime(new Date());
+        this.updateById(el);
+        //删除资源
+        List<Long> ids = enterpriseLicenseVo.getImgids();
+
+        List<EnterpriseResource> dels = null;
+        if (ids != null && ids.size() > 0) {
+            dels = new ArrayList<>();
+            Date now = new Date();
+            for (Long id:ids) {
+                EnterpriseResource er = new EnterpriseResource();
+                er.setId(id);
+                er.setValidflag(false);
+                er.setUpdateby(user.getId());
+                er.setUpdatebyname(user.getUsername());
+                er.setUpdatetime(now);
+                dels.add(er);
+            }
+            //删除
+            enterpriseResourceService.updateBatchById(dels);
+        }
+
+        //2.新增
+        List<EnterpriseResource> adds = null;
+        if (enterpriseLicenseVo.getFile() !=null && enterpriseLicenseVo.getFile().length > 0) {
+            adds = new ArrayList<>();
+            Date now = new Date();
+            for (MultipartFile file : enterpriseLicenseVo.getFile()) {
+                String name = UploadUtil.uploadFile(file, Properties.enterprisePath);
+                EnterpriseResource er = new EnterpriseResource();
+                er.setTabletype(Constants.LICENSE);
+                er.setFilename(file.getOriginalFilename());
+                er.setUrl(Properties.enterprise + name);
+                er.setCreatetime(now);
+                er.setCreateby(user.getId());
+                er.setCreatebyname(user.getUsername());
+                er.setBelongid(enterpriseLicenseVo.getId());
+                er.setValidflag(true);
+                adds.add(er);
+            }
+
+            //执行
+            enterpriseResourceService.saveBatch(adds);
+        }
+    }
+
+    @Override
+    public void delEnterpriseLicense(Long id, UserInfo user) {
+        LambdaUpdateWrapper<EnterpriseLicense> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(EnterpriseLicense::getUpdatebyname, new Date())
+                .set(EnterpriseLicense::getUpdateby, user.getId())
+                .set(EnterpriseLicense::getUpdatebyname, user.getUsername())
+                .set(EnterpriseLicense::getValidflag, false)
+                .eq(EnterpriseLicense::getId, id);
+        this.update(updateWrapper);
+    }
+
+    /**
+    * @Description: 证书新增校验
+    * @date 2021/4/6 14:41
+    */
+    @Override
+    public void checkEnterpriseLicense(EnterpriseLicenseVo enterpriseLicenseVo) {
+
+        if (StringUtils.isBlank(enterpriseLicenseVo.getLicensenumber())) {
+            throw new BusinessException("许可证号不能为空");
+        }
+
+        if (StringUtils.isBlank(enterpriseLicenseVo.getLicensename())) {
+            throw new BusinessException("许可证名称不能为空");
+        }
+
+        if (StringUtils.isBlank(enterpriseLicenseVo.getAuthority())) {
+            throw new BusinessException("发证机关不能为空");
+        }
+
+        if (StringUtils.isBlank(enterpriseLicenseVo.getRanges())) {
+            throw new BusinessException("许可范围不能为空");
+        }
+
+        if (enterpriseLicenseVo.getValidstarttime() == null || enterpriseLicenseVo.getValidendtime() == null) {
+            throw new BusinessException("许可证有效期不能为空");
+        }
+    }
+
+    @Override
+    public void deleteByLicenseNumber(String licensecode) {
+        if (StringUtils.isBlank(licensecode)) {
+            throw new BusinessException("许可证编号为空");
+        }
+        LambdaUpdateWrapper<EnterpriseLicense> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(EnterpriseLicense::getValidflag, false)
+                .eq(EnterpriseLicense::getLicensenumber, licensecode)
+                .eq(EnterpriseLicense::getValidflag, true);
+        this.update(updateWrapper);
+
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/EnterprisePersonServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/EnterprisePersonServiceImpl.java
new file mode 100644
index 0000000..0eba55f
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/EnterprisePersonServiceImpl.java
@@ -0,0 +1,219 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.EnterprisePerson;
+import com.gk.firework.Domain.EnterpriseResource;
+import com.gk.firework.Domain.Enum.PersonnelCategory;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.Constants;
+import com.gk.firework.Domain.Utils.Properties;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Utils.UploadUtil;
+import com.gk.firework.Domain.Vo.EnterprisePersonVo;
+import com.gk.firework.Mapper.EnterprisePersonMapper;
+import com.gk.firework.Service.EnterprisePersonService;
+import com.gk.firework.Service.EnterpriseResourceService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.annotation.Id;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.*;
+
+@Service("enterprisePersonService")
+public class EnterprisePersonServiceImpl extends ServiceImpl<EnterprisePersonMapper, EnterprisePerson> implements EnterprisePersonService {
+
+
+    @Autowired
+    private EnterprisePersonMapper enterprisePersonMapper;
+    @Autowired
+    private EnterpriseResourceService enterpriseResourceService;
+
+    /**
+    * @Description: 分页查询人员
+    * @date 2021/3/26 17:59
+    */
+    @Override
+    public IPage selectPage(Page<EnterprisePerson> page, Long id,PersonnelCategory personnelCategory) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("id", id);
+        params.put("category", personnelCategory);
+        params.put("tabletype", Constants.PERSON);
+        List<EnterprisePerson> list = enterprisePersonMapper.selectPages(page, params);
+        page.setRecords(list);
+        return page;
+    }
+
+    /**
+     * @Description: 新增用户
+     * @date 2021/3/26 17:59
+     */
+    @Override
+    @Transactional
+    public void addEnterprisePerson(EnterprisePersonVo enterprisePersonVo, UserInfo user) throws Exception {
+
+        //新增人员
+        EnterprisePerson person = new EnterprisePerson();
+        person.setName(enterprisePersonVo.getName());
+        person.setPost(enterprisePersonVo.getPost());
+        person.setNumber(enterprisePersonVo.getNumber());
+        person.setValidstarttime(enterprisePersonVo.getValidstarttime());
+        person.setValidendtime(enterprisePersonVo.getValidendtime());
+        person.setMemo(enterprisePersonVo.getMemo());
+        person.setEnterpriseid(enterprisePersonVo.getEnterpriseid());
+        person.setType(enterprisePersonVo.getType());
+        person.setIsreview(enterprisePersonVo.getIsreview());
+        person.setCreateby(user.getId());
+        person.setCreatebyname(user.getUsername());
+        person.setCreatetime(new Date());
+        person.setValidflag(true);
+        this.save(person);
+
+        //新建资源
+        List<EnterpriseResource> adds = null;
+        if (enterprisePersonVo.getFile() != null && enterprisePersonVo.getFile().length > 0) {
+            adds = new ArrayList<>();
+            Date now = new Date();
+            for (MultipartFile file : enterprisePersonVo.getFile()) {
+                String name = UploadUtil.uploadFile(file, Properties.enterprisePath);
+                EnterpriseResource er = new EnterpriseResource();
+                er.setTabletype(Constants.PERSON);
+                er.setFilename(file.getOriginalFilename());
+                er.setUrl(Properties.enterprise + name);
+                er.setCreatetime(now);
+                er.setCreateby(user.getId());
+                er.setCreatebyname(user.getUsername());
+                er.setBelongid(person.getId());
+                er.setValidflag(true);
+                adds.add(er);
+            }
+            //执行
+            enterpriseResourceService.saveBatch(adds);
+        }
+    }
+
+    /**
+    * @Description: 修改人员信息
+    * @date 2021/3/26 18:37
+    */
+    @Override
+    public void modEnterprisePerson(EnterprisePersonVo enterprisePersonVo, UserInfo user) throws Exception {
+
+        //修改人员
+        EnterprisePerson person = new EnterprisePerson();
+        person.setId(enterprisePersonVo.getId());
+        person.setName(enterprisePersonVo.getName());
+        person.setPost(enterprisePersonVo.getPost());
+        person.setNumber(enterprisePersonVo.getNumber());
+        person.setValidstarttime(enterprisePersonVo.getValidstarttime());
+        person.setValidendtime(enterprisePersonVo.getValidendtime());
+        person.setMemo(enterprisePersonVo.getMemo());
+        person.setEnterpriseid(enterprisePersonVo.getEnterpriseid());
+        person.setType(enterprisePersonVo.getType());
+        person.setIsreview(enterprisePersonVo.getIsreview());
+        person.setCreateby(user.getId());
+        person.setCreatebyname(user.getUsername());
+        person.setCreatetime(new Date());
+        person.setValidflag(true);
+        this.updateById(person);
+
+        //删除资源
+        List<Long> imgIds = enterprisePersonVo.getImgids();
+
+        List<EnterpriseResource> dels = null;
+        if (imgIds != null && imgIds.size() > 0) {
+            dels = new ArrayList<>();
+            Date now = new Date();
+            for (Long id:imgIds) {
+                EnterpriseResource er = new EnterpriseResource();
+                er.setId(id);
+                er.setValidflag(false);
+                er.setUpdateby(user.getId());
+                er.setUpdatebyname(user.getUsername());
+                er.setUpdatetime(now);
+                dels.add(er);
+            }
+            //删除
+            enterpriseResourceService.updateBatchById(dels);
+        }
+
+        //2.新增
+        List<EnterpriseResource> adds = null;
+        if (enterprisePersonVo.getFile() !=null && enterprisePersonVo.getFile().length > 0) {
+            adds = new ArrayList<>();
+            Date now = new Date();
+            for (MultipartFile file : enterprisePersonVo.getFile()) {
+                String name = UploadUtil.uploadFile(file, Properties.enterprisePath);
+                EnterpriseResource er = new EnterpriseResource();
+                er.setTabletype(Constants.PERSON);
+                er.setFilename(file.getOriginalFilename());
+                er.setUrl(Properties.enterprise + name);
+                er.setCreatetime(now);
+                er.setCreateby(user.getId());
+                er.setCreatebyname(user.getUsername());
+                er.setBelongid(enterprisePersonVo.getId());
+                er.setValidflag(true);
+                adds.add(er);
+            }
+            //执行
+            enterpriseResourceService.saveBatch(adds);
+        }
+
+    }
+
+    /**
+    * @Description: 删除人员
+    * @date 2021/3/26 18:58
+    */
+    @Override
+    public void delEnterprisePerson(Long id, UserInfo user) {
+        EnterprisePerson person = new EnterprisePerson();
+        person.setId(id);
+        person.setUpdateby(user.getId());
+        person.setCreatebyname(user.getUsername());
+        person.setCreatetime(new Date());
+        person.setValidflag(false);
+        this.updateById(person);
+    }
+
+
+    /**
+    * @Description: 校验安全|特种人员资格  新增|修改
+    * @date 2021/4/6 15:03
+    */
+    @Override
+    public void checkEnterprisePerson(EnterprisePersonVo enterprisePersonVo) {
+
+        if (StringUtils.isBlank(enterprisePersonVo.getName())) {
+            throw new BusinessException("姓名不能为空");
+        }
+
+        if (StringUtils.isBlank(enterprisePersonVo.getPost())) {
+            throw new BusinessException("职务不能为空");
+        }
+
+        if (StringUtils.isBlank(enterprisePersonVo.getNumber())) {
+            throw new BusinessException("证书编号不能为空");
+        }
+
+        if (StringUtils.isBlank(enterprisePersonVo.getNumber())) {
+            throw new BusinessException("证书编号不能为空");
+        }
+
+        if (enterprisePersonVo.getValidstarttime() == null
+                || enterprisePersonVo.getValidendtime() == null) {
+            throw new BusinessException("证书有效期不能为空");
+        }
+
+        //特种人员 是否按时复审必填
+        if (enterprisePersonVo.getType() == PersonnelCategory.SPECIAL
+                && enterprisePersonVo.getIsreview() == null) {
+            throw new BusinessException("是否按时复审不能为空");
+        }
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseResourceServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseResourceServiceImpl.java
new file mode 100644
index 0000000..53f5e0e
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseResourceServiceImpl.java
@@ -0,0 +1,48 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.EnterpriseResource;
+import com.gk.firework.Domain.Utils.UploadUtil;
+import com.gk.firework.Mapper.EnterpriseResourceMapper;
+import com.gk.firework.Service.EnterpriseResourceService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Repository;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service("enterpriseResource")
+public class EnterpriseResourceServiceImpl extends ServiceImpl<EnterpriseResourceMapper, EnterpriseResource> implements EnterpriseResourceService {
+    @Autowired
+    private EnterpriseResourceMapper enterpriseResourceMapper;
+
+    @Override
+    public List<EnterpriseResource> getResourceByBelongIdAndType(Long id, String type) {
+        LambdaQueryWrapper<EnterpriseResource> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(EnterpriseResource::getBelongid,id);
+        wrapper.eq(EnterpriseResource::getTabletype,type);
+        return enterpriseResourceMapper.selectList(wrapper);
+    }
+
+    @Override
+    public List<String> getUrlByBelongIdAndType(Long id, String type) {
+        return enterpriseResourceMapper.getUrlByBelongIdAndType(id,type);
+    }
+
+
+//    @Override
+//    public List<String> uploadFiles(MultipartFile[] files) throws Exception {
+//
+//        List<String> urls = new ArrayList<>();
+//        for (MultipartFile file : files) {
+//                String name = UploadUtil.uploadFile(file, filepath);
+//                urls.add(filepath + name);
+//        }
+//        return urls;
+//    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseServiceImpl.java
new file mode 100644
index 0000000..69b4bd8
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseServiceImpl.java
@@ -0,0 +1,1566 @@
+package com.gk.firework.Service.ServiceImpl;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.Enum.*;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.Utils.*;
+import com.gk.firework.Domain.Utils.Properties;
+import com.gk.firework.Domain.Vo.EnterpriseExportVo;
+import com.gk.firework.Domain.Vo.EnterpriseVo;
+import com.gk.firework.Mapper.EnterpriseMapper;
+import com.gk.firework.Mapper.HiddenDangerReportMapper;
+import com.gk.firework.Mapper.SaleOrderInfoMapper;
+import com.gk.firework.Service.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.*;
+import java.lang.reflect.Field;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.regex.Pattern;
+
+
+@Service("enterpriseService")
+public class EnterpriseServiceImpl extends ServiceImpl<EnterpriseMapper, Enterprise> implements EnterpriseService {
+
+    @Autowired
+    EnterpriseMapper enterpriseMapper;
+    @Autowired
+    EnterpriseApplyService enterpriseApplyService;
+    @Autowired
+    EnterpriseService enterpriseService;
+    @Autowired
+    EnterpriseStaffService enterpriseStaffService;
+    @Autowired
+    UserService userService;
+    @Autowired
+    UserRolesService userRolesService;
+    @Autowired
+    RoleService roleService;
+    @Autowired
+    ProductService productService;
+    @Autowired
+    HiddenDangerReportMapper hiddenDangerReportMapper;
+    @Autowired
+    HiddenDangerReportDetailService hiddenDangerReportDetailService;
+    @Autowired
+    ExcelExportService excelExportService;
+    @Autowired
+    SaleOrderInfoMapper saleOrderInfoMapper;
+
+
+    /**
+     * @Description: 新增申请,根据前端提交状态commitStatus来判断增加还是删除 parentId为编辑对象id
+     * @date 2021/3/17 15:57
+     */
+    @Override
+    @Transactional
+    public void addApply(EnterpriseApply enterpriseApply,UserInfo user) throws IllegalAccessException {
+
+        if (enterpriseApply.getCommitstatus() == CommitStatus.MOD) {
+            //新建一个修改给过后的数据
+            Enterprise enp2 = new Enterprise();
+            //ParentId为修改企业的id
+            enp2.setId(enterpriseApply.getParentid());
+            //以下是页面可以修改的值
+            enp2.setSafetysupervision(enterpriseApply.getSafetysupervision());
+            enp2.setEconomicindustry(enterpriseApply.getEconomicindustry());
+            enp2.setEnterprisenumber(enterpriseApply.getEnterprisenumber());
+            enp2.setEnterprisename(enterpriseApply.getEnterprisename());
+            enp2.setEnterpriseemail(enterpriseApply.getEnterpriseemail());
+            enp2.setEnterprisesize(enterpriseApply.getEnterprisesize());
+            enp2.setEnterprisestatus(enterpriseApply.getEnterprisestatus());
+            enp2.setDepartment(enterpriseApply.getDepartment());
+            enp2.setDevicenumber(enterpriseApply.getDevicenumber());
+            enp2.setOfficeaddress(enterpriseApply.getOfficeaddress());
+            enp2.setProvince(enterpriseApply.getProvince());
+            enp2.setCity(enterpriseApply.getCity());
+            enp2.setDistrict(enterpriseApply.getDistrict());
+            enp2.setStreet(enterpriseApply.getStreet());
+            enp2.setCommittee(enterpriseApply.getCommittee());
+            enp2.setSecuritysupervisory(enterpriseApply.getSecuritysupervisory());
+            enp2.setOfficephone(enterpriseApply.getOfficephone());
+            enp2.setFaxphone(enterpriseApply.getFaxphone());
+            enp2.setRegisteraddress(enterpriseApply.getRegisteraddress());
+            enp2.setRegistertype(enterpriseApply.getRegistertype());
+            enp2.setEstablishtime(enterpriseApply.getEstablishtime());
+            enp2.setQqnumber(enterpriseApply.getQqnumber());
+            enp2.setPostcode(enterpriseApply.getPostcode());
+            enp2.setRoomnumber(enterpriseApply.getRoomnumber());
+            enp2.setEconomictype(enterpriseApply.getEconomictype());
+            enp2.setProductioncontent(enterpriseApply.getProductioncontent());
+            enp2.setBusinessregisternumber(enterpriseApply.getBusinessregisternumber());
+            enp2.setOrganizationstructurecode(enterpriseApply.getOrganizationstructurecode());
+            enp2.setValidstarttime(enterpriseApply.getValidstarttime());
+            enp2.setValidendtime(enterpriseApply.getValidendtime());
+            enp2.setEmployeenumber(enterpriseApply.getEmployeenumber());
+            enp2.setIspaysafetyinsurance(enterpriseApply.getIspaysafetyinsurance());
+            enp2.setInsurancecontractnumber(enterpriseApply.getInsurancecontractnumber());
+            enp2.setInsurestarttime(enterpriseApply.getInsurestarttime());
+            enp2.setInsureendtime(enterpriseApply.getInsureendtime());
+            enp2.setIsmajorhazard(enterpriseApply.getIsmajorhazard());
+            enp2.setIsspecialequipment(enterpriseApply.getIsspecialequipment());
+            enp2.setIsoccupationalhealthinfo(enterpriseApply.getIsoccupationalhealthinfo());
+            enp2.setIsspecialpersonnel(enterpriseApply.getIsspecialpersonnel());
+            enp2.setSelfrecordingcycle(enterpriseApply.getSelfrecordingcycle());
+            enp2.setIsparententerprise(enterpriseApply.getIsparententerprise());
+            enp2.setParententerpriseid(enterpriseApply.getParententerpriseid());
+            enp2.setParententerprisename(enterpriseApply.getParententerprisename());
+            //密码
+            enp2.setPassword(enterpriseApply.getPassword());
+
+            Enterprise enp1 = this.getById(enterpriseApply.getParentid());
+            if (enp1 == null) {
+
+            }
+            //以下是非对比内容;设置对比内容相同
+            assert enp1 != null;
+            enp2.setInfocreatetime(enp1.getInfocreatetime());
+            enp2.setInfoupdatetime(enp1.getInfoupdatetime());
+            enp2.setInfoupdateby(enp1.getInfoupdateby());
+            enp2.setInfocreateby(enp1.getInfocreateby());
+            enp2.setValidflag(enp1.getValidflag());
+            enp2.setInfocreatebyname(enp1.getInfocreatebyname());
+            enp2.setInfoupdatebyname(enp1.getInfoupdatebyname());
+
+            //两个对象差
+            String updateFields = compareObj(Enterprise.class, enp1, enp2);
+            //提出时间
+            enterpriseApply.setApplytime(new Date());
+            //等待审批
+            enterpriseApply.setApplystatus(ApplyStatus.APPROVING);
+            enterpriseApply.setValidflag(true);
+            //更新字段
+            enterpriseApply.setUpdatefields(updateFields);
+
+            {
+                enterpriseApply.setSafetysupervision(enp1.getSafetysupervision());
+                enterpriseApply.setEconomicindustry(enp1.getEconomicindustry());
+                enterpriseApply.setEnterprisenumber(enp1.getEnterprisenumber());
+                enterpriseApply.setEnterprisename(enp1.getEnterprisename());
+                enterpriseApply.setEnterpriseemail(enp1.getEnterpriseemail());
+                enterpriseApply.setEnterprisesize(enp1.getEnterprisesize());
+                enterpriseApply.setEnterprisestatus(enp1.getEnterprisestatus());
+                enterpriseApply.setDepartment(enp1.getDepartment());
+                enterpriseApply.setDevicenumber(enp1.getDevicenumber());
+                enterpriseApply.setOfficeaddress(enp1.getOfficeaddress());
+                enterpriseApply.setProvince(enp1.getProvince());
+                enterpriseApply.setCity(enp1.getCity());
+                enterpriseApply.setDistrict(enp1.getDistrict());
+                enterpriseApply.setStreet(enp1.getStreet());
+                enterpriseApply.setCommittee(enp1.getCommittee());
+                enterpriseApply.setSecuritysupervisory(enp1.getSecuritysupervisory());
+                enterpriseApply.setOfficephone(enp1.getOfficephone());
+                enterpriseApply.setFaxphone(enp1.getFaxphone());
+                enterpriseApply.setRegisteraddress(enp1.getRegisteraddress());
+                enterpriseApply.setRegistertype(enp1.getRegistertype());
+                enterpriseApply.setEstablishtime(enp1.getEstablishtime());
+                enterpriseApply.setQqnumber(enp1.getQqnumber());
+                enterpriseApply.setPostcode(enp1.getPostcode());
+                enterpriseApply.setRoomnumber(enp1.getRoomnumber());
+                enterpriseApply.setEconomictype(enp1.getEconomictype());
+                enterpriseApply.setProductioncontent(enp1.getProductioncontent());
+                enterpriseApply.setBusinessregisternumber(enp1.getBusinessregisternumber());
+                enterpriseApply.setOrganizationstructurecode(enp1.getOrganizationstructurecode());
+                enterpriseApply.setValidstarttime(enp1.getValidstarttime());
+                enterpriseApply.setValidendtime(enp1.getValidendtime());
+                enterpriseApply.setEmployeenumber(enp1.getEmployeenumber());
+                enterpriseApply.setIspaysafetyinsurance(enp1.getIspaysafetyinsurance());
+                enterpriseApply.setInsurancecontractnumber(enp1.getInsurancecontractnumber());
+                enterpriseApply.setInsurestarttime(enp1.getInsurestarttime());
+                enterpriseApply.setInsureendtime(enp1.getInsureendtime());
+                enterpriseApply.setIsmajorhazard(enp1.getIsmajorhazard());
+                enterpriseApply.setIsspecialequipment(enp1.getIsspecialequipment());
+                enterpriseApply.setIsoccupationalhealthinfo(enp1.getIsoccupationalhealthinfo());
+                enterpriseApply.setIsspecialpersonnel(enp1.getIsspecialpersonnel());
+                enterpriseApply.setSelfrecordingcycle(enp1.getSelfrecordingcycle());
+                enterpriseApply.setIsparententerprise(enp1.getIsparententerprise());
+                enterpriseApply.setParententerprisename(enp1.getParententerprisename());
+                enterpriseApply.setApplypersonname(user.getUsername());
+                enterpriseApply.setApplypersonid(user.getId());
+                UserInfo userInfo = userService.selectOneByCompanyId(enp1.getId());
+                enterpriseApply.setPassword(userInfo.getPassword());
+            }
+            //新增审批
+            enterpriseApplyService.save(enterpriseApply);
+            //修改企业信息状态
+            Enterprise updateEp = new Enterprise();
+            updateEp.setId(enp1.getId());
+            enterpriseService.updateById(updateEp);
+        }
+
+        if (enterpriseApply.getCommitstatus() == CommitStatus.DEL) {
+
+            //提出时间
+            enterpriseApply.setApplytime(new Date());
+            //等待审批
+            enterpriseApply.setApplystatus(ApplyStatus.APPROVING);
+            Enterprise enp = this.getById(enterpriseApply.getParentid());
+            enterpriseApply.setSafetysupervision(enp.getSafetysupervision());
+            enterpriseApply.setEconomicindustry(enp.getEconomicindustry());
+            enterpriseApply.setEnterprisenumber(enp.getEnterprisenumber());
+            enterpriseApply.setEnterprisename(enp.getEnterprisename());
+            enterpriseApply.setEnterpriseemail(enp.getEnterpriseemail());
+            enterpriseApply.setEnterprisesize(enp.getEnterprisesize());
+            enterpriseApply.setEnterprisestatus(enp.getEnterprisestatus());
+            enterpriseApply.setDepartment(enp.getDepartment());
+            enterpriseApply.setDevicenumber(enp.getDevicenumber());
+            enterpriseApply.setOfficeaddress(enp.getOfficeaddress());
+            enterpriseApply.setProvince(enp.getProvince());
+            enterpriseApply.setCity(enp.getCity());
+            enterpriseApply.setDistrict(enp.getCity());
+            enterpriseApply.setStreet(enp.getStreet());
+            enterpriseApply.setCommittee(enp.getCommittee());
+            enterpriseApply.setSecuritysupervisory(enp.getSecuritysupervisory());
+            enterpriseApply.setOfficephone(enp.getOfficephone());
+            enterpriseApply.setFaxphone(enp.getFaxphone());
+            enterpriseApply.setRegisteraddress(enp.getRegisteraddress());
+            enterpriseApply.setRegistertype(enp.getRegistertype());
+            enterpriseApply.setEstablishtime(enp.getEstablishtime());
+            enterpriseApply.setQqnumber(enp.getQqnumber());
+            enterpriseApply.setPostcode(enp.getPostcode());
+            enterpriseApply.setRoomnumber(enp.getRoomnumber());
+            enterpriseApply.setEconomictype(enp.getEconomictype());
+            enterpriseApply.setProductioncontent(enp.getProductioncontent());
+            enterpriseApply.setBusinessregisternumber(enp.getBusinessregisternumber());
+            enterpriseApply.setOrganizationstructurecode(enp.getOrganizationstructurecode());
+            enterpriseApply.setValidstarttime(enp.getValidstarttime());
+            enterpriseApply.setValidendtime(enp.getValidendtime());
+            enterpriseApply.setEmployeenumber(enp.getEmployeenumber());
+            enterpriseApply.setIspaysafetyinsurance(enp.getIspaysafetyinsurance());
+            enterpriseApply.setInsurancecontractnumber(enp.getInsurancecontractnumber());
+            enterpriseApply.setInsurestarttime(enp.getInsurestarttime());
+            enterpriseApply.setInsureendtime(enp.getInsureendtime());
+            enterpriseApply.setIsmajorhazard(enp.getIsmajorhazard());
+            enterpriseApply.setIsspecialequipment(enp.getIsspecialequipment());
+            enterpriseApply.setIsoccupationalhealthinfo(enp.getIsoccupationalhealthinfo());
+            enterpriseApply.setIsspecialpersonnel(enp.getIsspecialpersonnel());
+            enterpriseApply.setSelfrecordingcycle(enp.getSelfrecordingcycle());
+            enterpriseApply.setIsparententerprise(enp.getIsparententerprise());
+            enterpriseApply.setParententerprisename(enp.getParententerprisename());
+            enterpriseApply.setValidflag(true);
+            enterpriseApply.setApplypersonid(user.getId());
+            enterpriseApply.setApplypersonname(user.getUsername());
+            enterpriseApply.setPassword(enp.getPassword());
+            enterpriseApply.setParententerpriseid(enp.getParententerpriseid());
+            enterpriseApplyService.save(enterpriseApply);
+
+            //修改企业信息状态
+            Enterprise updateEp = new Enterprise();
+            updateEp.setId(enp.getId());
+            enterpriseService.updateById(updateEp);
+
+
+        }
+    }
+
+    /**
+    * @Description: 查询企业信息
+    * @date 2021/3/31 9:31
+    */
+
+    @Override
+    public IPage<Enterprise> selectEnterprise(Page<Enterprise> page, Map filter,UserInfo user) {
+
+        UserInfo userInfo = userService.getById(user.getId());
+        Map<String, Object> params = new HashMap<>();
+        //四类人
+        params.put("leagalrepresentative", Constants.LEGAL_REPRESENTATIVE);
+        params.put("mainprincipal", Constants.MAIN_PRINCIPAL);
+        params.put("securityofficer", Constants.SECURITY_OFFICER);
+        params.put("informationofficer", Constants.INFORMATION_OFFICER);
+
+        //监管部门 根据 地区看所有
+        params.put("province", userInfo.getProvince());
+        params.put("city", userInfo.getCity());
+        params.put("district", userInfo.getArea());
+        params.put("street", userInfo.getTown());
+        params.put("committee", userInfo.getCommunity());
+        //企业用户
+        params.put("enterprisenumber", userInfo.getCompanynumber());
+
+        //过滤条件
+        { //企业类型
+            params.put("safetySupervision", filter.get("safetysupervision"));
+            //经济类型
+            params.put("economicIndustry", filter.get("economicindustry"));
+            //许可证有效|过期
+            params.put("valid", filter.get("valid"));
+            //登录有效 loginvalid 1 就是有效
+            params.put("loginValid",filter.get("loginValid"));
+            //地区
+            params.put("filterProvince", filter.get("province"));
+            params.put("filterCity", filter.get("city"));
+            params.put("filterDistrict", filter.get("district"));
+            params.put("filterStreet", filter.get("street"));
+            params.put("filterCommittee", filter.get("committee"));
+            //企业名称
+            params.put("enterprisename", filter.get("enterprisename"));
+
+        }
+
+        List<Enterprise> list = enterpriseMapper.selectPages(page, params);
+        return page.setRecords(list);
+
+    }
+
+    /**
+    * @Description: 新建企业信息
+    * @date 2021/3/31 10:49
+    */
+    @Override
+    @Transactional
+    public void addEnterprise(Enterprise enterprise,UserInfo userInfo) {
+        UserInfo userInfo2 = userService.getById(userInfo.getId());
+        if (userInfo2.getCompanynumber() != null) {
+            throw new BusinessException("没有新增权限");
+        }
+        //计算安全监管分类个数
+        {
+            int i = countBySafetySupervision(enterprise.getSafetysupervision());
+            enterprise.setDivideflag((byte) (DivideFlagUtil.enterpriseDivideFlagGenerate(i)));
+        }
+
+        //新建企业信息
+        {
+            enterprise.setInfocreatetime(new Date());
+            enterprise.setInfocreateby(userInfo.getId());
+            enterprise.setInfocreatebyname(userInfo.getUsername());
+            enterprise.setInfoupdatetime(new Date());
+            enterprise.setValidflag(true);
+            String randomStr = Element.random(Element.class).getValue().toString()+Element.random(Element.class).getValue().toString();
+            while (enterpriseService.isDuplicate2BitCode(randomStr)) {
+                 randomStr = Element.random(Element.class).getValue().toString()+Element.random(Element.class).getValue().toString();
+            }
+            enterprise.setTwobitcode(randomStr);
+            //执行
+            this.save(enterprise);
+        }
+        //新建企业关联staff
+        {
+            List<EnterpriseStaff> staff = new ArrayList<>();
+            if (enterprise.getLegalrepresentative() != null) {
+                enterprise.getLegalrepresentative().setId(null);
+                enterprise.getLegalrepresentative().setType(Constants.LEGAL_REPRESENTATIVE);
+                enterprise.getLegalrepresentative().setBelongid(enterprise.getId());
+                enterprise.getLegalrepresentative().setBelongname(enterprise.getEnterprisename());
+                staff.add(enterprise.getLegalrepresentative());
+
+            }
+            if (enterprise.getInformationofficer() != null) {
+                enterprise.getInformationofficer().setId(null);
+                enterprise.getInformationofficer().setType(Constants.INFORMATION_OFFICER);
+                enterprise.getInformationofficer().setBelongid(enterprise.getId());
+                enterprise.getInformationofficer().setBelongname(enterprise.getEnterprisename());
+                staff.add(enterprise.getInformationofficer());
+            }
+            if (enterprise.getSecurityofficer() != null) {
+                enterprise.getSecurityofficer().setId(null);
+                enterprise.getSecurityofficer().setType(Constants.SECURITY_OFFICER);
+                enterprise.getSecurityofficer().setBelongid(enterprise.getId());
+                enterprise.getSecurityofficer().setBelongname(enterprise.getEnterprisename());
+                staff.add(enterprise.getSecurityofficer());
+            }
+            if (enterprise.getMainprincipal() != null) {
+                enterprise.getMainprincipal().setId(null);
+                enterprise.getMainprincipal().setType(Constants.MAIN_PRINCIPAL);
+                enterprise.getMainprincipal().setBelongid(enterprise.getId());
+                enterprise.getMainprincipal().setBelongname(enterprise.getEnterprisename());
+                staff.add(enterprise.getMainprincipal());
+            }
+            if (staff.size()>0)
+                enterpriseStaffService.saveBatch(staff);
+
+        }
+
+
+        //保存信息两份到用户表
+        {
+            UserInfo user = new UserInfo();
+            user.setIsdel((byte) 0);
+            user.setUsername(enterprise.getEnterprisename());
+            user.setCompany(enterprise.getEnterprisename());
+            user.setEmail(enterprise.getEnterpriseemail());
+            user.setDepartment(enterprise.getDepartment());
+            user.setIssale((byte) 0);
+            //普通用户
+            user.setType(3);
+            user.setProvince(enterprise.getProvince());
+            user.setPhone(enterprise.getOfficephone());
+            user.setCity(enterprise.getCity());
+            user.setArea(enterprise.getDistrict());
+            user.setTown(enterprise.getStreet());
+            user.setCommunity(enterprise.getCommittee());
+            //提出人为创建人
+            user.setCreatedby(user.getUsername());
+            user.setCompanyid(enterprise.getId());
+            user.setCreateddate(new Date());
+            //设置密码
+            user.setPassword(Base64Encrypt.encode(enterprise.getPassword().getBytes()));
+            user.setCompanynumber(enterprise.getEnterprisenumber());
+            //执行
+            userService.save(user);
+
+            //如果有企业角色设置用户角色为企业
+            UserRolesInfo uri = new UserRolesInfo();
+            uri.setUserid(user.getId());
+            if (enterprise.getSafetysupervision().equals(EnterpriseSafetySupervision.PRODUCE.getMsg())){
+                uri.setRoleid((long) 3);
+            }else {
+                uri.setRoleid((long) 2);
+            }
+            userRolesService.save(uri);
+
+            //终端机
+            user.setId(null);
+            user.setIssale((byte) 1);
+            user.setStatus((byte) 1);
+            Calendar instance = Calendar.getInstance();
+            instance.setTime(enterprise.getValidendtime());
+            instance.set(Calendar.HOUR_OF_DAY, 23);
+            instance.set(Calendar.MINUTE, 59);
+            instance.set(Calendar.SECOND, 59);
+            user.setExpiredate(instance.getTime());
+            userService.save(user);
+            //终端机角色不需要
+
+        }
+
+
+    }
+
+
+    /**
+    * @Description: 修改企业信息
+    * @date 2021/3/31 10:48
+    */
+    @Override
+    @Transactional
+    public void modEnterprise(Enterprise enterprise,UserInfo user) {
+
+        //修改企业信息
+        {
+            enterprise.setInfoupdatetime(new Date());
+            enterprise.setInfoupdateby(user.getId());
+            enterprise.setInfoupdatebyname(user.getUsername());
+            //企业名称和企业编号 不会修改
+            enterprise.setEnterprisenumber(null);
+            enterprise.setEnterprisename(null);
+            this.updateById(enterprise);
+        }
+
+        //修改企业关联staff
+        {
+            ///更新的员工
+            List<EnterpriseStaff> staff = new ArrayList<>();
+            //新增的员工
+            List<EnterpriseStaff> adds = new ArrayList<>();
+            if (enterprise.getSecurityofficer() != null) {
+                if (enterprise.getSecurityofficer().getId() != null) {
+                    enterprise.getSecurityofficer().setBelongname(enterprise.getEnterprisename());
+                    staff.add(enterprise.getSecurityofficer());
+                }else{
+                    enterprise.getSecurityofficer().setType(Constants.SECURITY_OFFICER);
+                    enterprise.getSecurityofficer().setBelongid(enterprise.getId());
+                    enterprise.getSecurityofficer().setBelongname(enterprise.getEnterprisename());
+                    adds.add(enterprise.getSecurityofficer());
+                }
+            }
+            if (enterprise.getLegalrepresentative() != null) {
+                if (enterprise.getLegalrepresentative().getId() != null) {
+                    enterprise.getLegalrepresentative().setBelongname(enterprise.getEnterprisename());
+                    staff.add(enterprise.getLegalrepresentative());
+                }else{
+                    enterprise.getLegalrepresentative().setType(Constants.LEGAL_REPRESENTATIVE);
+                    enterprise.getLegalrepresentative().setBelongid(enterprise.getId());
+                    enterprise.getLegalrepresentative().setBelongname(enterprise.getEnterprisename());
+                    adds.add(enterprise.getLegalrepresentative());
+                }
+
+            }
+            if (enterprise.getMainprincipal() != null) {
+                if (enterprise.getMainprincipal().getId() != null) {
+                    enterprise.getMainprincipal().setBelongname(enterprise.getEnterprisename());
+                    staff.add(enterprise.getMainprincipal());
+                }else{
+                    enterprise.getMainprincipal().setType(Constants.MAIN_PRINCIPAL);
+                    enterprise.getMainprincipal().setBelongid(enterprise.getId());
+                    enterprise.getMainprincipal().setBelongname(enterprise.getEnterprisename());
+                    adds.add(enterprise.getMainprincipal());
+                }
+
+            }
+            if (enterprise.getInformationofficer() != null) {
+                if (enterprise.getInformationofficer().getId() != null) {
+                    enterprise.getInformationofficer().setBelongname(enterprise.getEnterprisename());
+                    staff.add(enterprise.getInformationofficer());
+                }else{
+                    enterprise.getInformationofficer().setType(Constants.INFORMATION_OFFICER);
+                    enterprise.getInformationofficer().setBelongid(enterprise.getId());
+                    enterprise.getInformationofficer().setBelongname(enterprise.getEnterprisename());
+                    adds.add(enterprise.getInformationofficer());
+                }
+            }
+
+            if (staff.size()>0)
+                enterpriseStaffService.updateBatchById(staff);
+            if (adds.size() > 0) {
+                enterpriseStaffService.saveBatch(adds);
+            }
+        }
+
+        //修改人员
+        {
+            //修改用户和终端机
+            List<UserInfo> userList = userService.selectByCompanyId(enterprise.getId(),0);
+            if (userList.size() != 2) {
+                throw new BusinessException("发生错误,请联系管理员");
+            }
+            for (UserInfo info : userList) {
+                if (StringUtils.isNotBlank(enterprise.getPassword())) {
+                    info.setPassword(Base64Encrypt.encode(enterprise.getPassword().getBytes()));
+                }
+                info.setEmail(enterprise.getEnterpriseemail());
+                info.setCompany(enterprise.getEnterprisename());
+                info.setDepartment(enterprise.getDepartment());
+                info.setProvince(enterprise.getProvince());
+                info.setPhone(enterprise.getOfficephone());
+                info.setCity(enterprise.getCity());
+                info.setArea(enterprise.getDistrict());
+                info.setTown(enterprise.getStreet());
+                info.setCommunity(enterprise.getCommittee());
+                //修改许可证 同时修改issale=1的用户有效期
+                if (info.getIssale() == (byte) 1) {
+                    //设置过期时间为选择当日的23:59:59
+                    if (enterprise.getValidendtime() != null) {
+                        Calendar instance = Calendar.getInstance();
+                        instance.setTime(enterprise.getValidendtime());
+                        instance.set(Calendar.HOUR_OF_DAY, 23);
+                        instance.set(Calendar.MINUTE, 59);
+                        instance.set(Calendar.SECOND, 59);
+                        info.setExpiredate(instance.getTime());
+                    }
+                }
+                userService.updateById(info);
+            }
+        }
+
+    }
+
+
+    @Override
+    public int countBySafetySupervision(String safetySupervision) {
+        LambdaQueryWrapper<Enterprise> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Enterprise::getSafetysupervision, safetySupervision)
+                .eq(Enterprise::getValidflag, true);
+        return enterpriseMapper.selectCount(queryWrapper);
+    }
+
+    @Override
+    public IPage<Enterprise> selectParentEnterprise(Page<Enterprise> page, Map filter) {
+        //重新赋一遍
+        Map<String, Object> params = new HashMap<>();
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("province", filter.get("province"));
+        params.put("city", filter.get("city"));
+        params.put("district", filter.get("district"));
+        params.put("street", filter.get("street"));
+        List<Enterprise> list = enterpriseMapper.selectParentPage(page, params);
+        return page.setRecords(list);
+    }
+
+    @Override
+    @Transactional
+    public void delEnterprise(Long id, UserInfo user) {
+
+        UserInfo userInfo = userService.getById(user.getId());
+        Integer type = userInfo.getType();
+        if (type != 1 && type != 2) {
+            throw new BusinessException("没有权限删除");
+        }
+        //企业信息删除
+        Enterprise enterprise = this.getById(id);
+        if (enterprise == null) {
+            throw new BusinessException("企业信息发生改变,请联系管理员");
+        }
+        enterprise.setInfoupdatebyname(user.getUsername());
+        enterprise.setInfoupdatetime(new Date());
+        enterprise.setValidflag(false);
+        this.updateById(enterprise);
+        //删除用户
+        userService.deleteOneByCompanyId(id);
+        //根据企业名称去删除所有产品
+        productService.deleteByEnterpriseName(enterprise.getEnterprisename(),user.getUsername());
+
+
+    }
+
+    /**
+     * @Description: 企业信息新增的校验
+     * @date 2021/4/2 16:54
+     */
+    @Override
+    public void checkAddEnterprise(Enterprise enterprise, Boolean flag) {
+        if (StringUtils.isBlank(enterprise.getSafetysupervision())) {
+            throw new BusinessException("安全监管分类不能为空");
+        }
+
+        if (StringUtils.isBlank(enterprise.getEconomicindustry())) {
+            throw new BusinessException("国民经济行业分类不能为空");
+        }
+
+        if (StringUtils.isBlank(enterprise.getDepartment())) {
+            throw new BusinessException("行政主管部门不能为空");
+        }
+
+        if (flag) {
+            if (StringUtils.isBlank(enterprise.getPassword())) {
+                throw new BusinessException("密码不能为空");
+            }
+
+            String PW_PATTERN = "(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[~!@#$%^&*_.]).{8,}";
+            if (!enterprise.getPassword().matches(PW_PATTERN)){
+                throw new BusinessException("密码必须8位以上,并且包含大小写字母、数字、特殊符号三种以上");
+            }
+        }
+
+
+        if (StringUtils.isBlank(enterprise.getEnterprisenumber())) {
+            throw new BusinessException("单位编号不能为空");
+        }
+        //编号格式判断-不能有特殊字符
+        String regEx= "[`~!@#$%^&*()+=|{}':;,\\[\\].<>/?!¥…()—【】‘;:”“’。,、?\\\\]";
+        Pattern p = Pattern.compile(regEx);
+        if (p.matcher(enterprise.getEnterprisenumber()).find()) {
+            throw new BusinessException("单位编号不能包含特殊字符");
+        }
+        //单位编号判断重复
+        if (this.isDuplicateNumber(enterprise.getEnterprisenumber(),enterprise.getId())) {
+            throw new BusinessException("单位编号已经存在");
+        }
+
+        if (StringUtils.isBlank(enterprise.getEnterprisename())) {
+            throw new BusinessException("企业名称不能为空");
+        }
+
+        //单位名称不能重复
+        if (this.isDuplicateEnterpriseName(enterprise.getEnterprisename(), enterprise.getId())) {
+            throw new BusinessException("企业名称已经存在");
+        }
+
+        if (!enterprise.getSafetysupervision().contains("长期") && StringUtils.isBlank(enterprise.getRegisteraddress())) {
+            throw new BusinessException("单位注册地址不能为空");
+        }
+
+        if (!enterprise.getSafetysupervision().contains("短期") && StringUtils.isBlank(enterprise.getOfficeaddress())) {
+            throw new BusinessException("单位办公地址不能为空");
+        }
+
+        if (StringUtils.isBlank(enterprise.getProvince())) {
+            throw new BusinessException("所属省不能为空");
+        }
+
+        if (StringUtils.isBlank(enterprise.getCity())) {
+            throw new BusinessException("所属市不能为空");
+        }
+
+        if (StringUtils.isBlank(enterprise.getOfficephone())) {
+            throw new BusinessException("办公电话不能为空");
+        }
+
+        if (!enterprise.getSafetysupervision().contains("短期") &&
+                !enterprise.getSafetysupervision().contains("长期") &&
+                StringUtils.isBlank(enterprise.getFaxphone())) {
+            throw new BusinessException("传真电话不能为空");
+        }
+
+        if (StringUtils.isBlank(enterprise.getDistrict())) {
+            throw new BusinessException("所属区不能为空");
+        }
+
+        if (StringUtils.isBlank(enterprise.getBusinessregisternumber())) {
+            throw new BusinessException("工商注册号不能为空");
+        }
+
+        if (StringUtils.isBlank(enterprise.getOrganizationstructurecode())) {
+            throw new BusinessException("组织结构代码不能为空");
+        }
+
+
+        if (StringUtils.isBlank(enterprise.getProductioncontent())) {
+            throw new BusinessException("生产经营项目不能为空");
+        }
+
+        if (enterprise.getEstablishtime() == null) {
+            throw new BusinessException("成立时间不能为空");
+        }
+
+        if (StringUtils.isBlank(enterprise.getInsurancecompany())) {
+            throw new BusinessException("保险公司名称不能为空,没有请填写无");
+        }
+
+        //非临时,有投必填
+        if (!enterprise.getSafetysupervision().contains("临时")) {
+            if (enterprise.getIspaysafetyinsurance()) {
+                if (StringUtils.isBlank(enterprise.getInsurancecontractnumber())) {
+                    throw new BusinessException("保单号不能为空");
+                }
+
+                if (enterprise.getInsureamount() == null) {
+                    throw new BusinessException("投保金额不能为空");
+                }
+
+            }
+        }
+
+        //法定负责人
+        if (enterprise.getLegalrepresentative() != null) {
+
+            if (StringUtils.isBlank(enterprise.getLegalrepresentative().getName())) {
+                throw new BusinessException("法定负责人姓名不能为空");
+            }
+
+            if (StringUtils.isBlank(enterprise.getLegalrepresentative().getPost())) {
+                throw new BusinessException("法定负责人职务不能为空");
+            }
+            if (StringUtils.isBlank(enterprise.getLegalrepresentative().getIdentify())) {
+                throw new BusinessException("法定负责人身份证号不能为空");
+            }
+            if (StringUtils.isBlank(enterprise.getLegalrepresentative().getPhone())) {
+                throw new BusinessException("法定负责人手机号不能为空");
+            }
+            if (StringUtils.isBlank(enterprise.getLegalrepresentative().getOfficephone())) {
+                throw new BusinessException("法定负责人办公室电话不能为空");
+            }
+            if (StringUtils.isBlank(enterprise.getLegalrepresentative().getNumber())) {
+                throw new BusinessException("法定负责人合格证编号不能为空");
+            }
+            if (enterprise.getLegalrepresentative().getValidendtime() == null ||enterprise.getLegalrepresentative().getValidstarttime() == null ) {
+                throw new BusinessException("法定负责人有效期不能为空");
+            }
+
+        }
+
+        //主要负责人
+        if (enterprise.getMainprincipal() != null) {
+            if (StringUtils.isBlank(enterprise.getMainprincipal().getName())) {
+                throw new BusinessException("主要负责人姓名不能为空");
+            }
+
+            if (StringUtils.isBlank(enterprise.getMainprincipal().getPost())) {
+                throw new BusinessException("主要负责人职务不能为空");
+            }
+            if (StringUtils.isBlank(enterprise.getMainprincipal().getPhone())) {
+                throw new BusinessException("主要负责人手机号不能为空");
+            }
+
+            if (StringUtils.isBlank(enterprise.getMainprincipal().getOfficephone())) {
+                throw new BusinessException("主要负责人办公室电话不能为空");
+            }
+            if (StringUtils.isBlank(enterprise.getMainprincipal().getNumber())) {
+                throw new BusinessException("主要负责人合格证编号不能为空");
+            }
+            if (enterprise.getMainprincipal().getValidendtime() == null ||enterprise.getMainprincipal().getValidstarttime() == null ) {
+                throw new BusinessException("主要负责人有效期不能为空");
+            }
+
+        }
+
+    }
+
+    /**
+    * @Description: 企业信息修改的校验
+    * @date 2021/4/6 10:15
+    */
+    @Override
+    public void checkModEnterprise(Enterprise enterprise) {
+
+        if (enterprise.getId() == null) {
+            throw new BusinessException("修改企业信息时发生错误,请联系管理员");
+        }
+
+        Enterprise theOne = this.getById(enterprise.getId());
+        if (theOne == null) {
+            throw new BusinessException("修改企业信息已发生变化,请联系管理员");
+        }
+
+        if (StringUtils.isBlank(enterprise.getSafetysupervision())) {
+            throw new BusinessException("安全监管分类不能为空");
+        }
+
+        assert theOne.getSafetysupervision() != null;
+        if (theOne.getSafetysupervision().equals(enterprise.getSafetysupervision())) {
+            //接下来和新增判断一样
+            this.checkAddEnterprise(enterprise,false);
+        }
+
+    }
+
+    /**
+    * @Description: 判断企业编号是否重复
+    * @date 2021/4/20 16:18
+    */
+    @Override
+    public boolean isDuplicateNumber(String enterpriseNumber, Long id) {
+
+        LambdaQueryWrapper<Enterprise> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Enterprise::getEnterprisenumber, enterpriseNumber)
+                .eq(Enterprise::getValidflag, true);
+        //修改时:除自己以外是否还有重复
+        if (id != null) {
+            queryWrapper.ne(Enterprise::getId, id);
+        }
+        return enterpriseMapper.selectCount(queryWrapper) > 0;
+    }
+
+    /**
+    * @Description: 判断企业名是否重复
+    * @date 2021/4/20 16:16
+    */
+    @Override
+    public boolean isDuplicateEnterpriseName(String enterpriseName, Long id) {
+        LambdaQueryWrapper<Enterprise> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Enterprise::getEnterprisename, enterpriseName)
+                .eq(Enterprise::getValidflag, true);
+        //修改时:除自己以外是否还有重复
+        if (id != null) {
+            queryWrapper.ne(Enterprise::getId, id);
+        }
+        return enterpriseMapper.selectCount(queryWrapper) > 0;
+    }
+
+    @Override
+    public List<Long> findEnterpriseIdsByLocation(String province, String city, String district, String street, String committee) {
+        if(province == null || province.isEmpty()){
+            return null;
+        }
+        if(province == null && city == null && district == null && street == null && committee == null){
+            return null;
+        }
+        return enterpriseMapper.selectEnterpriseIdsByLocation(province,city,district,street,committee);
+    }
+
+
+
+    @Override
+    public List<Enterprise> findEnterpriseListByLocation(String province, String city, String district, String street, String committee) {
+        return enterpriseMapper.selectEnterpriseListByLocation(province,city,district,street,committee);
+    }
+
+    /**
+    * @Description: 根据企业单位编号获取企业信息和实名登记和自查自改
+    * @date 2021/4/14 8:25
+    */
+    @Override
+    public Map getEnterpriseDetail(String enterpriseNumber, Integer days, String starttime, String endtime) {
+        if (StringUtils.isBlank(enterpriseNumber)) {
+            throw new BusinessException("企业单位编号为空");
+        }
+        Calendar calendar = new GregorianCalendar();
+        calendar.setTime(new Date());
+        //当前日期往前推days天
+        calendar.add(Calendar.DATE, -days);
+        Date startTime = calendar.getTime();
+        Map<String, Object> map = new HashMap<>();
+        EnterpriseVo enterpriseVo = selctSimpleByNumber(enterpriseNumber);
+        map.put("enterprise", enterpriseVo);
+        //实名登记数量(入库数,销售数)
+        Map registerNumObj = enterpriseMapper.selectInAndOut(enterpriseNumber,startTime);
+        map.put("registerNum", registerNumObj);
+        //自检自查报告
+        List<Map>  reports= hiddenDangerReportMapper.getReportList(enterpriseNumber, startTime);
+        if (reports.size() > 0) {
+            for (Map report : reports) {
+                int overduenum = hiddenDangerReportDetailService.countOverdueByReportCode((String) report.get("code"));
+                //过期并且未处理
+                report.put("overduenum",overduenum);
+            }
+        }
+        map.put("reports", reports);
+
+        Map<String, Object> params = new HashMap<>();
+        params.put("enterprisename", enterpriseVo.getEnterprisename());
+        params.put("starttime", starttime);
+        params.put("endtime", endtime);
+        List<Map> saleRecord =  saleOrderInfoMapper.selectSaleRecord3(params);
+        map.put("saleRecord",saleRecord);
+
+        return map;
+    }
+
+    @Override
+    public EnterpriseVo selctSimpleByNumber(String enterprisenumber) {
+        return enterpriseMapper.selctSimpleByNumber(enterprisenumber);
+    }
+    @Override
+    public Enterprise selectEnterpriseByCompanyId(Long companyid) {
+        LambdaQueryWrapper<Enterprise> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Enterprise::getId,companyid);
+        return enterpriseMapper.selectOne(queryWrapper);
+    }
+
+    @Override
+    public List<Enterprise> selectProduceEnterprise() {
+        LambdaQueryWrapper<Enterprise> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Enterprise::getSafetysupervision, EnterpriseSafetySupervision.PRODUCE.getMsg());
+        return enterpriseMapper.selectList(queryWrapper);
+    }
+
+    @Override
+    public List<Enterprise> selectSaleEnterprise() {
+        LambdaQueryWrapper<Enterprise> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.ne(Enterprise::getSafetysupervision, EnterpriseSafetySupervision.PRODUCE.getMsg());
+        queryWrapper.eq(Enterprise::getValidflag,1);
+        queryWrapper.eq(Enterprise::getEnterprisestatus ,"ON");
+        return enterpriseMapper.selectList(queryWrapper);
+    }
+
+    @Override
+    public List<Enterprise> selectSaleEnterprise(Map<String, Object>param) {
+        LambdaQueryWrapper<Enterprise> queryWrapper = new LambdaQueryWrapper<>();
+        if (StringUtils.isNotBlank(param.get("filterProvince").toString())){
+            queryWrapper.eq(Enterprise::getProvince,param.get("filterProvince"));
+        }
+        if (StringUtils.isNotBlank(param.get("filterCity").toString())){
+            queryWrapper.eq(Enterprise::getCity,param.get("filterCity"));
+        }
+
+        if (StringUtils.isNotBlank(param.get("filterDistrict").toString())){
+            queryWrapper.eq(Enterprise::getDistrict,param.get("filterDistrict"));
+        }
+        if (StringUtils.isNotBlank(param.get("filterStreet").toString())){
+            queryWrapper.eq(Enterprise::getStreet,param.get("filterStreet"));
+        }
+        if (StringUtils.isNotBlank(param.get("filterCommittee").toString())){
+            queryWrapper.eq(Enterprise::getCommittee,param.get("filterCommittee"));
+        }
+        if (StringUtils.isNotBlank(param.get("safetysupervision").toString())){
+            queryWrapper.eq(Enterprise::getSafetysupervision,param.get("safetysupervision"));
+        }
+        if (StringUtils.isNotBlank(param.get("parententerprisename").toString())){
+            queryWrapper.like(Enterprise::getParententerprisename,param.get("parententerprisename"));
+        }
+        queryWrapper.ne(Enterprise::getSafetysupervision, EnterpriseSafetySupervision.PRODUCE.getMsg());
+        queryWrapper.eq(Enterprise::getEnterprisestatus, EnterpriseStatus.ON);
+        queryWrapper.eq(Enterprise::getValidflag, true);
+        return enterpriseMapper.selectList(queryWrapper);
+    }
+
+    @Override
+    public List<Enterprise> selectSaleEnterprise(Map<String, Object> param, Page<Enterprise> page) {
+        return enterpriseMapper.selectSaleEnterprise(param,page);
+    }
+
+    @Override
+    public Enterprise selectEnterpriseByNumber(String number) {
+        LambdaQueryWrapper<Enterprise> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Enterprise::getEnterprisenumber, number)
+         .eq(Enterprise::getValidflag,true);
+        return enterpriseMapper.selectOne(queryWrapper);
+    }
+
+    @Override
+    public List<Map> getAllLocation(String city) {
+        return enterpriseMapper.getAllLocation(city);
+    }
+
+    @Override
+    public List<Map> getRetailStatisticsByArea() {
+        Map<String, Object> params = new HashMap<>();
+        params.put("province", "新疆维吾尔自治区");
+        return enterpriseMapper.getRetailStatisticsByArea(params);
+    }
+
+    /**
+    * @Description: 导出企业信息
+    * @date 2021/4/19 8:51
+    */
+    @Override
+    public List<EnterpriseExportVo> selectExportEnterprise(Map filter, UserInfo user) {
+
+        UserInfo userInfo = userService.getById(user.getId());
+        Map<String, Object> params = new HashMap<>();
+        //监管部门 根据 地区看所有
+        params.put("enterprisenumber", userInfo.getCompanynumber());
+        params.put("province", userInfo.getProvince());
+        params.put("city", userInfo.getCity());
+        params.put("district", userInfo.getArea());
+        params.put("street", userInfo.getTown());
+        params.put("committee", userInfo.getCommunity());
+        //企业用户
+        params.put("companyId", userInfo.getCompanyid());
+
+        //过滤条件
+        { //企业类型
+            params.put("safetySupervision", filter.get("safetysupervision"));
+            //经济类型
+            params.put("economicIndustry", filter.get("economicindustry"));
+            //许可证有效|过期
+            params.put("valid", filter.get("valid"));
+            //地区
+            params.put("filterProvince", filter.get("province"));
+            params.put("filterCity", filter.get("city"));
+            params.put("filterDistrict", filter.get("district"));
+            params.put("filterStreet", filter.get("street"));
+            params.put("filterCommittee", filter.get("committee"));
+            //企业名称
+            params.put("enterprisename", filter.get("enterprisename"));
+
+        }
+        return enterpriseMapper.selectExportEnterprise(params);
+    }
+
+    /**
+    * @Description: 企业信息导入
+    * @date 2021/4/19 9:08
+    */
+    @Override
+    public BooleanReason importEnterprise(MultipartFile file,UserInfo userInfo) {
+
+        UserInfo user = userService.getById(userInfo.getId());
+        if (user.getCompanynumber() != null) {
+            throw new BusinessException("没有导入权限");
+        }
+        if(!FileOptUtils.isDirExists(Properties.filePath)){
+            throw new BusinessException("发生错误或不为目录");
+        }
+
+        if (file == null || file.getSize() == 0) {
+            throw new BusinessException("上传文件或者请求出现问题");
+        }
+
+        if(!FileOptUtils.isDirExists(Properties.filePath)){
+            throw new BusinessException("发生错误或不为目录");
+        }
+
+        SimpleDateFormat sdf = new SimpleDateFormat( "yyyyMMddHHmmssSSS" );
+        String fileSave = Properties.filePath + userInfo.getUsername() + "_" + sdf.format(new Date()) +".xlsx";
+
+        try {
+            file.transferTo(new File(fileSave));
+            InputStream in = new FileInputStream(fileSave);
+            String name = file.getOriginalFilename();
+            assert name != null;
+            Boolean isExcel2007 = name.substring(name.lastIndexOf(".") + 1).endsWith("xlsx");
+            return excelExportService.importEnterpriseExcel(in, userInfo, isExcel2007);
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+            throw new BusinessException("找不到文件");
+        } catch (IOException e) {
+            e.printStackTrace();
+            throw new BusinessException("发生错误,请联系管理员");
+        }
+
+
+    }
+
+    @Override
+    public int getSaleNum() {
+        return enterpriseMapper.getSaleNum(Collections.singletonMap("safetysupervision",EnterpriseSafetySupervision.PRODUCE.getMsg()));
+    }
+
+    @Override
+    public List<SaleOrderDetailInfo> getEnterpriseSaleDetail(String enterpriseNumber, String itemcode, String starttime, String endtime) {
+        return saleOrderInfoMapper.getEnterpriseSaleDetail(enterpriseNumber, itemcode, starttime, endtime);
+    }
+
+    @Override
+    public Enterprise selectEnterpriseByName(String name) {
+        LambdaQueryWrapper<Enterprise> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Enterprise::getEnterprisename, name)
+                    .eq(Enterprise::getValidflag,true);
+        return enterpriseMapper.selectOne(queryWrapper);
+    }
+
+
+    /**
+     * @Description: 停用企业
+     * @date 2021/5/28 15:58
+     */
+    @Override
+    @Transactional
+    public void deactivateEnterprise(Long id,String enterprisenumber, UserInfo user) {
+        Enterprise enterprise = null;
+        if (id == null && StringUtils.isBlank(enterprisenumber))
+            throw new BusinessException("参数传递错误");
+
+        if (id != null)
+            enterprise = this.getById(id);
+
+        if (enterprise == null)
+            enterprise = this.selectEnterpriseByNumber(enterprisenumber);
+
+        if (enterprise == null) {
+            throw new BusinessException("没有该企业");
+        }
+        //1.修改企业状态为 停止
+        this.setEnterpriseStatus(EnterpriseStatus.OFF, enterprise.getId());
+
+        //2.修改企业用户isdel=1     3.修改终端用户isdel=1
+        List<UserInfo> userList = userService.selectByCompanyId(enterprise.getId(),0);
+        if (userList.size() != 2) {
+            throw new BusinessException("发生错误,请联系管理员");
+        }
+        for (UserInfo info : userList) {
+            userService.deleteById(info.getId());
+        }
+
+    }
+
+    @Override
+    @Transactional
+    public void activateEnterprise(Long id,String enterprisenumber, UserInfo user) {
+        Enterprise enterprise = null;
+        if (id == null && StringUtils.isBlank(enterprisenumber))
+            throw new BusinessException("参数传递错误");
+
+        if (id != null)
+            enterprise = this.getById(id);
+
+        if (enterprise == null)
+            enterprise = this.selectEnterpriseByNumber(enterprisenumber);
+
+        if (enterprise == null) {
+            throw new BusinessException("没有该企业");
+        }
+        //1.修改企业状态为 启用
+        this.setEnterpriseStatus(EnterpriseStatus.ON, enterprise.getId());
+        //2.修改企业用户isdel 0
+        //3.修改终端用户isdel 0
+        List<UserInfo> userList = userService.selectByCompanyId(enterprise.getId(),1);
+        if (userList.size() != 2) {
+            throw new BusinessException("发生错误,请联系管理员");
+        }
+        for (UserInfo info : userList) {
+            userService.recoverOneById(info.getId());
+        }
+    }
+
+    @Override
+    public void setEnterpriseStatus(EnterpriseStatus status, Long id) {
+        if (id == null) {
+            throw new BusinessException("参数传递不能为空");
+        }
+        LambdaUpdateWrapper<Enterprise> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(Enterprise::getEnterprisestatus, status)
+                .eq(Enterprise::getId, id);
+        this.update(updateWrapper);
+    }
+
+    @Override
+    public int countAllUndoneEnterprise(UserInfo userInfo) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("province", userInfo.getProvince());
+        params.put("city", userInfo.getCity());
+        params.put("district", userInfo.getArea());
+        params.put("street", userInfo.getTown());
+        params.put("committee", userInfo.getCommunity());
+        return enterpriseMapper.countAllUndoneEnterprise(params);
+    }
+
+    @Override
+    public int countAllEnterpriseExpired(UserInfo userInfo) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("province", userInfo.getProvince());
+        params.put("city", userInfo.getCity());
+        params.put("district", userInfo.getArea());
+        params.put("street", userInfo.getTown());
+        params.put("committee", userInfo.getCommunity());
+        return enterpriseMapper.countAllEnterpriseExpired(params);
+    }
+
+    @Override
+    public void addEnterpriseByRegister(RegisterInfo registerInfo, UserInfo userInfo) {
+        Enterprise enterprise = new Enterprise();
+        enterprise.setSafetysupervision(registerInfo.getType());
+        enterprise.setEnterprisenumber(registerInfo.getEnterprisenumber());
+        enterprise.setEnterprisename(registerInfo.getEnterprisename());
+        enterprise.setProvince(registerInfo.getProvince());
+        enterprise.setCity(registerInfo.getCity());
+        enterprise.setDistrict(registerInfo.getDistrict());
+        enterprise.setStreet(registerInfo.getStreet());
+        enterprise.setCommittee(registerInfo.getCommittee());
+        enterprise.setRegisteraddress(registerInfo.getAddress());
+        enterprise.setPassword(Base64Encrypt.encode(registerInfo.getPassword().getBytes()));
+        int i = enterpriseService.countBySafetySupervision(enterprise.getSafetysupervision());
+        enterprise.setDivideflag((byte) (DivideFlagUtil.enterpriseDivideFlagGenerate(i)));
+        enterprise.setInfocreatebyname(userInfo.getUsername());
+        enterprise.setInfocreateby(userInfo.getId());
+        enterprise.setInfoupdatetime(new Date());
+        enterprise.setValidflag(true);
+
+        enterpriseService.save(enterprise);
+
+        //保存用户
+        UserInfo user = new UserInfo();
+        user.setIsdel((byte) 0);
+        user.setProvince(enterprise.getProvince());
+        user.setCity(enterprise.getCity());
+        user.setArea(enterprise.getDistrict());
+        user.setUsername(enterprise.getEnterprisename());
+        user.setCompany(enterprise.getEnterprisename());
+        user.setIssale((byte) 0);
+        //普通用户
+        user.setType(3);
+        user.setCreatedby(user.getUsername());
+        user.setCompanyid(enterprise.getId());
+        user.setCreateddate(new Date());
+        //设置密码
+        user.setPassword(enterprise.getPassword());
+        user.setCompanynumber(enterprise.getEnterprisenumber());
+        //执行
+        userService.save(user);
+
+        //如果有企业角色设置用户角色为企业
+        UserRolesInfo uri = new UserRolesInfo();
+        uri.setUserid(user.getId());
+        if (enterprise.getSafetysupervision().equals(EnterpriseSafetySupervision.PRODUCE.getMsg())){
+            uri.setRoleid((long) 3);
+        }else {
+            uri.setRoleid((long) 2);
+        }
+        userRolesService.save(uri);
+        //终端机
+        user.setId(null);
+        user.setUsername(enterprise.getEnterprisenumber());
+        user.setIssale((byte) 1);
+        user.setStatus((byte) 1);
+        userService.save(user);
+    }
+
+    @Override
+    public List<Enterprise> selectListUnderSupervision(Integer type,UserInfo userInfo) {
+        List<Enterprise> result = new ArrayList<>();
+        Map<String, Object> params = new HashMap<>();
+        UserInfo user = userService.getById(userInfo);
+        if (StringUtils.isBlank(user.getCompanynumber())) {
+            params.put("province", user.getProvince());
+            params.put("city", user.getCity());
+            params.put("district", user.getArea());
+            params.put("street", user.getTown());
+            params.put("committee", user.getCommunity());
+            params.put("safetysupervision", EnterpriseSafetySupervision.PRODUCE.getMsg());
+            //1生产企业,2销售企业
+            params.put("type", type);
+            result=  enterpriseMapper.selectListUnderSupervision(params);
+        }
+        return result;
+
+    }
+
+    @Override
+    public IPage selectUndoneList(Page<Enterprise> page, Map filter,UserInfo userInfo) {
+        Map<Object, Object> params = new HashMap<>();
+        List<Enterprise> undoneList = null;
+        UserInfo user = userService.getById(userInfo);
+        //可见度
+        if (StringUtils.isBlank(user.getCompanynumber())) {
+            params.put("province", user.getProvince());
+            params.put("city", user.getCity());
+            params.put("district", user.getArea());
+            params.put("street", user.getTown());
+            params.put("committee", user.getCommunity());
+
+            //过滤条件
+            params.put("enterprisename", filter.get("enterprisename"));
+            params.put("filterProvince", filter.get("province"));
+            params.put("filterCity", filter.get("city"));
+            params.put("filterDistrict", filter.get("district"));
+            params.put("filterStreet", filter.get("street"));
+            params.put("filterCommittee", filter.get("committee"));
+            undoneList = enterpriseMapper.selectUndoneList(page,params);
+
+        }
+
+        return page.setRecords(undoneList);
+    }
+
+    @Override
+    public List<Enterprise> selectExportUndoneList(Map filter, UserInfo userInfo) {
+        Map<Object, Object> params = new HashMap<>();
+        List<Enterprise> undoneList = null;
+        UserInfo user = userService.getById(userInfo);
+        //可见度
+        if (StringUtils.isBlank(user.getCompanynumber())) {
+            params.put("province", user.getProvince());
+            params.put("city", user.getCity());
+            params.put("district", user.getArea());
+            params.put("street", user.getTown());
+            params.put("committee", user.getCommunity());
+
+            //过滤条件
+            params.put("enterprisename", filter.get("enterprisename"));
+            params.put("filterProvince", filter.get("province"));
+            params.put("filterCity", filter.get("city"));
+            params.put("filterDistrict", filter.get("district"));
+            params.put("filterStreet", filter.get("street"));
+            params.put("filterCommittee", filter.get("committee"));
+            undoneList = enterpriseMapper.selectUndoneList(params);
+        }
+        return undoneList;
+    }
+
+    @Override
+    public boolean isDuplicate2BitCode(String twoBit) {
+        LambdaQueryWrapper<Enterprise> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Enterprise::getTwobitcode, twoBit)
+                .eq(Enterprise::getValidflag,true);
+        return enterpriseMapper.selectCount(queryWrapper) > 0;
+    }
+
+    @Override
+    public IPage selectExpiredList(Page<Enterprise> page, Map filter, UserInfo userInfo) {
+        Map<Object, Object> params = new HashMap<>();
+        List<Enterprise> expiredList = null;
+        UserInfo user = userService.getById(userInfo);
+        //可见度
+        if (StringUtils.isBlank(user.getCompanynumber())) {
+            params.put("province", user.getProvince());
+            params.put("city", user.getCity());
+            params.put("district", user.getArea());
+            params.put("street", user.getTown());
+            params.put("committee", user.getCommunity());
+
+            //过滤条件
+            params.put("enterprisename", filter.get("enterprisename"));
+            params.put("filterProvince", filter.get("province"));
+            params.put("filterCity", filter.get("city"));
+            params.put("filterDistrict", filter.get("district"));
+            params.put("filterStreet", filter.get("street"));
+            params.put("filterCommittee", filter.get("committee"));
+            expiredList = enterpriseMapper.selectExpiredList(page,params);
+        }
+        return page.setRecords(expiredList);
+    }
+
+    @Override
+    public List<Enterprise> selectExportExpiredList(Map<String, Object> filter, UserInfo userInfo) {
+        Map<Object, Object> params = new HashMap<>();
+        List<Enterprise> expiredList = null;
+        UserInfo user = userService.getById(userInfo);
+        //可见度
+        if (StringUtils.isBlank(user.getCompanynumber())) {
+            params.put("province", user.getProvince());
+            params.put("city", user.getCity());
+            params.put("district", user.getArea());
+            params.put("street", user.getTown());
+            params.put("committee", user.getCommunity());
+
+            //过滤条件
+            params.put("enterprisename", filter.get("enterprisename"));
+            params.put("filterProvince", filter.get("province"));
+            params.put("filterCity", filter.get("city"));
+            params.put("filterDistrict", filter.get("district"));
+            params.put("filterStreet", filter.get("street"));
+            params.put("filterCommittee", filter.get("committee"));
+            expiredList = enterpriseMapper.selectExpiredList(params);
+        }
+        return expiredList;
+    }
+
+    @Override
+    public List<Enterprise> selectSubEnterprise(Long enterpriseId) {
+
+        Enterprise parent = enterpriseService.getById(enterpriseId);
+        if (parent == null) throw new BusinessException("不存在企业信息");
+        LambdaQueryWrapper<Enterprise> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(Enterprise::getParententerprisename, parent.getEnterprisename())
+                .eq(Enterprise::getValidflag,true)
+                .eq(Enterprise::getEnterprisestatus,EnterpriseStatus.ON);
+        return enterpriseMapper.selectList(queryWrapper);
+    }
+
+    @Override
+    public List<Enterprise> getEnterpriseByLimit(Map<String, Object> condition) {
+        return enterpriseMapper.getEnterpriseByLimit(condition);
+    }
+
+    @Override
+    public Integer getEnterpriseByLimitCount(Map<String, Object> condition) {
+        return enterpriseMapper.getEnterpriseByLimitCount(condition);
+    }
+
+    @Override
+    public BooleanReason importDlCompanyCode(MultipartFile file, UserInfo userInfo) {
+        UserInfo user = userService.getById(userInfo.getId());
+        if (user.getCompanynumber() != null)
+            throw new BusinessException("没有导入权限");
+
+        if (file == null || file.getSize() == 0)
+            throw new BusinessException("上传文件或者请求出现问题");
+
+        try {
+            String name = file.getOriginalFilename();
+            InputStream in = file.getInputStream();
+            assert name != null;
+            boolean isExcel2007 = name.substring(name.lastIndexOf(".") + 1).endsWith("xlsx");
+            return excelExportService.importDLCompanyCodeExcel(in, userInfo, isExcel2007);
+        } catch (BusinessException e) {
+            throw new BusinessException(e.getMessage());
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new BusinessException("导入失败,请联系管理员");
+        }
+    }
+
+    @Override
+    public List<Enterprise> exportDlCompanyCode() {
+        LambdaQueryWrapper<Enterprise> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper
+                .select(Enterprise::getEnterprisename,
+                        Enterprise::getDlcompanycode,
+                        Enterprise::getDeviceid)
+                .eq(Enterprise::getValidflag, true)
+                .isNotNull(Enterprise::getDlcompanycode);
+        return enterpriseMapper.selectList(queryWrapper);
+    }
+
+    @Override
+    public List<Enterprise> selectAllDlCompanyCodeIsNotNull() {
+        LambdaQueryWrapper<Enterprise> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper
+                .select(Enterprise::getId,
+                        Enterprise::getEnterprisenumber,
+                        Enterprise::getDlcompanycode)
+                .eq(Enterprise::getValidflag,true)
+                .isNull(Enterprise::getDeviceid)
+                .isNotNull(Enterprise::getDlcompanycode);
+
+        return enterpriseMapper.selectList(queryWrapper);
+    }
+
+    @Override
+    public void updateCompanyCode(Enterprise e) {
+        enterpriseMapper.updateCompanyCodeAndSetDeviceIdNull(e);
+    }
+
+    @Override
+    public List<Enterprise> selectSaleEnterpriseForUpload() {
+        LambdaQueryWrapper<Enterprise> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.ne(Enterprise::getSafetysupervision, EnterpriseSafetySupervision.PRODUCE.getMsg());
+        queryWrapper.eq(Enterprise::getValidflag,1);
+        queryWrapper.eq(Enterprise::getEnterprisestatus ,"ON");
+        queryWrapper.isNotNull(Enterprise::getDlcompanycode);
+        queryWrapper.isNotNull(Enterprise::getDeviceid);
+        return enterpriseMapper.selectList(queryWrapper);
+    }
+
+
+    /*
+        判断是否注销 true 注销,flase 正常
+     */
+    @Override
+    public boolean isLogOut(String companynumber) {
+        boolean flag = false;
+        if (StringUtils.isBlank(companynumber)) throw new BusinessException("企业编号为空");
+        LambdaQueryWrapper<Enterprise> queryWrapper = new LambdaQueryWrapper<>();
+        Enterprise enterprise = enterpriseMapper.selectOne(
+                queryWrapper.select(Enterprise::getEnterprisename,Enterprise::getLoginvalidflag)
+                        .eq(Enterprise::getEnterprisenumber, companynumber));
+        if (enterprise == null) throw new BusinessException("企业不存在");
+        if ( enterprise.getLoginvalidflag() != null && !enterprise.getLoginvalidflag()) flag = true;
+        return flag;
+    }
+
+    @Override
+    @Transactional
+    public void logout(List<Long> ids, UserInfo user) {
+        if (user.getType() != 1) throw new BusinessException("没有权限");
+        if (ids == null || ids.size() < 1) throw new BusinessException("参数为空");
+        for (Long id : ids) {
+            enterpriseMapper.updateLoginValidFlag(id,false);
+        }
+
+    }
+
+    @Override
+    public void recoverLogin(Long id, UserInfo user) {
+        if (user.getType() != 1) throw new BusinessException("没有权限");
+        if(id == null) throw new BusinessException("参数为空");
+        enterpriseMapper.updateLoginValidFlag(id,true);
+    }
+
+    @Override
+    @Transactional
+    public void recoverLoginBatch(List<Long> ids, UserInfo user) {
+        if (user.getType() != 1) throw new BusinessException("没有权限");
+        if (ids == null || ids.size() < 1) throw new BusinessException("参数为空");
+        for (Long id : ids) {
+            enterpriseMapper.updateLoginValidFlag(id,true);
+        }
+    }
+
+    @Override
+    public List<Enterprise> selectEnterpriseListByNameLike(String name) {
+        if(name == null || name.isEmpty()){
+            return null;
+        }else {
+            return enterpriseMapper.selectEnterpriseListByNameLike(name);
+        }
+    }
+
+    private String compareObj(Class clazz,Object obj1,Object obj2) throws IllegalAccessException {
+        Class<?> class1 = obj1.getClass();
+        Class<?> class2 = obj2.getClass();
+        Field[] fields = clazz.getDeclaredFields();
+        JSONObject jo = new JSONObject();
+        if (fields.length> 0) {
+            for (Field field : fields) {
+                field.setAccessible(true);
+                String name = field.getName();
+                if (!name.equals("serialVersionUID")&& !name.equals("divideflag")
+                        && !Objects.equals(field.get(obj1),field.get(obj2))) {
+
+                        if (field.get(obj1) != null && field.get(obj2) == null){
+                            jo.put(name, "");
+                        }else{
+                            if (name.equals("legalrepresentative") ||
+                                    name.equals("mainprincipal")||
+                                    name.equals("securityofficer")||
+                                    name.equals("informationofficer")){
+                                String o1 = (String) field.get(obj1);
+                                String o2 = (String) field.get(obj2);
+
+                                JSONObject jsonObject1 = JSONObject.parseObject(o1);
+                                JSONObject jsonObject2 = JSONObject.parseObject(o2);
+                                Map<String, Object> innerMap1 = jsonObject1.getInnerMap();
+                                Map<String, Object> innerMap2 = jsonObject2.getInnerMap();
+                                for (Map.Entry<String, Object> entry : innerMap1.entrySet()) {
+                                    String f = entry.getKey();
+                                    Object value1 = innerMap1.get(f);
+                                    Object value2= innerMap2.get(f);
+                                    if (!Objects.equals(value1, value2)) {
+                                        jo.put(f, value2);
+                                    }
+
+                                }
+                            }
+
+                            jo.put(name, field.get(obj2));
+                        }
+
+
+
+
+
+
+                }
+            }
+        }
+
+        return jo.isEmpty()?null:jo.toJSONString();
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseStaffServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseStaffServiceImpl.java
new file mode 100644
index 0000000..bc6473f
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseStaffServiceImpl.java
@@ -0,0 +1,11 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.EnterpriseStaff;
+import com.gk.firework.Mapper.EnterpriseStaffMapper;
+import com.gk.firework.Service.EnterpriseStaffService;
+import org.springframework.stereotype.Service;
+
+@Service("enterpriseStaffService")
+public class EnterpriseStaffServiceImpl extends ServiceImpl<EnterpriseStaffMapper, EnterpriseStaff> implements EnterpriseStaffService {
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseStandardizationServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseStandardizationServiceImpl.java
new file mode 100644
index 0000000..8d9bf7f
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseStandardizationServiceImpl.java
@@ -0,0 +1,209 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.Enterprise;
+import com.gk.firework.Domain.EnterpriseResource;
+import com.gk.firework.Domain.EnterpriseStandardization;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.*;
+import com.gk.firework.Domain.Utils.Properties;
+import com.gk.firework.Domain.Vo.EnterpriseStandardizationVo;
+import com.gk.firework.Mapper.EnterpriseStandardizationMapper;
+import com.gk.firework.Service.EnterpriseResourceService;
+import com.gk.firework.Service.EnterpriseStandardizationService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.*;
+
+@Service("enterpriseStandardizationService")
+public class EnterpriseStandardizationServiceImpl extends ServiceImpl<EnterpriseStandardizationMapper, EnterpriseStandardization> implements EnterpriseStandardizationService {
+    @Autowired
+    private EnterpriseStandardizationMapper enterpriseStandardizationMapper;
+    @Autowired
+    private EnterpriseResourceService enterpriseResourceService;
+
+    @Override
+    public Page selectPage(Page<EnterpriseStandardization> page, Long id) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("id", id);
+        params.put("tabletype", Constants.STANDARDIZATION);
+        List<EnterpriseStandardization> enterpriseStandardizations = enterpriseStandardizationMapper.selectPages(page, params);
+        page.setRecords(enterpriseStandardizations);
+        return page;
+    }
+
+    @Override
+    @Transactional
+    public void addEnterpriseStandardization(EnterpriseStandardizationVo enterpriseStandardizationVo, UserInfo user) throws Exception {
+
+        //新增标准化
+        EnterpriseStandardization es = new EnterpriseStandardization();
+        es.setLevel(enterpriseStandardizationVo.getLevel());
+        es.setLicensenumber(enterpriseStandardizationVo.getLicensenumber());
+        es.setReviewunit(enterpriseStandardizationVo.getReviewunit());
+        es.setLicensingunit(enterpriseStandardizationVo.getLicensingunit());
+        es.setScore(enterpriseStandardizationVo.getScore());
+        es.setValidstarttime(enterpriseStandardizationVo.getValidstarttime());
+        es.setValidendtime(enterpriseStandardizationVo.getValidendtime());
+        es.setCreatetime(new Date());
+        es.setCreateby(user.getId());
+        es.setCreatebyname(user.getUsername());
+        es.setEnterpriseid(enterpriseStandardizationVo.getEnterpriseid());
+        es.setValidflag(true);
+        this.save(es);
+
+        //新增图片信息
+        List<EnterpriseResource> ers = null;
+        if (enterpriseStandardizationVo.getFile() != null && enterpriseStandardizationVo.getFile().length > 0) {
+            ers = new ArrayList<>();
+            Date now = new Date();
+            for (MultipartFile file : enterpriseStandardizationVo.getFile()) {
+                //上传文件 获取新的文件名
+                String name = UploadUtil.uploadFile(file, Properties.enterprisePath);
+                EnterpriseResource er = new EnterpriseResource();
+                er.setBelongid(es.getId());
+                er.setTabletype(Constants.STANDARDIZATION);
+                er.setCreateby(user.getId());
+                er.setCreatebyname(user.getUsername());
+                er.setCreatetime(now);
+                er.setFilename(file.getOriginalFilename());
+                er.setUrl(Properties.enterprise + name);
+                er.setValidflag(true);
+                ers.add(er);
+            }
+             enterpriseResourceService.saveBatch(ers);
+        }
+
+
+
+    }
+
+    @Override
+    @Transactional
+    public void modEnterpriseStandardization(EnterpriseStandardizationVo enterpriseStandardizationVo, UserInfo user) throws Exception {
+        //修改标准化
+        EnterpriseStandardization es = new EnterpriseStandardization();
+        es.setId(enterpriseStandardizationVo.getId());
+        es.setLevel(enterpriseStandardizationVo.getLevel());
+        es.setLicensenumber(enterpriseStandardizationVo.getLicensenumber());
+        es.setReviewunit(enterpriseStandardizationVo.getReviewunit());
+        es.setLicensingunit(enterpriseStandardizationVo.getLicensingunit());
+        es.setScore(enterpriseStandardizationVo.getScore());
+        es.setValidstarttime(enterpriseStandardizationVo.getValidstarttime());
+        es.setValidendtime(enterpriseStandardizationVo.getValidendtime());
+        es.setUpdatetime(new Date());
+        es.setUpdateby(user.getId());
+        es.setUpdatebyname(user.getUsername());
+        es.setEnterpriseid(enterpriseStandardizationVo.getEnterpriseid());
+        this.updateById(es);
+        //修改图片
+        List<Long> imgIds = enterpriseStandardizationVo.getImgids();
+        //1.删除图片
+        List<EnterpriseResource> dels = null;
+        if (imgIds !=null && imgIds.size() > 0) {
+            dels = new ArrayList<>();
+            Date now = new Date();
+            for (Long id:imgIds) {
+                EnterpriseResource er = new EnterpriseResource();
+                er.setId(id);
+                er.setValidflag(false);
+                er.setUpdateby(user.getId());
+                er.setUpdatebyname(user.getUsername());
+                er.setUpdatetime(now);
+                dels.add(er);
+            }
+            //删除
+            enterpriseResourceService.updateBatchById(dels);
+        }
+        //2.新增
+        List<EnterpriseResource> adds = null;
+        if (enterpriseStandardizationVo.getFile() !=null && enterpriseStandardizationVo.getFile().length > 0) {
+            adds = new ArrayList<>();
+            Date now = new Date();
+            for (MultipartFile file : enterpriseStandardizationVo.getFile()) {
+                String name = UploadUtil.uploadFile(file, Properties.enterprisePath);
+                EnterpriseResource er = new EnterpriseResource();
+                er.setTabletype(Constants.STANDARDIZATION);
+                er.setFilename(file.getOriginalFilename());
+                er.setUrl(Properties.enterprise + name);
+                er.setCreatetime(now);
+                er.setCreateby(user.getId());
+                er.setCreatebyname(user.getUsername());
+                er.setBelongid(enterpriseStandardizationVo.getId());
+                er.setValidflag(true);
+                adds.add(er);
+            }
+            //执行
+            enterpriseResourceService.saveBatch(adds);
+        }
+
+
+    }
+
+    @Override
+    public void delEnterpriseStandardization(Long id, UserInfo user) {
+        EnterpriseStandardization es = new EnterpriseStandardization();
+        es.setId(id);
+        es.setUpdatebyname(user.getUsername());
+        es.setUpdateby(user.getId());
+        es.setUpdatetime(new Date());
+        es.setValidflag(false);
+        this.updateById(es);
+    }
+
+    @Override
+    public EnterpriseStandardization getOne(Long id) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("id", id);
+        params.put("tabletype", Constants.STANDARDIZATION);
+        List<EnterpriseStandardization> enterpriseStandardizations = enterpriseStandardizationMapper.selectStandardization(params);
+        if (enterpriseStandardizations.size() > 0) {
+            return enterpriseStandardizations.get(0);
+        }
+        return null;
+    }
+
+    /**
+    * @Description: 新增|修改的校验
+    * @date 2021/4/6 14:54
+    */
+    @Override
+    public void checkEnterpriseStandardization(EnterpriseStandardizationVo enterpriseStandardizationVo) {
+
+        if (StringUtils.isBlank(enterpriseStandardizationVo.getLevel())) {
+            throw new BusinessException("标准化级别不能为空");
+        }
+
+        if (StringUtils.isBlank(enterpriseStandardizationVo.getLicensenumber())) {
+            throw new BusinessException("证书编号不能为空");
+        }
+
+        if (StringUtils.isBlank(enterpriseStandardizationVo.getReviewunit())) {
+            throw new BusinessException("评审单位不能为空");
+        }
+
+        if (StringUtils.isBlank(enterpriseStandardizationVo.getLicensingunit())) {
+            throw new BusinessException("发牌单位不能为空");
+        }
+
+        if (enterpriseStandardizationVo.getScore() == null) {
+            throw new BusinessException("考核得分不能为空");
+        }
+        if (enterpriseStandardizationVo.getValidstarttime() == null
+                || enterpriseStandardizationVo.getValidendtime() == null) {
+            throw new BusinessException("有效期不能为空");
+        }
+
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseWarehouseServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseWarehouseServiceImpl.java
new file mode 100644
index 0000000..2ef67e6
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/EnterpriseWarehouseServiceImpl.java
@@ -0,0 +1,212 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.EnterpriseResource;
+import com.gk.firework.Domain.EnterpriseWarehouse;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.Constants;
+import com.gk.firework.Domain.Utils.Properties;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Utils.UploadUtil;
+import com.gk.firework.Domain.Vo.EnterpriseWarehouseVo;
+import com.gk.firework.Mapper.EnterpriseWarehouseMapper;
+import com.gk.firework.Service.EnterpriseResourceService;
+import com.gk.firework.Service.EnterpriseService;
+import com.gk.firework.Service.EnterpriseWarehouseService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.*;
+
+@Service("enterpriseWarehouseService")
+public class EnterpriseWarehouseServiceImpl extends ServiceImpl<EnterpriseWarehouseMapper, EnterpriseWarehouse> implements EnterpriseWarehouseService {
+
+
+    @Autowired
+    private EnterpriseResourceService enterpriseResourceService;
+
+    @Autowired
+    private EnterpriseWarehouseMapper enterpriseWarehouseMapper;
+
+    /**
+    * @Description: 分页查询库房信息
+    * @date 2021/3/25 9:29
+    */
+    @Override
+    public IPage selectPage(Page<EnterpriseWarehouse> page, Long id) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("id", id);
+        params.put("tabletype", Constants.WAREHOUSE);
+        List<EnterpriseWarehouse> list = enterpriseWarehouseMapper.selectPages(page, params);
+        page.setRecords(list);
+        return page;
+
+    }
+
+    /**
+     * @Description: 新增库房信息
+     * @date 2021/3/25 9:29
+     */
+    @Override
+    @Transactional
+    public void addEnterpriseWarehouse(EnterpriseWarehouseVo enterpriseWarehouseVo, UserInfo user) throws Exception {
+
+        //新增基本信息
+        EnterpriseWarehouse ew = new EnterpriseWarehouse();
+        ew.setBulidingnumber(enterpriseWarehouseVo.getBulidingnumber());
+        ew.setArea(enterpriseWarehouseVo.getArea());
+        ew.setDangerlevel(enterpriseWarehouseVo.getDangerlevel());
+        ew.setLimits(enterpriseWarehouseVo.getLimits());
+        ew.setSafetyperson(enterpriseWarehouseVo.getSafetyperson());
+        ew.setEnterpriseid(enterpriseWarehouseVo.getEnterpriseid());
+        ew.setHoldinventory(enterpriseWarehouseVo.getHoldinventory());
+        ew.setSafetypersonphone(enterpriseWarehouseVo.getSafetypersonphone());
+        ew.setMedicinelimits(enterpriseWarehouseVo.getMedicinelimits());
+        ew.setCreatetime(new Date());
+        ew.setCreateby(user.getId());
+        ew.setCreatebyname(user.getUsername());
+        ew.setValidflag(true);
+        this.save(ew);
+
+        List<EnterpriseResource> adds = null;
+        if (enterpriseWarehouseVo.getFile() !=null && enterpriseWarehouseVo.getFile().length > 0) {
+            adds = new ArrayList<>();
+            Date now = new Date();
+            for (MultipartFile file : enterpriseWarehouseVo.getFile()) {
+                String name = UploadUtil.uploadFile(file, Properties.enterprisePath);
+                EnterpriseResource er = new EnterpriseResource();
+                er.setBelongid(ew.getId());
+                er.setTabletype(Constants.WAREHOUSE);
+                er.setCreateby(user.getId());
+                er.setCreatebyname(user.getUsername());
+                er.setCreatetime(now);
+                er.setFilename(file.getOriginalFilename());
+                er.setUrl(Properties.enterprise + name);
+                er.setValidflag(true);
+                adds.add(er);
+            }
+            enterpriseResourceService.saveBatch(adds);
+        }
+    }
+
+    /**
+     * @Description: 修改库房信息
+     * @date 2021/3/25 9:29
+     */
+    @Override
+    @Transactional
+    public void modEnterpriseWarehouse(EnterpriseWarehouseVo enterpriseWarehouseVo, UserInfo user) throws Exception {
+
+        EnterpriseWarehouse ew = new EnterpriseWarehouse();
+        ew.setId(enterpriseWarehouseVo.getId());
+        ew.setBulidingnumber(enterpriseWarehouseVo.getBulidingnumber());
+        ew.setArea(enterpriseWarehouseVo.getArea());
+        ew.setDangerlevel(enterpriseWarehouseVo.getDangerlevel());
+        ew.setLimits(enterpriseWarehouseVo.getLimits());
+        ew.setHoldinventory(enterpriseWarehouseVo.getHoldinventory());
+        ew.setSafetyperson(enterpriseWarehouseVo.getSafetyperson());
+        ew.setSafetypersonphone(enterpriseWarehouseVo.getSafetypersonphone());
+        ew.setMedicinelimits(enterpriseWarehouseVo.getMedicinelimits());
+        ew.setEnterpriseid(enterpriseWarehouseVo.getEnterpriseid());
+        ew.setUpdatetime(new Date());
+        ew.setUpdateby(user.getId());
+        ew.setUpdatebyname(user.getUsername());
+        this.updateById(ew);
+
+        //修改图片
+        List<Long> imgIds = enterpriseWarehouseVo.getImgids();
+        //1.删除图片
+        List<EnterpriseResource> dels = null;
+        if (imgIds != null && imgIds.size() > 0) {
+            dels = new ArrayList<>();
+            for (Long id : imgIds) {
+                EnterpriseResource er = new EnterpriseResource();
+                er.setId(id);
+                er.setValidflag(false);
+                er.setUpdateby(user.getId());
+                er.setUpdatebyname(user.getUsername());
+                er.setUpdatetime(new Date());
+                dels.add(er);
+            }
+            //删除
+            enterpriseResourceService.updateBatchById(dels);
+        }
+        //2.新增
+        List<EnterpriseResource> adds = null;
+        if (enterpriseWarehouseVo.getFile() !=null && enterpriseWarehouseVo.getFile().length > 0) {
+            adds = new ArrayList<>();
+            Date now = new Date();
+            for (MultipartFile file : enterpriseWarehouseVo.getFile()) {
+                String name = UploadUtil.uploadFile(file, Properties.enterprisePath);
+                EnterpriseResource er = new EnterpriseResource();
+                er.setTabletype(Constants.WAREHOUSE);
+                er.setFilename(file.getOriginalFilename());
+                er.setUrl(Properties.enterprise + name);
+                er.setCreatetime(now);
+                er.setCreateby(user.getId());
+                er.setCreatebyname(user.getUsername());
+                er.setBelongid(enterpriseWarehouseVo.getId());
+                er.setValidflag(true);
+                adds.add(er);
+            }
+            //执行
+            enterpriseResourceService.saveBatch(adds);
+        }
+    }
+
+    /**
+    * @Description: 删除库房信息
+    * @date 2021/3/25 9:47
+    */
+    @Override
+    public void delEnterpriseWarehouse(Long id, UserInfo user) {
+        LambdaUpdateWrapper<EnterpriseWarehouse> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(EnterpriseWarehouse::getUpdatebyname, new Date())
+                .set(EnterpriseWarehouse::getUpdateby, user.getId())
+                .set(EnterpriseWarehouse::getUpdatebyname, user.getUsername())
+                .set(EnterpriseWarehouse::getValidflag, false)
+                .eq(EnterpriseWarehouse::getId, id);
+        this.update(updateWrapper);
+    }
+
+    /**
+    * @Description: 新增|修改的校验
+    * @date 2021/4/6 14:49
+    */
+    @Override
+    public void checkEnterpriseWarehouse(EnterpriseWarehouseVo enterpriseLicenseVo) {
+        if (StringUtils.isBlank(enterpriseLicenseVo.getBulidingnumber())) {
+            throw new BusinessException("栋号不能为空");
+        }
+
+        if (StringUtils.isBlank(enterpriseLicenseVo.getDangerlevel())) {
+            throw new BusinessException("危险等级不能为空");
+        }
+
+        if (enterpriseLicenseVo.getArea() == null) {
+            throw new BusinessException("面积不能为空");
+        }
+
+        if (enterpriseLicenseVo.getLimits() == null) {
+            throw new BusinessException("限制作业人数不能为空");
+        }
+
+        if (StringUtils.isBlank(enterpriseLicenseVo.getSafetyperson())) {
+            throw new BusinessException("安全责任人不能为空");
+        }
+
+        if (StringUtils.isBlank(enterpriseLicenseVo.getSafetypersonphone())) {
+            throw new BusinessException("安全责任人联系电话不能为空");
+        }
+
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/EntryDetailServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/EntryDetailServiceImpl.java
new file mode 100644
index 0000000..c3005cd
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/EntryDetailServiceImpl.java
@@ -0,0 +1,108 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.EntryDetailInfo;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Mapper.EntryDetailInfoMapper;
+import com.gk.firework.Service.EntryDetailService;
+import com.gk.firework.Service.ProductService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author : jingjy
+ * @date : 2021/3/24 13:48
+ */
+@Service("EntryDetailService")
+public class EntryDetailServiceImpl extends ServiceImpl<EntryDetailInfoMapper, EntryDetailInfo> implements EntryDetailService {
+
+    @Autowired
+    private EntryDetailInfoMapper entryDetailInfoMapper;
+    @Autowired
+    private ProductService productService;
+
+    /**
+     * @Description: 入库明细导出
+     * @date 2021/4/23 17:28
+     */
+    @Override
+    public List<Map> selectDetailExport(String code) {
+        return entryDetailInfoMapper.selectDetailExport(code);
+    }
+
+    @Override
+    public IPage selectEnterpriseTypeEntry(Page<Map> page, Map<String, Object> filter, UserInfo user) {
+
+        Map<String, Object> params = new HashMap<>();
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        params.put("province", filter.get("province"));
+        params.put("city", filter.get("city"));
+        params.put("district", filter.get("district"));
+        List<String> list = productService.selectTypes();
+        List<Map> res = entryDetailInfoMapper.selectEnterpriseTypeEntry(page, params, list);
+        Map totalRow = entryDetailInfoMapper.selectAllType(params, list);
+        ArrayList<Map> result = new ArrayList<>(res);
+        result.add(totalRow);
+        return page.setRecords(result);
+    }
+
+    @Override
+    public List<Map> selectExportEnterpriseTypeEntry(Map<String, Object> filter, UserInfo user) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        params.put("province", filter.get("province"));
+        params.put("city", filter.get("city"));
+        params.put("district", filter.get("district"));
+        List<String> list = productService.selectTypes();
+        List<Map> res = entryDetailInfoMapper.selectEnterpriseTypeEntry(params, list);
+        Map totalRow = entryDetailInfoMapper.selectAllType(params, list);
+        ArrayList<Map> result = new ArrayList<>(res);
+        result.add(totalRow);
+        return result;
+    }
+
+    @Override
+    public IPage selectCityTypeEntry(Page<Map> page, Map<String, Object> filter, UserInfo user) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("province", "新疆维吾尔自治区");
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        List<String> list = productService.selectTypes();
+        List<Map> res = entryDetailInfoMapper.selectCityTypeEntry(page,params,list);
+        Map totalRow = entryDetailInfoMapper.selectAllType(params, list);
+        ArrayList<Map> result = new ArrayList<>(res);
+        result.add(totalRow);
+        return page.setRecords(result);
+    }
+
+    @Override
+    public List<Map> selectExportCityTypeEntry(Map<String, Object> filter, UserInfo user) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("province", "新疆维吾尔自治区");
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        List<String> list = productService.selectTypes();
+        List<Map> res = entryDetailInfoMapper.selectCityTypeEntry(params,list);
+        Map totalRow = entryDetailInfoMapper.selectAllType(params, list);
+        ArrayList<Map> result = new ArrayList<>(res);
+        result.add(totalRow);
+        return result;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/EntryServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/EntryServiceImpl.java
new file mode 100644
index 0000000..396d408
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/EntryServiceImpl.java
@@ -0,0 +1,251 @@
+package com.gk.firework.Service.ServiceImpl;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.EntryDetailInfo;
+import com.gk.firework.Domain.EntryOrderInfo;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.SoldNoStockInfo;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Vo.EntryOrderInfoVo;
+import com.gk.firework.Domain.Vo.EntryUtils;
+import com.gk.firework.Domain.Vo.FireworkDeal;
+import com.gk.firework.Domain.Vo.ProductVo;
+import com.gk.firework.Mapper.EntryDetailInfoMapper;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Mapper.EntryOrderInfoMapper;
+import com.gk.firework.Service.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.List;
+
+import java.util.ArrayList;
+import java.util.Date;
+
+/**
+ * @author : jingjy
+ * @date : 2021/3/24 11:10
+ */
+@Service("EntryService")
+public class EntryServiceImpl extends ServiceImpl<EntryOrderInfoMapper,EntryOrderInfo> implements EntryService{
+    @Autowired
+    private ProductService productService;
+    @Autowired
+    private EntryService entryService;
+    @Autowired
+    private EntryDetailService entryDetailService;
+    @Autowired
+    private SoldNoStockService soldNoStockService;
+    @Autowired
+    private SaleOrderService orderService;
+
+    @Override
+    public void entryPatch(List<SoldNoStockInfo> soldNoStockInfos, UserInfo user, String auth) {
+        EntryOrderInfo orderInfo = generateEntryOrderInfo(EntryUtils.RK_ENTRY,user,new Date(),"",auth);
+        List<EntryDetailInfo>detailInfos = new ArrayList<>();
+        int i = 0;
+        for (SoldNoStockInfo soldNoStockInfo : soldNoStockInfos){
+            String dire = soldNoStockInfo.getDirectioncode();
+            ProductVo productVo = productService.selectVoByDirection(dire);
+            EntryDetailInfo detailInfo = new EntryDetailInfo(orderInfo.getCode(),dire,productVo.getItemCode(),
+                    productVo.getName(),productVo.getManufacturer(),new Date(),user.getCompanynumber());
+            //已销未入库信息只会存19位流向码信息
+            detailInfo.setNum(1);
+            detailInfos.add(detailInfo);
+            i++;
+
+            //更新soldNoStock信息
+            soldNoStockInfo.setHandler(user.getUsername());
+            soldNoStockInfo.setHandledat(new Date());
+            soldNoStockInfo.setEntryorder(orderInfo.getCode());
+            soldNoStockInfo.setFlag(SoldNoStockInfo.PROCESSED);
+        }
+        //插入入库单及入库明细单,更新已销未入库单,不更新库存
+        orderInfo.setNum(i);
+        entryService.save(orderInfo);
+        entryDetailService.saveBatch(detailInfos);
+        soldNoStockService.updateBatchById(soldNoStockInfos);
+
+    }
+
+    @Autowired
+    private EntryOrderInfoMapper entryOrderInfoMapper;
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private EntryDetailInfoMapper entryDetailInfoMapper;
+
+    /**
+    * @Description: 入库查询
+    * @date 2021/4/15 10:28
+    */
+    @Override
+    public IPage selectPage(Page<EntryOrderInfoVo> page, Map filter, UserInfo user) {
+
+        UserInfo userInfo = userService.getById(user.getId());
+
+        Map<String, Object> params = new HashMap<>();
+        //筛选条件
+        //可视权限
+        {
+            params.put("enterprisenumber", userInfo.getCompanynumber());
+            params.put("province", userInfo.getProvince());
+            params.put("city", userInfo.getCity());
+            params.put("district", userInfo.getArea());
+            params.put("street", userInfo.getTown());
+            params.put("committee", userInfo.getCommunity());
+        }
+        //基本查询条件
+        {
+            params.put("filterProvince", filter.get("province"));
+            params.put("filterCity", filter.get("city"));
+            params.put("filterDistrict", filter.get("district"));
+            params.put("filterStreet", filter.get("street"));
+            params.put("filterCommittee", filter.get("committee"));
+
+            params.put("transportcert", filter.get("transportcert"));
+            params.put("starttime", filter.get("starttime"));
+            params.put("endtime", filter.get("endtime"));
+            params.put("enterprisename", filter.get("enterprisename"));
+            params.put("safetysupervision", filter.get("safetysupervision"));
+            params.put("type", filter.get("type"));
+            params.put("code", filter.get("code"));
+        }
+
+        List<EntryOrderInfoVo> list = entryOrderInfoMapper.selectPages(page,params);
+        return page.setRecords(list);
+    }
+
+    /**
+    * @Description:  根据{入库单code}查询入库明细
+    * @date 2021/4/15 11:12
+    */
+    @Override
+    public Page selectDetailPage(Page<Map> page, Map filter) {
+        String code = (String) filter.get("code");
+        if (StringUtils.isBlank(code)) {
+            throw new BusinessException("入库单号不能为空");
+        }
+
+        Map<String, Object> params = new HashMap<>();
+        params.put("code", code);
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        List<Map> list = entryDetailInfoMapper.selectDetailPage(page, params);
+        return page.setRecords(list);
+    }
+
+    @Override
+    public BigDecimal getEntryNumByCondition(Map<String, Object> condition) {
+        return entryDetailInfoMapper.getEntryNumByCondition(condition);
+    }
+
+    @Override
+    public BigDecimal getReturnNumByCondition(Map<String, Object> condition) {
+        return entryDetailInfoMapper.getReturnNumByCondition(condition);
+    }
+
+    @Override
+    public boolean isEntryExist(String datetime, UserInfo userInfo) {
+        EntryOrderInfo entryOrderInfo = entryOrderInfoMapper.selectEntryOrderByTimeAndUser(datetime,userInfo.getUsername());
+        return entryOrderInfo != null;
+    }
+
+    /**
+    * @Description: 入库导出
+    * @date 2021/4/19 17:13
+    */
+    @Override
+    public List<EntryOrderInfo> selectExportInBound(Map filter, UserInfo user) {
+
+        UserInfo userInfo = userService.getById(user.getId());
+
+        Map<String, Object> params = new HashMap<>();
+        //筛选条件
+        //可视权限
+        {
+            params.put("enterprisenumber", userInfo.getCompanynumber());
+            params.put("province", userInfo.getProvince());
+            params.put("city", userInfo.getCity());
+            params.put("district", userInfo.getArea());
+            params.put("street", userInfo.getTown());
+            params.put("committee", userInfo.getCommunity());
+        }
+        //基本查询条件
+        {
+            params.put("filterProvince", filter.get("province"));
+            params.put("filterCity", filter.get("city"));
+            params.put("filterDistrict", filter.get("district"));
+            params.put("filterStreet", filter.get("street"));
+            params.put("filterCommittee", filter.get("committee"));
+
+            params.put("transportcert", filter.get("transportcert"));
+            params.put("starttime", filter.get("starttime"));
+            params.put("endtime", filter.get("endtime"));
+            params.put("enterprisename", filter.get("enterprisename"));
+            params.put("type", filter.get("type"));
+        }
+
+        return entryOrderInfoMapper.selectPages(params);
+    }
+
+    @Override
+    public BigDecimal selectEnterpriseEntryNumber(String enterprisenumber, Object starttime, Object endtime) {
+        return entryOrderInfoMapper.selectEnterpriseEntryNumber(enterprisenumber,starttime,endtime);
+    }
+
+    @Override
+    public BigDecimal selectCityEntryNumber(String name, Object starttime, Object endtime) {
+        return entryOrderInfoMapper.selectCityEntryNumber(name,starttime,endtime);
+    }
+
+    @Override
+    public Boolean isTransportCertEntry(String code) {
+        if (StringUtils.isBlank(code)){
+            return false;
+        }
+        List<EntryOrderInfo> entryOrderInfo = entryOrderInfoMapper.selectByCert(code);
+        return entryOrderInfo != null && entryOrderInfo.size() > 0;
+    }
+
+    @Override
+    public IPage selectStockPage(Page<EntryOrderInfoVo> page, Map<String, Object> filter, UserInfo user) {
+        Map<String, Object> params = new HashMap<>();
+        {
+            params.put("filterProvince", filter.get("province"));
+            params.put("filterCity", filter.get("city"));
+            params.put("filterDistrict", filter.get("district"));
+            params.put("filterStreet", filter.get("street"));
+            params.put("filterCommittee", filter.get("committee"));
+
+            params.put("transportcert", filter.get("transportcert"));
+            params.put("starttime", filter.get("starttime"));
+            params.put("endtime", filter.get("endtime"));
+            params.put("enterprisename", filter.get("enterprisename"));
+            params.put("type", filter.get("type"));
+        }
+        List<EntryOrderInfoVo> list = entryOrderInfoMapper.selectPages(page,params);
+        return page.setRecords(list);
+    }
+
+    @Override
+    public EntryOrderInfo generateEntryOrderInfo(String type, UserInfo userInfo, Date date, String transport, String auth){
+        EntryOrderInfo orderInfo = new EntryOrderInfo();
+        orderInfo.setCode(orderService.generateOrderCode(FireworkDeal.MODULE_ENTRY,type,new Date(),userInfo.getId()));
+        orderInfo.setType(Byte.parseByte(type));
+        orderInfo.setCreateddate(new Date());
+        orderInfo.setCreatedby(userInfo.getUsername());
+        orderInfo.setEntrydate(date);
+        orderInfo.setTransportcert(transport);
+        orderInfo.setUnit(userInfo.getCompany());
+        orderInfo.setCompanynumber(userInfo.getCompanynumber());
+        return orderInfo;
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/ExcelExportServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/ExcelExportServiceImpl.java
new file mode 100644
index 0000000..bf1d5ac
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/ExcelExportServiceImpl.java
@@ -0,0 +1,1767 @@
+package com.gk.firework.Service.ServiceImpl;
+import com.gk.firework.Domain.BO.SaleOrderDetailInfoBO;
+import com.google.common.collect.Lists;
+import java.util.Date;
+
+import com.alibaba.fastjson.JSONObject;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.Enum.Element;
+import com.gk.firework.Domain.Enum.EnterpriseSafetySupervision;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.Utils.*;
+import com.gk.firework.Domain.Vo.DirectionDetail;
+import com.gk.firework.Domain.Vo.FireworkDeal;
+import com.gk.firework.Domain.Vo.Product2JsonVo;
+import com.gk.firework.Domain.Vo.ProductVo;
+import com.gk.firework.Service.*;
+import org.apache.log4j.LogManager;
+import org.apache.log4j.Logger;
+import org.apache.poi.hssf.usermodel.*;
+import org.apache.poi.ss.usermodel.FormulaEvaluator;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.xssf.usermodel.*;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.management.relation.Role;
+import java.io.IOException;
+import java.io.InputStream;
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.regex.Pattern;
+
+@Service("ExcelExportService")
+public class ExcelExportServiceImpl implements ExcelExportService {
+    private Logger logger = LogManager.getLogger(getClass());
+
+    String[] districttitle = {"code", "name", "parentcode", "type"};
+
+    String[] selfCheckTitle = {"检查类型", "检查内容", "参考判断", "排序", "备注"};
+
+    String[] enterpriseTitle = {"企业名称", "单位编号", "安全监管分类", "省", "市", "区", "密码"};
+
+    String[] feedTitle = {"反馈内容", "发现时间"};
+
+    String[] userTitle = {"用户名", "密码", "单位", "省", "市", "区", "街道", "社区", "角色", "办公电话", "手机号", "邮箱", "部门", "职务"};
+
+    String[] userCodeTitle = {"单位", "统一社会信用代码"};
+
+    String[] productTitle = {"产品名称", "产品编号", "产品数量"};
+
+    String[] contractProductTitle = {"产品名称", "产品编号", "产品数量", "单箱进价"};
+
+    String[] productPriceTitle = {"产品名称", "流向码", "售价", "生产厂家", "规格", "含药量", "大类", "小类", "产品级别", "箱含量", "生产日期"};
+
+    String[] returnTags = {"电子标签号", "产品名称", "生产厂家", "总装药量", "箱含量", "产品类型", "产品级别", "创建时间", "包装标识码", "进价"};
+
+    String[] productDataTitle = {"流向码", "产品名称", "产品大类", "产品小类", "产品级别", "生产厂家", "规格", "含药量", "箱含量", "包装方式", "生产日期"};
+
+    String[] companyCodeTitle = {"单位名称", "单位代码"};
+
+    String[] saleProductTitle = {"包装标识码"};
+
+    String[] saleOrderTitle = {"零售单位名称","购买人身份证号","购买时间","购买数量"};
+
+    //正整数
+    String pattern = "^[0-9]*[1-9][0-9]*$";
+
+    Pattern pattern2 = Pattern.compile("^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$");
+
+    @Autowired
+    private DistrictService districtService;
+    @Autowired
+    private SelfCheckService selfCheckService;
+    @Autowired
+    private EnterpriseService enterpriseService;
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private UserRolesService userRolesService;
+    @Autowired
+    private RoleService roleService;
+    @Autowired
+    private EnterpriseFeedService enterpriseFeedService;
+    @Autowired
+    private ProductService productService;
+    @Autowired
+    private ProductPriceService productPriceService;
+    @Autowired
+    private ProductCategoryService productCategoryService;
+    @Autowired
+    private SaleProductService saleProductService;
+    @Autowired
+    private CustomerService customerService;
+    @Autowired
+    private SaleOrderService saleOrderService;
+    @Autowired
+    private ProductLocusService productLocusService;
+
+    @Override
+    public BooleanReason importDistrictExcel(InputStream in, String operator, Boolean isExcel2007) {
+        BooleanReason blret = new BooleanReason();
+        List<DistrictInfo> districtInfoList = new ArrayList<>();
+        String retmsg = "";
+        blret.setValue(false);
+        try {
+            Workbook workbook = null;
+            if (isExcel2007) {
+                workbook = new XSSFWorkbook(in);
+            } else {
+                workbook = new HSSFWorkbook(in);
+            }
+
+            FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
+            Sheet sheet = workbook.getSheetAt(0);
+            if (sheet == null) {
+                blret.addReason("excel 第1页不能为空");
+                return blret;
+            }
+            Row row = sheet.getRow(0);
+            // 标题总列数
+            int colNum = row.getPhysicalNumberOfCells();
+            String[] title = new String[colNum];
+
+            if (colNum != districttitle.length) {
+                blret.addReason("上传文件的列的个数错误");
+                return blret;
+            }
+
+            for (int i = 0; i < colNum; i++) {
+                title[i] = row.getCell(i).getStringCellValue();
+                if (StringUtils.isNotBlank(title[i])) {
+                    title[i] = title[i].trim();
+                }
+                if (!title[i].equals((districttitle[i]))) {
+                    blret.addReason("上传文件的第" + (i + 1) + "列的标题为" + title[i] + "不为" + districttitle[i]);
+                    return blret;
+                }
+            }
+
+            for (int irow = 1; irow <= sheet.getLastRowNum(); irow++) {
+                int realrow = irow + 1;
+                DistrictInfo districtInfo = new DistrictInfo();
+                Object value = null;
+                row = sheet.getRow(irow);
+
+                value = ExcelProperty.getCellValue(row.getCell(0), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    retmsg = retmsg + "导入失败,第" + realrow + "行,编码不能为空.<br/>";
+                    continue;
+                } else {
+                    districtInfo.setCode(value.toString().trim());
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(1), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    retmsg = retmsg + "导入失败,第" + realrow + "行,名称不能为空.<br/>";
+                    continue;
+                } else {
+                    districtInfo.setName(value.toString().trim());
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(2), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    retmsg = retmsg + "导入失败,第" + realrow + "行,父编码不能为空.<br/>";
+                    continue;
+                } else {
+                    districtInfo.setParentcode(value.toString().trim());
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(3), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    retmsg = retmsg + "导入失败,第" + realrow + "行,类型不能为空.<br/>";
+                    continue;
+                } else {
+                    districtInfo.setType(Byte.valueOf(value.toString()));
+                }
+
+                districtInfoList.add(districtInfo);
+            }
+
+            for (DistrictInfo districtInfo : districtInfoList) {
+                districtService.save(districtInfo);
+            }
+
+            if (StringUtils.isNotBlank(retmsg)) {
+                retmsg = retmsg + "导入成功" + districtInfoList.size() + "个," + "导入失败" + (sheet.getLastRowNum() - districtInfoList.size()) + "个。";
+                blret.addReason(retmsg);
+                return blret;
+            }
+        } catch (IOException e) {
+            logger.error(e.getLocalizedMessage());
+            blret.addReason("导入错误");
+            return blret;
+        }
+
+        blret.setValue(true);
+        return blret;
+    }
+
+    @Override
+    public BooleanReason imporSelfCheckExcel(InputStream in, String username, Boolean isExcel2007) {
+        BooleanReason blret = new BooleanReason();
+        List<SelfCheckInfo> selfCheckInfoList = new ArrayList<>();
+        String retmsg = "";
+        blret.setValue(false);
+        try {
+            Workbook workbook = null;
+            if (isExcel2007) {
+                workbook = new XSSFWorkbook(in);
+            } else {
+                workbook = new HSSFWorkbook(in);
+            }
+
+            FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
+            Sheet sheet = workbook.getSheetAt(0);
+            if (sheet == null) {
+                blret.addReason("excel 第1页不能为空");
+                return blret;
+            }
+            Row row = sheet.getRow(0);
+            // 标题总列数
+            int colNum = row.getPhysicalNumberOfCells();
+            String[] title = new String[colNum];
+
+            if (colNum != selfCheckTitle.length) {
+                blret.addReason("上传文件的列的个数错误");
+                return blret;
+            }
+
+            for (int i = 0; i < colNum; i++) {
+                title[i] = row.getCell(i).getStringCellValue();
+                if (StringUtils.isNotBlank(title[i])) {
+                    title[i] = title[i].trim();
+                }
+                if (!title[i].equals((selfCheckTitle[i]))) {
+                    blret.addReason("上传文件的第" + (i + 1) + "列的标题为" + title[i] + "不为" + selfCheckTitle[i]);
+                    return blret;
+                }
+            }
+
+            for (int irow = 1; irow <= sheet.getLastRowNum(); irow++) {
+                int realrow = irow + 1;
+                SelfCheckInfo selfCheckInfo = new SelfCheckInfo();
+                Object value = null;
+                row = sheet.getRow(irow);
+
+                value = ExcelProperty.getCellValue(row.getCell(0), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    retmsg = retmsg + "导入失败,第" + realrow + "行,检查类型不能为空.<br/>";
+                    continue;
+                } else {
+                    selfCheckInfo.setType(value.toString().trim());
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(1), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    retmsg = retmsg + "导入失败,第" + realrow + "行,检查内容不能为空.<br/>";
+                    continue;
+                } else {
+                    selfCheckInfo.setContent(value.toString().trim());
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(2), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    retmsg = retmsg + "导入失败,第" + realrow + "行,参考判断不能为空.<br/>";
+                    continue;
+                } else {
+                    selfCheckInfo.setStandard(value.toString().trim());
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(3), evaluator);
+                if (null != value && StringUtils.isNotBlank(value.toString())) {
+                    try {
+                        selfCheckInfo.setSort(Integer.parseInt(value.toString().trim()));
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                }
+                selfCheckInfo.setCreatedby(username);
+                selfCheckInfo.setModifiedby(username);
+                selfCheckInfo.setCreateddate(new Date());
+                selfCheckInfo.setModifieddate(new Date());
+                selfCheckInfo.setIsdel((byte) 0);
+                selfCheckInfoList.add(selfCheckInfo);
+            }
+            selfCheckService.saveBatch(selfCheckInfoList);
+
+            if (StringUtils.isNotBlank(retmsg)) {
+                retmsg = retmsg + "导入成功" + selfCheckInfoList.size() + "个," + "导入失败" + (sheet.getLastRowNum() - selfCheckInfoList.size()) + "个。";
+                blret.addReason(retmsg);
+                return blret;
+            }
+        } catch (IOException e) {
+            logger.error(e.getLocalizedMessage());
+            blret.addReason("导入错误");
+            return blret;
+        }
+
+        blret.setValue(true);
+        return blret;
+    }
+
+    @Override
+    public BooleanReason importEnterpriseExcel(InputStream in, UserInfo userInfo, Boolean isExcel2007) {
+        BooleanReason blret = new BooleanReason();
+        List<Enterprise> enterpriseList = new ArrayList<>();
+        Date now = new Date();
+
+        String retmsg = "";
+        blret.setValue(false);
+        try {
+            Workbook workbook = null;
+            if (isExcel2007) {
+                workbook = new XSSFWorkbook(in);
+            } else {
+                workbook = new HSSFWorkbook(in);
+            }
+
+            FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
+            Sheet sheet = workbook.getSheetAt(0);
+            if (sheet == null) {
+                blret.addReason("excel 第1页不能为空");
+                return blret;
+            }
+            Row row = sheet.getRow(0);
+            // 标题总列数
+            int colNum = row.getPhysicalNumberOfCells();
+            String[] title = new String[colNum];
+
+            if (colNum != enterpriseTitle.length) {
+                blret.addReason("上传文件的列的个数错误");
+                return blret;
+            }
+
+            for (int i = 0; i < colNum; i++) {
+                title[i] = row.getCell(i).getStringCellValue();
+                if (StringUtils.isNotBlank(title[i])) {
+                    title[i] = title[i].trim();
+                }
+                if (!title[i].equals((enterpriseTitle[i]))) {
+                    blret.addReason("上传文件的第" + (i + 1) + "列的标题为" + title[i] + "不为" + selfCheckTitle[i]);
+                    return blret;
+                }
+            }
+
+            for (int irow = 1; irow <= sheet.getLastRowNum(); irow++) {
+                int realrow = irow + 1;
+                Enterprise enterprise = new Enterprise();
+                Object value = null;
+                row = sheet.getRow(irow);
+
+                //企业名称
+                value = ExcelProperty.getCellValue(row.getCell(0), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    retmsg = retmsg + "导入失败,第" + realrow + "行,企业名称不能为空.<br/>";
+                    continue;
+                } else if (enterpriseService.isDuplicateEnterpriseName(value.toString().trim(), null)) {
+                    retmsg = retmsg + "导入失败,第" + realrow + "行,企业名称重复.<br/>";
+                    continue;
+                } else {
+                    enterprise.setEnterprisename(value.toString().trim());
+                }
+
+                //单位编号
+                value = ExcelProperty.getCellValue(row.getCell(1), evaluator);
+
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    retmsg = retmsg + "导入失败,第" + realrow + "行,单位编号不能为空.<br/>";
+                    continue;
+                } else if (enterpriseService.isDuplicateNumber(value.toString().trim(), null)) {
+                    retmsg = retmsg + "导入失败,第" + realrow + "行,单位编号重复.<br/>";
+                    continue;
+                } else {
+                    enterprise.setEnterprisenumber(value.toString().trim());
+                }
+
+                //安全监管分类
+                //判断监管分类的类型是否能在数据字典找到
+                value = ExcelProperty.getCellValue(row.getCell(2), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    retmsg = retmsg + "导入失败,第" + realrow + "行,安全监管分类不能为空.<br/>";
+                    continue;
+                } else if (!EnterpriseSafetySupervision.isInclude(value.toString())) {
+                    retmsg = retmsg + "导入失败,第" + realrow + "行,安全监管分类输入错误.<br/>";
+                    continue;
+                } else {
+                    enterprise.setSafetysupervision(value.toString().trim());
+                }
+
+                //省
+                value = ExcelProperty.getCellValue(row.getCell(3), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    retmsg = retmsg + "导入失败,第" + realrow + "行,省份不能为空.<br/>";
+                    continue;
+                } else {
+                    enterprise.setProvince(value.toString().trim());
+                }
+
+                //市
+                value = ExcelProperty.getCellValue(row.getCell(4), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    retmsg = retmsg + "导入失败,第" + realrow + "行,市不能为空.<br/>";
+                    continue;
+                } else {
+                    enterprise.setCity(value.toString().trim());
+                }
+
+                //区
+                value = ExcelProperty.getCellValue(row.getCell(5), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    retmsg = retmsg + "导入失败,第" + realrow + "行,区不能为空.<br/>";
+                    continue;
+                } else {
+                    enterprise.setDistrict(value.toString().trim());
+                }
+
+
+                //密码
+                String PW_PATTERN = "(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[~!@#$%^&*_.]).{8,}";
+                value = ExcelProperty.getCellValue(row.getCell(6), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    retmsg = retmsg + "导入失败,第" + realrow + "行,参考判断不能为空.<br/>";
+                    continue;
+                } else if (!value.toString().matches(PW_PATTERN)) {
+                    retmsg = retmsg + "导入失败,第" + realrow + "行,密码必须8位以上,并且包含大小写字母、数字、特殊符号三种以上.<br/>";
+                    continue;
+                } else {
+                    enterprise.setPassword(Base64Encrypt.encode(value.toString().getBytes()));
+                }
+
+                //计算安全监管分类个数
+                {
+                    int i = enterpriseService.countBySafetySupervision(enterprise.getSafetysupervision());
+                    enterprise.setDivideflag((byte) (DivideFlagUtil.enterpriseDivideFlagGenerate(i)));
+                }
+
+                enterprise.setInfocreatebyname(userInfo.getUsername());
+                enterprise.setInfocreateby(userInfo.getId());
+                enterprise.setInfocreatetime(now);
+                enterprise.setInfoupdatetime(now);
+                enterprise.setValidflag(true);
+
+                String randomStr = Element.random(Element.class).getValue().toString() + Element.random(Element.class).getValue().toString();
+                while (enterpriseService.isDuplicate2BitCode(randomStr)) {
+                    randomStr = Element.random(Element.class).getValue().toString() + Element.random(Element.class).getValue().toString();
+                }
+                enterprise.setTwobitcode(randomStr);
+                enterpriseService.save(enterprise);
+                enterpriseList.add(enterprise);
+                //保存用户
+                UserInfo user = new UserInfo();
+                user.setIsdel((byte) 0);
+                user.setProvince(enterprise.getProvince());
+                user.setCity(enterprise.getCity());
+                user.setArea(enterprise.getDistrict());
+                user.setUsername(enterprise.getEnterprisename());
+                user.setCompany(enterprise.getEnterprisename());
+                user.setIssale((byte) 0);
+                //普通用户
+                user.setType(3);
+                user.setCreatedby(user.getUsername());
+                user.setCompanyid(enterprise.getId());
+                user.setCreateddate(new Date());
+                //设置密码
+                user.setPassword(enterprise.getPassword());
+                user.setCompanynumber(enterprise.getEnterprisenumber());
+                //执行
+                userService.save(user);
+
+                //如果有企业角色设置用户角色为企业
+                UserRolesInfo uri = new UserRolesInfo();
+                uri.setUserid(user.getId());
+                if (enterprise.getSafetysupervision().equals(EnterpriseSafetySupervision.PRODUCE.getMsg())) {
+                    uri.setRoleid((long) 3);
+                } else {
+                    uri.setRoleid((long) 2);
+                }
+                userRolesService.save(uri);
+                //终端机
+                user.setId(null);
+                user.setUsername(enterprise.getEnterprisenumber());
+                user.setIssale((byte) 1);
+                user.setStatus((byte) 1);
+/*                Calendar cal = Calendar.getInstance();
+                cal.setTime(new Date());
+                cal.add(Calendar.DATE, +365);
+                user.setExpiredate(cal.getTime());*/
+                userService.save(user);
+            }
+
+
+            if (StringUtils.isNotBlank(retmsg)) {
+                retmsg = retmsg + "导入成功" + enterpriseList.size() + "个," + "导入失败" + (sheet.getLastRowNum() - enterpriseList.size()) + "个。";
+                blret.addReason(retmsg);
+                return blret;
+            }
+        } catch (IOException e) {
+            logger.error(e.getLocalizedMessage());
+            blret.addReason("导入错误");
+            return blret;
+        }
+
+        blret.setValue(true);
+        return blret;
+    }
+
+    @Override
+    public BooleanReason importUserExcel(InputStream in, String username, Boolean isExcel2007) {
+        BooleanReason blret = new BooleanReason();
+        List<UserInfo> userInfoList = new ArrayList<>();
+        String retmsg = "";
+        blret.setValue(false);
+        try {
+            Workbook workbook = null;
+            if (isExcel2007) {
+                workbook = new XSSFWorkbook(in);
+            } else {
+                workbook = new HSSFWorkbook(in);
+            }
+
+            FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
+            Sheet sheet = workbook.getSheetAt(0);
+            if (sheet == null) {
+                blret.addReason("excel 第1页不能为空");
+                return blret;
+            }
+            Row row = sheet.getRow(0);
+            // 标题总列数
+            int colNum = row.getPhysicalNumberOfCells();
+            String[] title = new String[colNum];
+
+            if (colNum != userTitle.length) {
+                blret.addReason("上传文件的列的个数错误");
+                return blret;
+            }
+
+            for (int i = 0; i < colNum; i++) {
+                title[i] = row.getCell(i).getStringCellValue();
+                if (StringUtils.isNotBlank(title[i])) {
+                    title[i] = title[i].trim();
+                }
+                if (!title[i].equals((userTitle[i]))) {
+                    blret.addReason("上传文件的第" + (i + 1) + "列的标题为" + title[i] + "不为" + userTitle[i]);
+                    return blret;
+                }
+            }
+
+            for (int irow = 1; irow <= sheet.getLastRowNum(); irow++) {
+                int realrow = irow + 1;
+                UserInfo userInfo = new UserInfo();
+                Object value = null;
+                row = sheet.getRow(irow);
+
+                value = ExcelProperty.getCellValue(row.getCell(0), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    retmsg = retmsg + "导入失败,第" + realrow + "行,用户名不能为空.<br/>";
+                    continue;
+                } else {
+                    userInfo.setUsername(value.toString().trim());
+                    UserInfo userInfoExist = userService.selectByUser(userInfo.getUsername());
+                    if (null != userInfoExist) {
+                        retmsg = retmsg + "导入失败,第" + realrow + "行,用户名重复.<br/>";
+                        continue;
+                    }
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(1), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    retmsg = retmsg + "导入失败,第" + realrow + "行,密码不能为空.<br/>";
+                    continue;
+                } else {
+                    String PW_PATTERN = "(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[~!@#$%^&*_.]).{8,}";
+                    if (!value.toString().trim().matches(PW_PATTERN)) {
+                        retmsg = retmsg + "导入失败,第" + realrow + "行,密码必须8位以上,并且包含大小写字母、数字、特殊符号三种以上.<br/>";
+                        continue;
+                    } else {
+                        userInfo.setPassword(Base64Encrypt.encode(value.toString().trim().getBytes()));
+                    }
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(2), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    retmsg = retmsg + "导入失败,第" + realrow + "行,单位不能为空.<br/>";
+                    continue;
+                } else {
+                    userInfo.setCompany(value.toString().trim());
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(3), evaluator);
+                if (null != value && StringUtils.isNotBlank(value.toString())) {
+                    userInfo.setProvince(value.toString().trim());
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(4), evaluator);
+                if (null != value && StringUtils.isNotBlank(value.toString())) {
+                    userInfo.setCity(value.toString().trim());
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(5), evaluator);
+                if (null != value && StringUtils.isNotBlank(value.toString())) {
+                    userInfo.setArea(value.toString().trim());
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(6), evaluator);
+                if (null != value && StringUtils.isNotBlank(value.toString())) {
+                    userInfo.setTown(value.toString().trim());
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(7), evaluator);
+                if (null != value && StringUtils.isNotBlank(value.toString())) {
+                    userInfo.setCommunity(value.toString().trim());
+                }
+
+                Long roleId = null;
+                value = ExcelProperty.getCellValue(row.getCell(8), evaluator);
+                if (null != value && StringUtils.isNotBlank(value.toString())) {
+                    //角色
+                    RoleInfo roleInfo = new RoleInfo();
+                    roleInfo.setName(value.toString().trim());
+                    RoleInfo roleInfoExist = roleService.selectRoleByName(roleInfo);
+                    if (roleInfoExist == null) {
+                        retmsg = retmsg + "导入失败,第" + realrow + "行,角色不存在.<br/>";
+                        continue;
+                    } else {
+                        roleId = roleInfoExist.getId();
+                    }
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(9), evaluator);
+                if (null != value && StringUtils.isNotBlank(value.toString())) {
+                    userInfo.setPhone(value.toString().trim());
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(10), evaluator);
+                if (null != value && StringUtils.isNotBlank(value.toString())) {
+                    if (value.toString().length() == 11) {
+                        userInfo.setMobile(value.toString().trim());
+                    } else {
+                        retmsg = retmsg + "导入失败,第" + realrow + "行,手机号必须为11位数.<br/>";
+                        continue;
+                    }
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(11), evaluator);
+                if (null != value && StringUtils.isNotBlank(value.toString())) {
+                    userInfo.setEmail(value.toString().trim());
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(11), evaluator);
+                if (null != value && StringUtils.isNotBlank(value.toString())) {
+                    userInfo.setDepartment(value.toString().trim());
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(11), evaluator);
+                if (null != value && StringUtils.isNotBlank(value.toString())) {
+                    userInfo.setJob(value.toString().trim());
+                }
+                userInfo.setIsdel((byte) 0);
+                userInfo.setIssale((byte) 0);
+                userInfo.setCreatedby(username);
+                userInfo.setCreateddate(new Date());
+                userInfo.setLastmodifiedby(username);
+                userInfo.setLastmodifieddate(new Date());
+
+                userService.save(userInfo);
+                if (roleId != null) {
+                    UserRolesInfo userRolesInfo = new UserRolesInfo();
+                    userRolesInfo.setUserid(userInfo.getId());
+                    userRolesInfo.setRoleid(roleId);
+                    userRolesService.save(userRolesInfo);
+                }
+                userInfoList.add(userInfo);
+            }
+
+            if (StringUtils.isNotBlank(retmsg)) {
+                retmsg = retmsg + "导入成功" + userInfoList.size() + "个," + "导入失败" + (sheet.getLastRowNum() - userInfoList.size()) + "个。";
+                blret.addReason(retmsg);
+                return blret;
+            }
+        } catch (IOException e) {
+            logger.error(e.getLocalizedMessage());
+            blret.addReason("导入错误");
+            return blret;
+        }
+
+        blret.setValue(true);
+        return blret;
+    }
+
+    @Override
+    public List<Product2JsonVo> parsingProduct(InputStream inputStream, UserInfo userInfo, boolean isExcel2007, String enterprisenumber) {
+        List<Product2JsonVo> productJsons = new ArrayList<>();
+        try {
+            Workbook workbook = null;
+            if (isExcel2007) {
+                workbook = new XSSFWorkbook(inputStream);
+            } else {
+                workbook = new HSSFWorkbook(inputStream);
+            }
+
+            FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
+            Sheet sheet = workbook.getSheetAt(0);
+            if (sheet == null) {
+                throw new BusinessException("excel 第1页不能为空");
+            }
+            Row row = sheet.getRow(0);
+            // 标题总列数
+            int colNum = row.getPhysicalNumberOfCells();
+            String[] title = new String[colNum];
+
+            if (colNum != contractProductTitle.length) {
+                throw new BusinessException("上传文件的列的个数错误");
+            }
+
+            for (int i = 0; i < colNum; i++) {
+                title[i] = row.getCell(i).getStringCellValue();
+                if (StringUtils.isNotBlank(title[i])) {
+                    title[i] = title[i].trim();
+                }
+                if (!title[i].equals((contractProductTitle[i]))) {
+                    throw new BusinessException("上传文件的第" + (i + 1) + "列的标题为" + title[i] + "不为" + selfCheckTitle[i]);
+                }
+            }
+
+            for (int irow = 1; irow <= sheet.getLastRowNum(); irow++) {
+                int realrow = irow + 1;
+                Product2JsonVo productInfoJson = new Product2JsonVo();
+                Object value = null;
+                row = sheet.getRow(irow);
+                value = ExcelProperty.getCellValue(row.getCell(0), evaluator);
+                //产品名称
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    throw new BusinessException("导入失败,第" + realrow + "行," + contractProductTitle[0] + "不能为空.");
+                }
+
+
+                //产品编号
+                value = ExcelProperty.getCellValue(row.getCell(1), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    throw new BusinessException("导入失败,第" + realrow + "行," + contractProductTitle[1] + "不能为空.");
+                } else {
+                    String directionCode = value.toString().trim();
+                    //检查产品编号是否是企业内的产品
+                    int i = productService.countByEnterpriseNumberAndDirectionCode(enterprisenumber, directionCode);
+                    assert i <= 1;
+                    if (i < 1) {
+                        throw new BusinessException("导入失败,第" + realrow + "行," + "产品信息不为所在生产企业的产品.>");
+                    }
+                    ProductInfo productInfo = productService.selectByDirection(directionCode);
+                    if (productInfo.getIsOld() == 1) {
+                        throw new BusinessException("导入失败,第" + realrow + "行," + "产品信息为旧系统产品,已不允许签订合同使用.>");
+                    }
+                    productInfoJson.setId(productInfo.getId());
+                    productInfoJson.setName(productInfo.getName());
+                    //使用数据库内容的流向码,区分大小写
+                    productInfoJson.setDirectionCode(productInfo.getDirectionCode());
+                    productInfoJson.setManufacturer(productInfo.getManufacturer());
+                    productInfoJson.setSpecification(productInfo.getSpecification());
+                    productInfoJson.setExplosiveContent(productInfo.getExplosiveContent());
+                    productInfoJson.setType(productInfo.getType());
+                    productInfoJson.setSecondaryType(productInfo.getSecondaryType());
+                    productInfoJson.setLevel(productInfo.getLevel());
+                    //箱含量
+                    productInfoJson.setBoxNumber(productInfo.getBoxNumber());
+                    productInfoJson.setPacking(productInfo.getPacking());
+                }
+
+
+                value = ExcelProperty.getCellValue(row.getCell(2), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    throw new BusinessException("导入失败,第" + realrow + "行," + contractProductTitle[2] + "不能为空.");
+                } else if (!Pattern.matches(pattern, value.toString().trim())) {
+                    throw new BusinessException("导入失败,第" + realrow + "行," + contractProductTitle[2] + "不为正整数.");
+                } else {
+                    productInfoJson.setNum(Integer.valueOf(value.toString().trim()));
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(3), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    throw new BusinessException("导入失败,第" + realrow + "行," + contractProductTitle[3] + "不能为空.");
+                } else if (!pattern2.matcher(value.toString().trim()).matches()) {
+                    throw new BusinessException("导入失败,第" + realrow + "行," + contractProductTitle[3] + "不为金额.");
+                } else {
+                    productInfoJson.setPrice(new BigDecimal(value.toString().trim()));
+                }
+
+                productJsons.add(productInfoJson);
+
+            }
+
+        } catch (IOException ex) {
+            ex.printStackTrace();
+            throw new BusinessException("导入失败,请联系管理员");
+        }
+
+        return productJsons;
+
+    }
+
+
+    @Override
+    public List<Product2JsonVo> parsingProduct(InputStream inputStream, UserInfo userInfo, boolean isExcel2007) {
+        List<Product2JsonVo> productJsons = new ArrayList<>();
+        try {
+            Workbook workbook = null;
+            if (isExcel2007) {
+                workbook = new XSSFWorkbook(inputStream);
+            } else {
+                workbook = new HSSFWorkbook(inputStream);
+            }
+
+            FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
+            Sheet sheet = workbook.getSheetAt(0);
+            if (sheet == null) {
+                throw new BusinessException("excel 第1页不能为空");
+            }
+            Row row = sheet.getRow(0);
+            // 标题总列数
+            int colNum = row.getPhysicalNumberOfCells();
+            String[] title = new String[colNum];
+
+            if (colNum != productTitle.length) {
+                throw new BusinessException("上传文件的列的个数错误");
+            }
+
+            for (int i = 0; i < colNum; i++) {
+                title[i] = row.getCell(i).getStringCellValue();
+                if (StringUtils.isNotBlank(title[i])) {
+                    title[i] = title[i].trim();
+                }
+                if (!title[i].equals((productTitle[i]))) {
+                    throw new BusinessException("上传文件的第" + (i + 1) + "列的标题为" + title[i] + "不为" + selfCheckTitle[i]);
+                }
+            }
+
+            for (int irow = 1; irow <= sheet.getLastRowNum(); irow++) {
+                int realrow = irow + 1;
+                Product2JsonVo productInfoJson = new Product2JsonVo();
+                Object value = null;
+                row = sheet.getRow(irow);
+                value = ExcelProperty.getCellValue(row.getCell(0), evaluator);
+                //产品名称
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    throw new BusinessException("导入失败,第" + realrow + "行," + productTitle[0] + "不能为空.");
+                }
+
+                //产品编号
+                value = ExcelProperty.getCellValue(row.getCell(1), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    throw new BusinessException("导入失败,第" + realrow + "行," + productTitle[1] + "不能为空.");
+                } else {
+                    String directionCode = value.toString().trim();
+                    ProductInfo productInfo = productService.selectByDirection(directionCode);
+                    productInfoJson.setId(productInfo.getId());
+                    productInfoJson.setName(productInfo.getName());
+                    productInfoJson.setDirectionCode(directionCode);
+                    productInfoJson.setManufacturer(productInfo.getManufacturer());
+                    productInfoJson.setSpecification(productInfo.getSpecification());
+                    productInfoJson.setExplosiveContent(productInfo.getExplosiveContent());
+                    productInfoJson.setType(productInfo.getType());
+                    productInfoJson.setSecondaryType(productInfo.getSecondaryType());
+                    productInfoJson.setLevel(productInfo.getLevel());
+                    //箱含量
+                    productInfoJson.setBoxNumber(productInfo.getBoxNumber());
+                    productInfoJson.setPacking(productInfo.getPacking());
+                }
+                value = ExcelProperty.getCellValue(row.getCell(2), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    throw new BusinessException("导入失败,第" + realrow + "行," + productTitle[2] + "不能为空.");
+                } else if (!Pattern.matches(pattern, value.toString().trim())) {
+                    throw new BusinessException("导入失败,第" + realrow + "行," + productTitle[2] + "不为正整数.");
+                } else {
+                    productInfoJson.setNum(Integer.valueOf(value.toString().trim()));
+                }
+                productJsons.add(productInfoJson);
+
+            }
+
+        } catch (IOException ex) {
+            ex.printStackTrace();
+            throw new BusinessException("导入失败,请联系管理员");
+        }
+
+        return productJsons;
+
+    }
+
+    @Override
+    public BooleanReason imporEditPriceExcel(InputStream in, String companynumber, String username, Boolean isExcel2007) {
+        BooleanReason blret = new BooleanReason();
+        List<ProductPriceInfo> productPriceInfoList = new ArrayList<>();
+        String retmsg = "";
+        blret.setValue(false);
+        try {
+            Workbook workbook = null;
+            if (isExcel2007) {
+                workbook = new XSSFWorkbook(in);
+            } else {
+                workbook = new HSSFWorkbook(in);
+            }
+
+            FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
+            Sheet sheet = workbook.getSheetAt(0);
+            if (sheet == null) {
+                blret.addReason("excel 第1页不能为空");
+                return blret;
+            }
+            Row row = sheet.getRow(0);
+            // 标题总列数
+            int colNum = row.getPhysicalNumberOfCells();
+            String[] title = new String[colNum];
+
+            if (colNum != productPriceTitle.length) {
+                blret.addReason("上传文件的列的个数错误");
+                return blret;
+            }
+
+            for (int i = 0; i < colNum; i++) {
+                title[i] = row.getCell(i).getStringCellValue();
+                if (StringUtils.isNotBlank(title[i])) {
+                    title[i] = title[i].trim();
+                }
+                if (!title[i].equals((productPriceTitle[i]))) {
+                    blret.addReason("上传文件的第" + (i + 1) + "列的标题为" + title[i] + "不为" + productPriceTitle[i]);
+                    return blret;
+                }
+            }
+
+            for (int irow = 1; irow <= sheet.getLastRowNum(); irow++) {
+                int realrow = irow + 1;
+                ProductPriceInfo productPriceInfo = new ProductPriceInfo();
+                Object value = null;
+                row = sheet.getRow(irow);
+
+                value = ExcelProperty.getCellValue(row.getCell(1), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    retmsg = retmsg + "导入失败,第" + realrow + "行,流向码不能为空.<br/>";
+                    continue;
+                } else {
+                    productPriceInfo.setItemcode(value.toString().trim());
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(2), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    retmsg = retmsg + "导入失败,第" + realrow + "行,售价不能为空.<br/>";
+                    continue;
+                } else {
+                    try {
+                        productPriceInfo.setPrice(new BigDecimal(value.toString().trim()));
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                }
+
+                productPriceInfo.setCompanynumber(companynumber);
+                productPriceInfo.setUpdated(new Date());
+                productPriceInfo.setUpdator(username);
+                productPriceInfoList.add(productPriceInfo);
+            }
+            for (ProductPriceInfo productInfo : productPriceInfoList) {
+                ProductPriceInfo productPriceInfo = productPriceService.selectByCode(companynumber, productInfo.getItemcode());
+                if (productPriceInfo != null) {
+                    productPriceInfo.setPrice(productInfo.getPrice());
+                    productPriceInfo.setUpdated(new Date());
+                    productPriceInfo.setUpdator(username);
+                    productPriceService.updateById(productPriceInfo);
+                } else {
+                    ProductPriceInfo productPrice = new ProductPriceInfo();
+                    productPrice.setCompanynumber(companynumber);
+                    productPrice.setItemcode(productInfo.getItemcode());
+                    productPrice.setPrice(productInfo.getPrice());
+                    productPrice.setUpdated(new Date());
+                    productPrice.setUpdator(username);
+                    productPriceService.save(productPrice);
+                }
+            }
+
+            if (StringUtils.isNotBlank(retmsg)) {
+                retmsg = retmsg + "导入成功" + productPriceInfoList.size() + "个," + "导入失败" + (sheet.getLastRowNum() - productPriceInfoList.size()) + "个。";
+                blret.addReason(retmsg);
+                return blret;
+            }
+        } catch (IOException e) {
+            logger.error(e.getLocalizedMessage());
+            blret.addReason("导入错误");
+            return blret;
+        }
+
+        blret.setValue(true);
+        return blret;
+    }
+
+    /**
+     * @Description: 退货电子标签数据解析
+     * @date 2021/6/3 17:15
+     */
+    @Override
+    public List<String> parseProductCode(InputStream in, UserInfo userInfo, boolean isExcel2007) {
+
+
+        Workbook workbook = null;
+        try {
+
+            if (isExcel2007) {
+                workbook = new XSSFWorkbook(in);
+            } else {
+                workbook = new HSSFWorkbook(in);
+            }
+
+            FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
+            Sheet sheet = workbook.getSheetAt(0);
+            if (sheet == null) {
+                throw new BusinessException("excel 第1页不能为空");
+
+            }
+            Row row = sheet.getRow(0);
+            // 标题总列数
+            int colNum = row.getPhysicalNumberOfCells();
+            String[] title = new String[colNum];
+
+            if (colNum != returnTags.length) {
+                throw new BusinessException("上传文件的列的个数错误");
+            }
+
+            for (int i = 0; i < colNum; i++) {
+                title[i] = row.getCell(i).getStringCellValue();
+                if (StringUtils.isNotBlank(title[i])) {
+                    title[i] = title[i].trim();
+                }
+                if (!title[i].equals((returnTags[i]))) {
+                    throw new BusinessException("上传文件的第" + (i + 1) + "列的标题为" + title[i] + "不为" + selfCheckTitle[i]);
+                }
+            }
+
+            List<String> allReturnTags = new ArrayList<>();
+            for (int irow = 1; irow <= sheet.getLastRowNum(); irow++) {
+                int realrow = irow + 1;
+                EnterpriseFeed feed = new EnterpriseFeed();
+                Object value = null;
+                row = sheet.getRow(irow);
+                value = ExcelProperty.getCellValue(row.getCell(0), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    throw new BusinessException("导入失败,第" + realrow + "行,电子标签不能为空.<br/>");
+                } else {
+                    allReturnTags.add(value.toString().trim());
+                }
+            }
+
+            return allReturnTags;
+
+        } catch (IOException e) {
+            e.printStackTrace();
+            throw new BusinessException("导入失败,请联系管理员");
+        }
+
+
+    }
+
+
+    /**
+     * @Description: 旧系统导入产品信息
+     * @date 2021/6/30 12:29
+     */
+    @Override
+    public List<ProductInfo> parseProductFromOldSystem(InputStream in, UserInfo user, boolean isExcel2007) {
+
+
+        try {
+            Workbook workbook = null;
+            if (isExcel2007) workbook = new XSSFWorkbook(in);
+            if (!isExcel2007) workbook = new HSSFWorkbook(in);
+
+            FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
+            Sheet sheet = workbook.getSheetAt(0);
+            if (sheet == null)
+                throw new BusinessException("excel 第1页不能为空");
+
+            Row row = sheet.getRow(0);
+            // 标题总列数
+            int colNum = row.getPhysicalNumberOfCells();
+            String[] title = new String[colNum];
+
+            if (colNum != productDataTitle.length)
+                throw new BusinessException("上传文件的列的个数错误");
+
+            for (int i = 0; i < colNum; i++) {
+                title[i] = row.getCell(i).getStringCellValue();
+                if (StringUtils.isNotBlank(title[i])) {
+                    title[i] = title[i].trim();
+                }
+                if (!title[i].equals((productDataTitle[i]))) {
+                    throw new BusinessException("上传文件的第" + (i + 1) + "列的标题为" + title[i] + "不为" + productDataTitle[i]);
+                }
+            }
+            List<ProductInfo> result = new ArrayList<>();
+            ProductInfo product = null;
+            for (int irow = 1; irow <= sheet.getLastRowNum(); irow++) {
+                int realrow = irow + 1;
+                Object value = null;
+                product = new ProductInfo();
+                row = sheet.getRow(irow);
+                value = ExcelProperty.getCellValue(row.getCell(0), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[0] + "不能为空.");
+                } else {
+                    //流向码
+                    String productCode = value.toString().trim();
+                    product.setDirectionCode(productCode);
+                    if (productCode.length() != 10)
+                        throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[0] + "长度不为10.");
+                    //重复判断
+                    List<ProductInfo> productInfosExist = productService.selectByProduct(product);
+                    if (productInfosExist != null && productInfosExist.size() > 0)
+                        throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[0] + "已经存在.");
+
+
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(1), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[1] + "不能为空.");
+                } else {
+                    //产品名称
+                    String productName = value.toString().trim();
+                    product.setName(productName);
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(2), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[2] + "不能为空.");
+                } else {
+                    //产品大类
+                    String firstType = value.toString().trim();
+                    product.setType(firstType);
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(3), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[3] + "不能为空.");
+                } else {
+                    //产品小类
+                    String secondaryType = value.toString().trim();
+                    product.setSecondaryType(secondaryType);
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(4), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[4] + "不能为空.");
+                } else {
+                    //产品级别
+                    String level = value.toString().trim();
+                    product.setLevel(level);
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(5), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[5] + "不能为空.");
+                } else {
+                    //生产厂家
+                    String manufacturer = value.toString().trim();
+                    Enterprise enterprise = enterpriseService.selectEnterpriseByName(manufacturer);
+                    //查不到企业 或者 不为生产企业
+                    if (enterprise == null || !EnterpriseSafetySupervision.PRODUCE.getMsg().equals(enterprise.getSafetysupervision()))
+                        throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[5] + "查找不到企业名称或者不为生产企业.");
+                    product.setManufacturer(manufacturer);
+                    product.setCompanyNumber(enterprise.getEnterprisenumber());
+                }
+
+
+                value = ExcelProperty.getCellValue(row.getCell(6), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[6] + "不能为空.");
+                } else {
+                    //规格
+                    String specification = value.toString().trim();
+                    product.setSpecification(specification);
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(7), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[7] + "不能为空.");
+                } else {
+                    //含药量
+                    String explosiveContentStr = value.toString().trim();
+                    try {
+                        BigDecimal explosiveContent = new BigDecimal(explosiveContentStr);
+                        product.setExplosiveContent(explosiveContent);
+                        //正数
+                        if (explosiveContent.compareTo(BigDecimal.ZERO) < 1)
+                            throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[7] + "需要大于等于0.");
+                    } catch (NumberFormatException e) {
+                        e.printStackTrace();
+                        throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[7] + "不合法.");
+                    }
+
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(8), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[8] + "不能为空.");
+                } else {
+                    //箱含量
+                    String boxNumberStr = value.toString().trim();
+                    try {
+                        int boxNumber = Integer.parseInt(boxNumberStr);
+                        product.setBoxNumber(boxNumber);
+                        if (boxNumber < 1)
+                            throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[8] + "需要大于0.");
+                    } catch (NumberFormatException e) {
+                        e.printStackTrace();
+                        throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[8] + "不合法.");
+                    }
+
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(9), evaluator);
+                if (null != value && StringUtils.isBlank(value.toString())) {
+                    //包装方式
+                    String packing = value.toString().trim();
+                    product.setPacking(packing);
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(10), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[10] + "不能为空.");
+                } else {
+                    //生产日期
+                    try {
+                        String productDateStr = value.toString().trim();
+                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+                        Date productDate = sdf.parse(productDateStr);
+                        product.setProductDate(productDate);
+                    } catch (ParseException e) {
+                        e.printStackTrace();
+                        throw new BusinessException("导入失败,第" + realrow + "行," + productDataTitle[10] + "日期请填写2021-09-27的字符型.");
+                    }
+
+                }
+
+                //最后校验第一类型和第二类型和产品级别
+                boolean isExist = productCategoryService.selectOne(product.getType(), product.getSecondaryType(), product.getLevel());
+                if (!isExist)
+                    throw new BusinessException("导入失败,第" + realrow + "行,大小类、级别不合法.");
+                product.setCreatedBy(user.getUsername());
+                product.setModifiedBy(user.getUsername());
+                product.setCreatedDate(new Date());
+                product.setModifiedDate(new Date());
+                result.add(product);
+            }
+
+            return result;
+
+        } catch (IOException e) {
+            e.printStackTrace();
+            throw new BusinessException("导入失败,请联系管理员");
+        }
+
+
+    }
+
+    @Override
+    public BooleanReason importUserCodeExcel(InputStream in, String operator, Boolean isExcel2007) {
+        BooleanReason blret = new BooleanReason();
+        int z = 0;
+        String retmsg = "";
+        blret.setValue(false);
+        try {
+            Workbook workbook = null;
+            if (isExcel2007) {
+                workbook = new XSSFWorkbook(in);
+            } else {
+                workbook = new HSSFWorkbook(in);
+            }
+
+            FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
+            Sheet sheet = workbook.getSheetAt(0);
+            if (sheet == null) {
+                blret.addReason("excel 第1页不能为空");
+                return blret;
+            }
+            Row row = sheet.getRow(0);
+            // 标题总列数
+            int colNum = row.getPhysicalNumberOfCells();
+            String[] title = new String[colNum];
+
+            if (colNum != userCodeTitle.length) {
+                blret.addReason("上传文件的列的个数错误");
+                return blret;
+            }
+
+            for (int i = 0; i < colNum; i++) {
+                title[i] = row.getCell(i).getStringCellValue();
+                if (StringUtils.isNotBlank(title[i])) {
+                    title[i] = title[i].trim();
+                }
+                if (!title[i].equals((userCodeTitle[i]))) {
+                    blret.addReason("上传文件的第" + (i + 1) + "列的标题为" + title[i] + "不为" + userTitle[i]);
+                    return blret;
+                }
+            }
+
+            for (int irow = 1; irow <= sheet.getLastRowNum(); irow++) {
+                int realrow = irow + 1;
+                UserInfo userInfo = new UserInfo();
+                Object value = null;
+                row = sheet.getRow(irow);
+
+                String company = "";
+                value = ExcelProperty.getCellValue(row.getCell(0), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    retmsg = retmsg + "导入失败,第" + realrow + "行,单位名不能为空.<br/>";
+                    continue;
+                } else {
+                    company = value.toString().trim();
+                    List<UserInfo> userInfos = userService.selectByCompany(company);
+                    if (userInfos.size() < 1) {
+                        retmsg = retmsg + "导入失败,第" + realrow + "行,单位不存在.<br/>";
+                        continue;
+                    }
+
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(1), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    retmsg = retmsg + "导入失败,第" + realrow + "行,统一社会信用代码不能为空.<br/>";
+                } else {
+                    String code = value.toString().trim();
+                    userService.updateCodeByCompany(company, code);
+                    z++;
+
+                }
+
+
+            }
+
+            if (StringUtils.isNotBlank(retmsg)) {
+                retmsg = retmsg + "导入成功" + z + "个," + "导入失败" + (sheet.getLastRowNum() - z) + "个。";
+                blret.addReason(retmsg);
+                return blret;
+            }
+        } catch (IOException e) {
+            logger.error(e.getLocalizedMessage());
+            blret.addReason("导入错误");
+            return blret;
+        }
+
+        blret.setValue(true);
+        return blret;
+    }
+
+    @Override
+    public BooleanReason importDLCompanyCodeExcel(InputStream in, UserInfo userInfo, boolean isExcel2007) {
+        Date now = new Date();
+        List<Enterprise> updates = new ArrayList<>();
+        try {
+            Workbook workbook = null;
+            if (isExcel2007) {
+                workbook = new XSSFWorkbook(in);
+            } else {
+                workbook = new HSSFWorkbook(in);
+            }
+
+            FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
+            Sheet sheet = workbook.getSheetAt(0);
+            if (sheet == null) {
+                throw new BusinessException("excel 第1页不能为空");
+
+            }
+            Row row = sheet.getRow(0);
+            // 标题总列数
+            int colNum = row.getPhysicalNumberOfCells();
+            String[] title = new String[colNum];
+
+            if (colNum != companyCodeTitle.length) {
+                throw new BusinessException("上传文件的列的个数错误");
+            }
+
+            for (int i = 0; i < colNum; i++) {
+                title[i] = row.getCell(i).getStringCellValue();
+                if (StringUtils.isNotBlank(title[i])) {
+                    title[i] = title[i].trim();
+                }
+                if (!title[i].equals((companyCodeTitle[i]))) {
+                    throw new BusinessException("上传文件的第" + (i + 1) + "列的标题为" + title[i] + "不为" + companyCodeTitle[i]);
+                }
+            }
+            if (sheet.getLastRowNum() < 1)
+                throw new BusinessException("导入数据为空");
+
+            int kk = 0;
+            StringBuffer sb = new StringBuffer();
+            for (int irow = 1; irow <= sheet.getLastRowNum(); irow++) {
+                int realrow = irow + 1;
+                Object value = null;
+                Enterprise upOne = new Enterprise();
+                row = sheet.getRow(irow);
+                value = ExcelProperty.getCellValue(row.getCell(0), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    sb.append("导入失败,第").append(realrow).append("行,单位名称不能为空.<br/>");
+                    continue;
+                } else {
+                    String enterpriseName = value.toString().trim();
+                    Enterprise enterprise = enterpriseService.selectEnterpriseByName(enterpriseName);
+                    if (enterprise == null) {
+                        sb.append("找不到该企业:").append(enterpriseName).append(",第").append(realrow).append("行");
+                        continue;
+                    }
+                    upOne.setId(enterprise.getId());
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(1), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    sb.append("导入失败,第").append(realrow).append("行,单位代码不能为空.<br/>");
+                    continue;
+                } else {
+                    String code = value.toString().trim();
+                    upOne.setDlcompanycode(code);
+                    upOne.setInfoupdatebyname(userInfo.getUsername());
+                    upOne.setInfoupdateby(userInfo.getId());
+                    upOne.setInfoupdatetime(now);
+                }
+                updates.add(upOne);
+            }
+
+            for (Enterprise e : updates) {
+                enterpriseService.updateCompanyCode(e);
+            }
+            sb.append("成功" + updates.size() + "个,失败" + (sheet.getLastRowNum() - updates.size()) + "个");
+            BooleanReason booleanReason = new BooleanReason();
+            booleanReason.addReason(sb.toString());
+
+            return booleanReason;
+
+        } catch (IOException ex) {
+            ex.printStackTrace();
+            throw new BusinessException("导入失败,请联系管理员");
+        }
+
+    }
+
+
+    /**
+     * @Description: 企业反馈导入
+     * @date 2021/5/13 19:32
+     */
+    @Override
+    public void importFeedExcel(InputStream in, UserInfo user, Boolean isExcel2007, Long enterpriseId) {
+        List<EnterpriseFeed> feeds = new ArrayList<>();
+        Date now = new Date();
+        try {
+            Workbook workbook = null;
+            if (isExcel2007) {
+                workbook = new XSSFWorkbook(in);
+            } else {
+                workbook = new HSSFWorkbook(in);
+            }
+
+            FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
+            Sheet sheet = workbook.getSheetAt(0);
+            if (sheet == null) {
+                throw new BusinessException("excel 第1页不能为空");
+
+            }
+            Row row = sheet.getRow(0);
+            // 标题总列数
+            int colNum = row.getPhysicalNumberOfCells();
+            String[] title = new String[colNum];
+
+            if (colNum != feedTitle.length) {
+                throw new BusinessException("上传文件的列的个数错误");
+            }
+
+            for (int i = 0; i < colNum; i++) {
+                title[i] = row.getCell(i).getStringCellValue();
+                if (StringUtils.isNotBlank(title[i])) {
+                    title[i] = title[i].trim();
+                }
+                if (!title[i].equals((feedTitle[i]))) {
+                    throw new BusinessException("上传文件的第" + (i + 1) + "列的标题为" + title[i] + "不为" + selfCheckTitle[i]);
+                }
+            }
+
+            for (int irow = 1; irow <= sheet.getLastRowNum(); irow++) {
+                int realrow = irow + 1;
+                EnterpriseFeed feed = new EnterpriseFeed();
+                Object value = null;
+                row = sheet.getRow(irow);
+                value = ExcelProperty.getCellValue(row.getCell(0), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    throw new BusinessException("导入失败,第" + realrow + "行,反馈内容不能为空.<br/>");
+                } else {
+                    feed.setContent(value.toString().trim());
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(1), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    throw new BusinessException("导入失败,第" + realrow + "行,发现时间不能为空.<br/>");
+                } else if (!DateUtils.isLegalDate(value.toString().length(), value.toString(), "d/M/yy")) {
+                    throw new BusinessException("日期格式不正确,应如2020-10-10或者2020/10/10");
+                } else {
+                    java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("d/M/yy");
+                    Date date = sdf.parse(value.toString());
+                    feed.setFindtime(date);
+                }
+                feed.setEnterpriseid(enterpriseId);
+                feed.setCreateby(user.getId());
+                feed.setCreatetime(now);
+                feed.setCreatebyname(user.getUsername());
+                feed.setValidflag(true);
+                feeds.add(feed);
+            }
+
+            enterpriseFeedService.saveBatch(feeds);
+        } catch (ParseException ex) {
+            ex.printStackTrace();
+            throw new BusinessException("类型转换错误");
+        } catch (IOException ex) {
+            ex.printStackTrace();
+            throw new BusinessException("导入失败,请联系管理员");
+        }
+
+    }
+
+    @Override
+    public BooleanReason imporSaleProductExcel(InputStream in, String username, Boolean isExcel2007) {
+        BooleanReason blret = new BooleanReason();
+        int importSize = 0;
+        String retmsg = "";
+        blret.setValue(false);
+        try {
+            Workbook workbook = null;
+            if (isExcel2007) {
+                workbook = new XSSFWorkbook(in);
+            } else {
+                workbook = new HSSFWorkbook(in);
+            }
+
+            FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
+            Sheet sheet = workbook.getSheetAt(0);
+            if (sheet == null) {
+                blret.addReason("excel 第1页不能为空");
+                return blret;
+            }
+            Row row = sheet.getRow(0);
+            // 标题总列数
+            int colNum = row.getPhysicalNumberOfCells();
+            String[] title = new String[colNum];
+
+            if (colNum != saleProductTitle.length) {
+                blret.addReason("上传文件的列的个数错误");
+                return blret;
+            }
+
+            for (int i = 0; i < colNum; i++) {
+                title[i] = row.getCell(i).getStringCellValue();
+                if (StringUtils.isNotBlank(title[i])) {
+                    title[i] = title[i].trim();
+                }
+                if (!title[i].equals((saleProductTitle[i]))) {
+                    blret.addReason("上传文件的第" + (i + 1) + "列的标题为" + title[i] + "不为" + saleProductTitle[i]);
+                    return blret;
+                }
+            }
+
+            for (int irow = 1; irow <= sheet.getLastRowNum(); irow++) {
+                int realrow = irow + 1;
+                List<SaleProductInfo> saleProductInfoList = new ArrayList<>();
+                Object value = null;
+                row = sheet.getRow(irow);
+
+                value = ExcelProperty.getCellValue(row.getCell(0), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    retmsg = retmsg + "导入失败,第" + realrow + "行,流向码不能为空.<br/>";
+                    continue;
+                } else {
+                    String directionCodeStr = value.toString().trim();
+                    ProductInfo productInfo = productService.selectByDirection(directionCodeStr.substring(0, 10));
+                    if (FireworkDeal.is22Characters(directionCodeStr)){
+                        List<ProductVo>productVoList = new ArrayList<>();
+                        DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(directionCodeStr);
+                        ProductVo productVo = productService.selectVoByDirection(directionCodeStr);
+                        FireworkDeal.getProductVos(directionCodeStr,directionDetail,directionDetail,productVoList,productVo);
+                        for (ProductVo productVo1 : productVoList){
+                            SaleProductInfo saleProductInfo = new SaleProductInfo();
+                            saleProductInfo.setItemcode(productInfo.getDirectionCode());
+                            saleProductInfo.setDirectioncode(productVo1.getDirectionCode());
+                            saleProductInfo.setItemname(productVo1.getName());
+                            saleProductInfo.setSpecification(productVo1.getSpecification());
+                            saleProductInfo.setPrice(new BigDecimal(0));
+                            saleProductInfo.setCreatedby(username);
+                            saleProductInfo.setCreatedat(new Date());
+                            saleProductInfo.setIsuse((byte)0);
+                            saleProductInfoList.add(saleProductInfo);
+                        }
+                    }else {
+                        SaleProductInfo saleProductInfo = new SaleProductInfo();
+                        saleProductInfo.setItemcode(productInfo.getDirectionCode());
+                        saleProductInfo.setDirectioncode(directionCodeStr);
+                        saleProductInfo.setItemname(productInfo.getName());
+                        saleProductInfo.setSpecification(productInfo.getSpecification());
+                        saleProductInfo.setPrice(new BigDecimal(0));
+                        saleProductInfo.setCreatedby(username);
+                        saleProductInfo.setCreatedat(new Date());
+                        saleProductInfo.setIsuse((byte)0);
+                        saleProductInfoList.add(saleProductInfo);
+                    }
+                }
+
+                if (saleProductInfoList.size() > 0){
+                    saleProductService.saveBatch(saleProductInfoList);
+                    importSize ++;
+                }
+            }
+
+            if (StringUtils.isNotBlank(retmsg)) {
+                retmsg = retmsg + "导入成功" + importSize + "个," + "导入失败" + (sheet.getLastRowNum() - importSize) + "个。";
+                blret.addReason(retmsg);
+                return blret;
+            }
+        } catch (IOException e) {
+            logger.error(e.getLocalizedMessage());
+            blret.addReason("导入错误");
+            return blret;
+        }
+
+        blret.setValue(true);
+        return blret;
+    }
+
+    @Override
+    public BooleanReason imporSaleOrderExcel(InputStream in, String username, Boolean isExcel2007) {
+        BooleanReason blret = new BooleanReason();
+        String retmsg = "";
+        blret.setValue(false);
+        int size = 0;
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        try {
+            Workbook workbook = null;
+            if (isExcel2007) {
+                workbook = new XSSFWorkbook(in);
+            } else {
+                workbook = new HSSFWorkbook(in);
+            }
+
+            FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
+            Sheet sheet = workbook.getSheetAt(0);
+            if (sheet == null) {
+                blret.addReason("excel 第1页不能为空");
+                return blret;
+            }
+            Row row = sheet.getRow(0);
+            // 标题总列数
+            int colNum = row.getPhysicalNumberOfCells();
+            String[] title = new String[colNum];
+
+            if (colNum != saleOrderTitle.length) {
+                blret.addReason("上传文件的列的个数错误");
+                return blret;
+            }
+
+            for (int i = 0; i < colNum; i++) {
+                title[i] = row.getCell(i).getStringCellValue();
+                if (StringUtils.isNotBlank(title[i])) {
+                    title[i] = title[i].trim();
+                }
+                if (!title[i].equals((saleOrderTitle[i]))) {
+                    blret.addReason("上传文件的第" + (i + 1) + "列的标题为" + title[i] + "不为" + saleOrderTitle[i]);
+                    return blret;
+                }
+            }
+
+            for (int irow = 1; irow <= sheet.getLastRowNum(); irow++) {
+                int realrow = irow + 1;
+                Object value = null;
+                row = sheet.getRow(irow);
+                SaleOrderInfo saleOrderInfo = new SaleOrderInfo();
+                List<SaleOrderDetailInfoBO> detailInfoList = new ArrayList<>();
+                value = ExcelProperty.getCellValue(row.getCell(0), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    retmsg = retmsg + "导入失败,第" + realrow + "行,零售单位名称不能为空.<br/>";
+                    continue;
+                }else {
+                    Enterprise enterprise = enterpriseService.selectEnterpriseByName(value.toString().trim());
+                    if (enterprise == null){
+                        continue;
+                    }else {
+                        saleOrderInfo.setCreatedby(enterprise.getEnterprisenumber());
+                        saleOrderInfo.setShop(enterprise.getEnterprisename());
+                        saleOrderInfo.setCompanynumber(enterprise.getEnterprisenumber());
+                    }
+                }
+                value = ExcelProperty.getCellValue(row.getCell(1), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    retmsg = retmsg + "导入失败,第" + realrow + "行,身份证不能为空.<br/>";
+                    continue;
+                }else {
+                    saleOrderInfo.setIdcardnum(value.toString().trim());
+                }
+
+                value = ExcelProperty.getCellValue(row.getCell(2), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    retmsg = retmsg + "导入失败,第" + realrow + "行,购买时间不能为空.<br/>";
+                    continue;
+                }else {
+                    String now = sdf.format(new Date());
+                    String purseTime = value.toString().trim()+ now.substring(10);
+                    saleOrderInfo.setCreatedat(sdf.parse(purseTime));
+                }
+
+                List<SaleProductInfo> saleProductInfoList = new ArrayList<>();
+                value = ExcelProperty.getCellValue(row.getCell(3), evaluator);
+                if (null == value || StringUtils.isBlank(value.toString())) {
+                    retmsg = retmsg + "导入失败,第" + realrow + "行,购买数量不能为空.<br/>";
+                    continue;
+                }else {
+                    saleOrderInfo.setBoxnum(new BigDecimal(Integer.valueOf(value.toString().trim())));
+                    saleProductInfoList = saleProductService.selectRandom(Integer.valueOf(value.toString().trim()));
+                    for (SaleProductInfo saleProductInfo : saleProductInfoList){
+                        SaleOrderDetailInfoBO detailInfo = new SaleOrderDetailInfoBO();
+                        detailInfo.setItemcode(saleProductInfo.getItemcode());
+                        detailInfo.setItemname(saleProductInfo.getItemname());
+                        detailInfo.setDirectioncode(saleProductInfo.getDirectioncode());
+                        detailInfo.setCreatedat(saleOrderInfo.getCreatedat());
+                        detailInfo.setCreatedby(saleOrderInfo.getCompanynumber());
+                        detailInfo.setPrice(new BigDecimal("0"));
+                        detailInfo.setSpecification(saleProductInfo.getSpecification());
+                        detailInfo.setReturnflag((byte)0);
+                        detailInfoList.add(detailInfo);
+                    }
+                }
+                customerService.createOrUpdateCard(saleOrderInfo.getIdcardnum(),detailInfoList.size(),saleOrderInfo.getCreatedat());
+                CustomerInfo customerInfo = customerService.getCustomerByIdCardNum(saleOrderInfo.getIdcardnum());
+                UserInfo userInfo = userService.selectByUser(saleOrderInfo.getCompanynumber());
+                SaleOrderInfo saleOrderInfo1 = saleOrderService.createOrder(userInfo,detailInfoList,"1",detailInfoList.size(),saleOrderInfo.getCreatedat(),customerInfo.getId(),"0","0","0", "");
+                for (SaleProductInfo saleProductInfo : saleProductInfoList){
+                    saleProductInfo.setIsuse((byte)1);
+                    saleProductService.updateById(saleProductInfo);
+
+                    //插入流向轨迹
+                    ProductLocusInfo productLocusInfo = new ProductLocusInfo(saleProductInfo.getDirectioncode(),saleOrderInfo.getCreatedat(),saleOrderInfo.getCreatedat(),
+                            userInfo.getCompany(),customerInfo.getId(),ProductLocusInfo.SALES_STATUS,null);
+                    productLocusService.insertProductLocus(productLocusInfo);
+                }
+                size ++;
+            }
+
+            if (StringUtils.isNotBlank(retmsg)) {
+                retmsg = retmsg + "导入成功" + size + "个," + "导入失败" + (sheet.getLastRowNum() - size) + "个。";
+                blret.addReason(retmsg);
+                return blret;
+            }
+        } catch (IOException e) {
+            logger.error(e.getLocalizedMessage());
+            blret.addReason("导入错误");
+            return blret;
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+
+        blret.setValue(true);
+        return blret;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/HelpDocServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/HelpDocServiceImpl.java
new file mode 100644
index 0000000..88e16c6
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/HelpDocServiceImpl.java
@@ -0,0 +1,44 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.HelpDocInfo;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Mapper.HelpDocInfoMapper;
+import com.gk.firework.Service.HelpDocService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author : jingjy
+ * @date : 2021/6/16 10:21
+ */
+@Service("HelpDocService")
+public class HelpDocServiceImpl extends ServiceImpl<HelpDocInfoMapper, HelpDocInfo> implements HelpDocService {
+    @Autowired
+    private HelpDocInfoMapper helpDocInfoMapper;
+
+    @Override
+    public void selectDataGrid(PageInfo pageInfo) {
+        Page<HelpDocInfo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+        List<OrderItem> orderItems = new ArrayList<>();
+        OrderItem orderItem = new OrderItem();
+        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+            orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
+            orderItem.setColumn(pageInfo.getSort());
+        }else {
+            orderItem.setAsc(false);
+            orderItem.setColumn("updated");
+        }
+        orderItems.add(orderItem);
+        page.setOrders(orderItems);
+        List<HelpDocInfo> list = helpDocInfoMapper.selectDataGrid(page,pageInfo.getCondition());
+        pageInfo.setResult(list);
+        pageInfo.setTotalCount(page.getTotal());
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/HiddenDangerCheckServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/HiddenDangerCheckServiceImpl.java
new file mode 100644
index 0000000..92ef492
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/HiddenDangerCheckServiceImpl.java
@@ -0,0 +1,44 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.HiddenDangerCheckContent;
+import com.gk.firework.Domain.Vo.HiddenDangerTableRow;
+import com.gk.firework.Mapper.HiddenDangerCheckContentMapper;
+import com.gk.firework.Service.HiddenDangerCheckService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service("hiddenDangerCheckService")
+public class HiddenDangerCheckServiceImpl extends ServiceImpl<HiddenDangerCheckContentMapper, HiddenDangerCheckContent> implements HiddenDangerCheckService {
+
+    @Autowired
+    private HiddenDangerCheckContentMapper hiddenDangerCheckContentMapper;
+    /**
+    * @Description: 查找隐患自治信息
+    * @date 2021/4/7 15:10
+    * @Params id 菜单id
+    */
+    @Override
+    public List<HiddenDangerCheckContent> selectList(Long id) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("menu",id);
+        return hiddenDangerCheckContentMapper.selectContent(params);
+    }
+
+    /**
+     * @Description: 查找隐患自治信息,一行一行返回
+     * @date 2021/4/7 15:10
+     * @Params id 菜单id
+     */
+    @Override
+    public List<HiddenDangerTableRow> selectRowList(Long id,String level) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("menu",id);
+        params.put("level",level);
+        return hiddenDangerCheckContentMapper.selectRow(params);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/HiddenDangerMenuServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/HiddenDangerMenuServiceImpl.java
new file mode 100644
index 0000000..84ac347
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/HiddenDangerMenuServiceImpl.java
@@ -0,0 +1,22 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.HiddenDangerMenu;
+import com.gk.firework.Mapper.HiddenDangerMenuMapper;
+import com.gk.firework.Service.HiddenDangerMenuService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service("hiddenDangerMenuService")
+public class HiddenDangerMenuServiceImpl extends ServiceImpl<HiddenDangerMenuMapper,HiddenDangerMenu> implements HiddenDangerMenuService {
+
+    @Autowired
+    private HiddenDangerMenuMapper hiddenDangerMenuMapper;
+
+    @Override
+    public List<HiddenDangerMenu> selectMenu() {
+        return hiddenDangerMenuMapper.selectMenu();
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/HiddenDangerReportDetailServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/HiddenDangerReportDetailServiceImpl.java
new file mode 100644
index 0000000..88847ad
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/HiddenDangerReportDetailServiceImpl.java
@@ -0,0 +1,38 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.HiddenDangerReportDetail;
+import com.gk.firework.Mapper.HiddenDangerReportDetailMapper;
+import com.gk.firework.Service.HiddenDangerReportDetailService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service("hiddenDangerReportDetailService")
+public class HiddenDangerReportDetailServiceImpl extends ServiceImpl<HiddenDangerReportDetailMapper, HiddenDangerReportDetail> implements HiddenDangerReportDetailService {
+
+    @Autowired
+    private HiddenDangerReportDetailMapper hiddenDangerReportDetailMapper;
+
+
+    /**
+    * @Description: 更新不合格 -》合格
+    * @date 2021/4/12 10:01
+    */
+    @Override
+    public void update2Qualified(List<HiddenDangerReportDetail> upds2Qualified) {
+
+        hiddenDangerReportDetailMapper.update2Qualified(upds2Qualified);
+    }
+
+
+    /**
+    * @Description: 根据报告单号获取所有未完成且过期
+    * @date 2021/4/12 10:01
+    */
+    @Override
+    public int countOverdueByReportCode(String code) {
+        return hiddenDangerReportDetailMapper.countOverDueByReportCode(code);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/HiddenDangerReportServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/HiddenDangerReportServiceImpl.java
new file mode 100644
index 0000000..55d5f62
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/HiddenDangerReportServiceImpl.java
@@ -0,0 +1,464 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.Enterprise;
+import com.gk.firework.Domain.Enum.HiddenDangerReportStatus;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.HiddenDangerReport;
+import com.gk.firework.Domain.HiddenDangerReportDetail;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.FilterObject;
+import com.gk.firework.Domain.Utils.Properties;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Utils.UploadUtil;
+import com.gk.firework.Domain.Vo.CheckReportVo;
+import com.gk.firework.Domain.Vo.HiddenDangerTableRow;
+import com.gk.firework.Mapper.HiddenDangerReportMapper;
+import com.gk.firework.Service.EnterpriseService;
+import com.gk.firework.Service.HiddenDangerReportDetailService;
+import com.gk.firework.Service.HiddenDangerReportService;
+import com.gk.firework.Service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.*;
+
+@Service("hiddenDangerReportService")
+public class HiddenDangerReportServiceImpl extends ServiceImpl<HiddenDangerReportMapper, HiddenDangerReport> implements HiddenDangerReportService {
+
+    @Autowired
+    private EnterpriseService enterpriseService;
+    @Autowired
+    private HiddenDangerReportDetailService hiddenDangerReportDetailService;
+    @Autowired
+    private HiddenDangerReportMapper hiddenDangerReportMapper;
+    @Autowired
+    private UserService userService;
+
+
+
+    /**
+    * @Description: 提交自检报告
+    * @date 2021/4/8 14:58
+    */
+    @Override
+    @Transactional
+    public void addCheck(CheckReportVo checkReportVo, UserInfo user) {
+
+        //自检报告基本信息
+        HiddenDangerReport report = new HiddenDangerReport();
+        {
+            //自动生成code
+            report.setCode("SR"+System.currentTimeMillis());
+            report.setApplyperson(checkReportVo.getApplyperson());
+            report.setCreateby(user.getUsername());
+            report.setCreatetime(new Date());
+            report.setEnterpriseid(user.getId());
+            report.setEnterprisename(user.getUsername());
+            report.setStatus(HiddenDangerReportStatus.PENDING);
+            UserInfo userInfo = userService.getById(user.getId());
+            Enterprise enterprise = enterpriseService.getById(userInfo.getCompanyid());
+            assert enterprise != null;
+            report.setCycle(enterprise.getSelfrecordingcycle());
+            report.setEnterprisenumber(enterprise.getEnterprisenumber());
+            report.setMajornum(0);
+            report.setNormalnum(0);
+            report.setOverduenum(0);
+            report.setUndealnum(0);
+            report.setViewcount(0);
+            report.setTotalnum(0);
+
+        }
+
+        //新增自检已选选项
+        {
+
+            JSONArray jsonArray = JSONArray.parseArray(checkReportVo.getReport());
+            if (jsonArray != null) {
+                List<HiddenDangerTableRow> rows = jsonArray.toJavaList(HiddenDangerTableRow.class);
+                List<HiddenDangerReportDetail> adds;
+                if (rows != null && rows.size() > 0) {
+                    adds = new ArrayList<>();
+                    for (HiddenDangerTableRow row : rows) {
+                        //合格
+                        if (row.isQualified() && !row.isUnqualified()) {
+                            HiddenDangerTableRow.Unqualified cu = row.getAnswer();
+                            HiddenDangerReportDetail q = new HiddenDangerReportDetail();
+                            q.setResultid(cu.getResultid());
+                            q.setReportcode(report.getCode());
+                            q.setValidflag(true);
+                            q.setIsqualified(true);
+                            q.setChecktypeid(row.getChecktypeid());
+                            adds.add(q);
+                        }
+                        //不合格
+                        if (row.isUnqualified() && !row.isQualified()) {
+                            HiddenDangerTableRow.Unqualified cu = row.getAnswer();
+                            //重大危险
+                            if (cu.getLevel() == 2) {
+                                report.setMajornum(report.getMajornum() + 1);
+                            }else{
+                                report.setNormalnum(report.getNormalnum() + 1);
+                            }
+                            //未处理完个数
+                            if (cu.getRectifystatus() == 1) {
+                                report.setUndealnum(report.getUndealnum() + 1);
+                            }
+
+                            HiddenDangerReportDetail uq = new HiddenDangerReportDetail();
+                            uq.setChecktypeid(row.getChecktypeid());
+                            uq.setResultid(cu.getResultid());
+                            uq.setFindtime(cu.getFindtime());
+                            uq.setLevel(cu.getLevel());
+                            uq.setReportcode(report.getCode());
+                            uq.setRectifyprincipal(cu.getRectifyprincipal());
+                            uq.setMemo(cu.getMemo());
+                            uq.setRectifycompletedate(cu.getRectifycompletedate());
+                            uq.setRectifymeasure(cu.getRectifymeasure());
+                            uq.setRectifydeadline(cu.getRectifydeadline());
+                            uq.setRectifystatus(cu.getRectifystatus());
+                            uq.setIsqualified(false);
+                            uq.setValidflag(true);
+                            uq.setUrl(cu.getUrl());
+                            adds.add(uq);
+
+                        }
+                    }
+
+                    if (adds.size() > 0) {
+                        report.setTotalnum(adds.size());
+                        hiddenDangerReportDetailService.saveBatch(adds);
+                    }
+
+                }
+
+            }
+
+
+
+
+        }
+        //新增自检报告->执行
+        {
+            report.setValidflag(true);
+            this.save(report);
+        }
+
+    }
+
+    /**
+    * @Description: 报告统计分页
+    * @date 2021/4/8 18:31
+    */
+    @Override
+    public IPage reportList(Page<HiddenDangerReport> page, Map filter,UserInfo user) {
+
+        UserInfo userInfo = userService.getById(user.getId());
+
+        Map<String, Object> params = new HashMap<>();
+        //监管部门(companyid = null)可视范围为已提交的,否则只能看自己提交的信息
+        params.put("enterprisenumber", userInfo.getCompanynumber());
+        params.put("committed", HiddenDangerReportStatus.COMMITTED);
+        // 过滤条件
+        params.put("province", user.getProvince());
+        params.put("city", user.getCity());
+        params.put("district", user.getArea());
+        params.put("street", user.getTown());
+        params.put("committee", user.getCommunity());
+        params.put("filterProvince", filter.get("province"));
+        params.put("filterCity", filter.get("city"));
+        params.put("filterDistrict", filter.get("district"));
+        params.put("filterStreet", filter.get("street"));
+        params.put("filterCommittee", filter.get("committee"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        params.put("cycle", filter.get("cycle"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        params.put("range", filter.get("range"));
+        List<HiddenDangerReport> list = hiddenDangerReportMapper.selectReportList(page, params);
+        if (list.size() > 0) {
+            for (HiddenDangerReport report : list) {
+                //过期并且未处理
+                report.setOverduenum(hiddenDangerReportDetailService.countOverdueByReportCode(report.getCode()));
+            }
+        }
+        return page.setRecords(list);
+    }
+
+    /**
+    * @Description: 根据Id获取单条自检报告
+    * @date 2021/4/8 18:38
+    */
+    @Override
+    public List<HiddenDangerTableRow> getReport(String code) {
+        return hiddenDangerReportMapper.selectReport(code);
+    }
+
+
+    /**
+    * @Description: 修改报告
+    * @date 2021/4/9 10:09
+    */
+    @Override
+    public void modReport(CheckReportVo checkReportVo, UserInfo user) {
+
+            HiddenDangerReport report = new HiddenDangerReport();
+            report.setId(checkReportVo.getReportid());
+            report.setApplyperson(checkReportVo.getApplyperson());
+            report.setMajornum(0);
+            report.setNormalnum(0);
+            report.setOverduenum(0);
+            report.setUndealnum(0);
+            report.setTotalnum(0);
+
+
+        JSONArray jsonArray = JSONArray.parseArray(checkReportVo.getReport());
+        if (jsonArray != null) {
+            List<HiddenDangerTableRow> rows = jsonArray.toJavaList(HiddenDangerTableRow.class);
+            List<HiddenDangerReportDetail> adds;
+            List<HiddenDangerReportDetail> upds2Unqualified;
+            List<HiddenDangerReportDetail> upds2Qualified;
+            List<HiddenDangerReportDetail> dels;
+
+
+            if (rows != null && rows.size() > 0) {
+                adds = new ArrayList<>();
+                upds2Unqualified = new ArrayList<>();
+                upds2Qualified = new ArrayList<>();
+                dels = new ArrayList<>();
+                for (HiddenDangerTableRow row : rows) {
+                    //合格
+                    HiddenDangerTableRow.Unqualified cu = row.getAnswer();
+                    if (row.isQualified() && !row.isUnqualified()) {
+                        HiddenDangerReportDetail q = new HiddenDangerReportDetail();
+                        if (cu.getId() != null) {
+                            q.setId(cu.getId());
+                            q.setIsqualified(true);
+                            q.setResultid(cu.getResultid());
+                            upds2Qualified.add(q);
+                        }else{
+                            q.setResultid(cu.getResultid());
+                            q.setReportcode(checkReportVo.getReportcode());
+                            q.setValidflag(true);
+                            q.setIsqualified(true);
+                            q.setChecktypeid(row.getChecktypeid());
+                            q.setReportcode(checkReportVo.getReportcode());
+                            adds.add(q);
+                        }
+
+                    }
+                    //不合格
+                    if (row.isUnqualified() && !row.isQualified()) {
+                        HiddenDangerReportDetail uq = new HiddenDangerReportDetail();
+
+                        //重大危险
+                        if (cu.getLevel() == 2) {
+                            report.setMajornum(report.getMajornum() + 1);
+                        }else{
+                            report.setNormalnum(report.getNormalnum() + 1);
+                        }
+                        //未处理完个数
+                        if (cu.getRectifystatus() == 1) {
+                            report.setUndealnum(report.getUndealnum() + 1);
+                        }
+                        uq.setChecktypeid(row.getChecktypeid());
+                        uq.setResultid(cu.getResultid());
+                        uq.setFindtime(cu.getFindtime());
+                        uq.setLevel(cu.getLevel());
+                        uq.setReportcode(checkReportVo.getReportcode());
+                        uq.setRectifyprincipal(cu.getRectifyprincipal());
+                        uq.setMemo(cu.getMemo());
+                        uq.setRectifystatus(cu.getRectifystatus());
+                        uq.setLevel(cu.getLevel());
+                        uq.setRectifycompletedate(cu.getRectifycompletedate());
+                        uq.setRectifymeasure(cu.getRectifymeasure());
+                        uq.setRectifydeadline(cu.getRectifydeadline());
+                        uq.setUrl(cu.getUrl());
+
+                        if (cu.getId() != null) {
+                            uq.setId(cu.getId());
+                            uq.setIsqualified(false);
+                            upds2Unqualified.add(uq);
+                        }else{
+                            uq.setIsqualified(false);
+                            uq.setValidflag(true);
+                            adds.add(uq);
+                        }
+
+
+                    }
+
+                    //删除数据
+                    if (!row.isUnqualified() && !row.isQualified()) {
+                        if (cu.getId() != null) {
+                            HiddenDangerReportDetail deleteOne = new HiddenDangerReportDetail();
+                            deleteOne.setId(cu.getId());
+                            deleteOne.setValidflag(false);
+                            dels.add(deleteOne);
+                        }
+                    }
+                }
+
+
+
+
+                if (adds.size() > 0) {
+                    hiddenDangerReportDetailService.saveBatch(adds);
+                }
+
+                if (upds2Unqualified.size() > 0) {
+                    hiddenDangerReportDetailService.updateBatchById(upds2Unqualified);
+                }
+
+                if (upds2Qualified.size() > 0) {
+                    hiddenDangerReportDetailService.update2Qualified(upds2Qualified);
+                }
+
+                report.setTotalnum(adds.size() + upds2Unqualified.size() + upds2Qualified.size());
+
+                if (dels.size() > 0) {
+                    hiddenDangerReportDetailService.updateBatchById(dels);
+                }
+
+            }
+
+            this.updateById(report);
+
+        }
+
+
+    }
+
+    /**
+    * @Description: 文件上传
+    * @date 2021/4/9 14:57
+    */
+    @Override
+    public String upload(MultipartFile file) {
+        try {
+            String name = UploadUtil.uploadFile(file, Properties.transportCertificatePath);
+            return Properties.transportCertificate + name;
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new BusinessException("上传文件失败,请联系管理员");
+        }
+    }
+
+    /**
+    * @Description: 查看检查单子
+    * @date 2021/4/13 10:12
+    */
+    @Override
+    public List<HiddenDangerTableRow> viewReport(String code) {
+
+        return hiddenDangerReportMapper.viewReport(code);
+    }
+
+
+    /**
+    * @Description: 提交单子,更新单子状态->已提交
+    * @date 2021/4/13 9:41
+    */
+    @Override
+    public void commitReport(String code) {
+        hiddenDangerReportMapper.updateStatusByCode(HiddenDangerReportStatus.COMMITTED,code);
+    }
+
+
+    /**
+    * @Description: 修改检查
+    * @date 2021/4/13 10:12
+    */
+    @Override
+    public void checkMod(CheckReportVo checkReportVo) {
+        HiddenDangerReport report = this.getById(checkReportVo.getReportid());
+        if (report.getStatus() == HiddenDangerReportStatus.COMMITTED) {
+            throw new BusinessException("已提交状态无法修改");
+        }
+
+    }
+
+    /**
+    * @Description: 重复提交判断
+    * @date 2021/4/13 10:10
+    */
+    @Override
+    public void checkCommit(String code) {
+        HiddenDangerReport report = this.getReportByCode(code);
+        if (report.getStatus() == HiddenDangerReportStatus.COMMITTED) {
+            throw new BusinessException("不能重复提交");
+        }
+    }
+
+    /**
+    * @Description: 根据code获取单子的基本数据
+    * @date 2021/4/13 10:12
+    */
+    @Override
+    public HiddenDangerReport getReportByCode(String code) {
+        return hiddenDangerReportMapper.getReportByCode(code);
+    }
+
+
+
+    /**
+    * @Description: 报告新增不能为空
+    * @date 2021/4/15 16:47
+    */
+    @Override
+    public void checkAdd(CheckReportVo checkReportVo, UserInfo user) {
+        if (StringUtils.isBlank(user.getCompanynumber())) {
+            throw new BusinessException("没有权限新建");
+        }
+
+        if (StringUtils.isBlank(checkReportVo.getApplyperson())) {
+            throw new BusinessException("报告人不能为空");
+        }
+    }
+
+    /**
+    * @Description: 导出隐患自检目录
+    * @date 2021/4/19 16:39
+    */
+    @Override
+    public List<Map> selectExportReport(Map filter, UserInfo user) {
+
+        UserInfo userInfo = userService.getById(user.getId());
+
+        Map<String, Object> params = new HashMap<>();
+        //监管部门(companyid = null)可视范围为已提交的,否则只能看自己提交的信息
+        params.put("enterprisenumber", userInfo.getCompanynumber());
+        params.put("committed", HiddenDangerReportStatus.COMMITTED);
+        // 过滤条件
+        params.put("province", user.getProvince());
+        params.put("city", user.getCity());
+        params.put("district", user.getArea());
+        params.put("street", user.getTown());
+        params.put("committee", user.getCommunity());
+        params.put("filterProvince", filter.get("province"));
+        params.put("filterCity", filter.get("city"));
+        params.put("filterDistrict", filter.get("district"));
+        params.put("filterStreet", filter.get("street"));
+        params.put("filterCommittee", filter.get("committee"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        params.put("cycle", filter.get("cycle"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        params.put("range", filter.get("range"));
+
+        List<Map> reports = hiddenDangerReportMapper.selectExportReport(params);
+        if (reports.size() > 0) {
+            for (Map report : reports) {
+                report.put("overduenum", hiddenDangerReportDetailService.countOverdueByReportCode((String) report.get("code")));
+            }
+        }
+        return reports;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/HistoryStockServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/HistoryStockServiceImpl.java
new file mode 100644
index 0000000..f753b35
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/HistoryStockServiceImpl.java
@@ -0,0 +1,111 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.HistoryStock;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Mapper.HistoryStockMapper;
+import com.gk.firework.Service.HistoryStockService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.List;
+
+@Service("historyStockService")
+public class HistoryStockServiceImpl extends ServiceImpl<HistoryStockMapper, HistoryStock> implements HistoryStockService {
+
+    @Autowired
+    private HistoryStockMapper historyStockMapper;
+
+
+    /**
+    * @Description: 历史一天库存持久化
+    * @date 2022/2/8 14:52
+    */
+    @Override
+    public void hisStockPersisting() {
+        historyStockMapper.insertDayHistoryStock();
+    }
+
+    @Override
+    public IPage selectHistoryStock(Page<Map> page, Map<String, Object> filter, UserInfo user) {
+
+        Map<String, Object> params = new HashMap<>();
+        params.put("specificDate", filter.get("specificDate"));
+        params.put("province", filter.get("province"));
+        params.put("city", filter.get("city"));
+        params.put("district", filter.get("district"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        List<Map> res = historyStockMapper.selectPages(page, params);
+        List<Map> result = new ArrayList<>(res);
+        if (result.size() > 0) {
+            Map totalRow = historyStockMapper.selectDayHistoryStockTotal(params);
+            result.add(totalRow);
+        }
+        return page.setRecords(result);
+    }
+
+    @Override
+    public IPage selectCityStock(Page<Map> page, Map<String, Object> filter, UserInfo user) {
+
+        Map<String, Object> params = new HashMap<>();
+        params.put("province", "新疆维吾尔自治区");
+        params.put("city", filter.get("city"));
+        params.put("district", filter.get("district"));
+        params.put("specificDate", filter.get("specificDate"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        List<Map> res = historyStockMapper.selectCityStock(page, params);
+        List<Map> result = new ArrayList<>(res);
+        if (result.size() > 0) {
+            Map totalRow = historyStockMapper.selectAllCityStock(params);
+            result.add(totalRow);
+        }
+        return page.setRecords(result);
+    }
+
+    @Override
+    public IPage selectHistoryCityStock(Page<Map> page, Map<String, Object> filter, UserInfo user) {
+
+        Map<String, Object> params = new HashMap<>();
+        params.put("specificDate", filter.get("specificDate"));
+        params.put("province", "新疆维吾尔自治区");
+        params.put("city", filter.get("city"));
+        params.put("district", filter.get("district"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        List<Map> res = historyStockMapper.selectHistoryCityStock(page, params);
+        List<Map> result = new ArrayList<>(res);
+        if (result.size() > 0) {
+            Map totalRow = historyStockMapper.selectDayHistoryStockTotal(params);
+            result.add(totalRow);
+        }
+        return page.setRecords(result);
+    }
+
+    @Override
+    public List<Map> selectExportHistoryStock(Map<String, Object> filter, UserInfo user) {
+
+        Map<String, Object> params = new HashMap<>();
+        params.put("specificDate", filter.get("specificDate"));
+        params.put("province", filter.get("province"));
+        params.put("city", filter.get("city"));
+        params.put("district", filter.get("district"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        List<Map> res = historyStockMapper.selectPages(params);
+        List<Map> result = new ArrayList<>(res);
+        if (result.size() > 0) {
+            Map totalRow = historyStockMapper.selectDayHistoryStockTotal(params);
+            result.add(totalRow);
+        }
+        return result;
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/LicenseServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/LicenseServiceImpl.java
new file mode 100644
index 0000000..4db34d0
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/LicenseServiceImpl.java
@@ -0,0 +1,407 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.Enum.LicenseStatus;
+import com.gk.firework.Domain.Enum.ProvinceCode;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.Utils.BeanUtils;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Vo.DealingRangeVo;
+import com.gk.firework.Domain.Vo.LicenseVo;
+import com.gk.firework.Mapper.LicenseInfoMapper;
+import com.gk.firework.Service.*;
+import com.spire.doc.interfaces.IField;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+
+/**
+ * @author : jingjy
+ * @date : 2021/5/11 16:43
+ */
+@Service("LicenseService")
+public class LicenseServiceImpl extends ServiceImpl<LicenseInfoMapper, LicenseInfo> implements LicenseService {
+    @Autowired
+    private LicenseInfoMapper licenseInfoMapper;
+    @Autowired
+    private LicenseStorageService licenseStorageService;
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private EnterpriseLicenseService enterpriseLicenseService;
+    @Autowired
+    private EnterpriseService enterpriseService;
+
+    @Override
+    public void selectDataGrid(PageInfo pageInfo) {
+        Page<LicenseInfo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+
+        List<OrderItem> orderItems = new ArrayList<>();
+        OrderItem orderItem = new OrderItem();
+        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+            orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
+            orderItem.setColumn(pageInfo.getSort());
+        } else {
+            orderItem.setAsc(false);
+            orderItem.setColumn("createdat");
+        }
+        orderItems.add(orderItem);
+        page.setOrders(orderItems);
+        if (StringUtils.isBlank(pageInfo.getSort())) {
+            pageInfo.setSort("createdat");
+        }
+        if (StringUtils.isBlank(pageInfo.getOrder())) {
+            pageInfo.setOrder("desc");
+        }
+        List<LicenseVo> licenseVoList = licenseInfoMapper.selectLicenseDataGrid(pageInfo.getCondition(), page);
+
+        List<LicenseVo> licenseVos = new ArrayList<>();
+        for (LicenseVo licenseVo : licenseVoList) {
+            List<LicenseStorage> licenseStorageList = licenseStorageService.getListByLicenseCode(licenseVo.getLicensecode());
+            String licenseStorage = JSON.toJSONString(licenseStorageList);
+            licenseVo.setLicenseStorage(licenseStorage);
+            StringBuilder dealingRangeStr = dealDealingRange(licenseVo.getDealingrange());
+            licenseVo.setDealingRangeStr(dealingRangeStr.toString());
+            licenseVos.add(licenseVo);
+        }
+
+        pageInfo.setResult(licenseVos);
+        pageInfo.setTotalCount(page.getTotal());
+    }
+
+    @Override
+    public StringBuilder dealDealingRange(String dealingRange) {
+        //处理dealingRange,供前台展示
+        StringBuilder dealingRangeStr = new StringBuilder();
+        JSONArray jsonArray = JSONArray.parseArray(dealingRange);
+        List<DealingRangeVo> dealingRangeVos = new ArrayList<>();
+        for (int i = 0; i < jsonArray.size(); i++) {
+            int k = i + 1;
+            JSONObject object = jsonArray.getJSONObject(i);
+            Boolean checked = object.getBoolean("checked" + k);
+            if (checked == null){
+                return dealingRangeStr;
+            }
+            List<String> checkMore = new ArrayList<>();
+            if (object.getJSONArray("checkMore"+k) != null){
+                checkMore = object.getJSONArray("checkMore" + k).toJavaList(String.class);
+            }
+            DealingRangeVo dealingRangeVo = new DealingRangeVo();
+            dealingRangeVo.setSn(k);
+            dealingRangeVo.setChecked(checked);
+            dealingRangeVo.setCheckMore(checkMore);
+            switch (k) {
+                case 1:
+                    dealingRangeVo.setName("爆竹类");
+                    break;
+                case 2:
+                    dealingRangeVo.setName("喷花类");
+                    break;
+                case 3:
+                    dealingRangeVo.setName("旋转类");
+                    break;
+                case 4:
+                    dealingRangeVo.setName("吐珠类");
+                    break;
+                case 5:
+                    dealingRangeVo.setName("玩具类");
+                    break;
+                case 6:
+                    dealingRangeVo.setName("组合烟花类");
+                    break;
+                default:
+            }
+            dealingRangeVos.add(dealingRangeVo);
+
+        }
+        for (DealingRangeVo dealingRangeVo : dealingRangeVos) {
+            if (dealingRangeVo.getChecked()){
+                dealingRangeStr.append(dealingRangeVo.getName());
+                dealingRangeStr.append("(");
+                if (dealingRangeVo.getCheckMore().size() == 1) {
+                    dealingRangeStr.append(dealingRangeVo.getCheckMore().get(0).trim(), 0, 1);
+                } else {
+                    for (int i = 0; i < dealingRangeVo.getCheckMore().size(); i++) {
+                        dealingRangeStr.append(dealingRangeVo.getCheckMore().get(i).trim(), 0, 1);
+                        if (i != dealingRangeVo.getCheckMore().size() - 1) {
+                            dealingRangeStr.append("、");
+                        }
+                    }
+                }
+                dealingRangeStr.append(")级、");
+
+            }
+
+        }
+        if (dealingRangeStr.length() >= 1){
+            dealingRangeStr.deleteCharAt(dealingRangeStr.length() - 1);
+        }
+        return dealingRangeStr;
+    }
+
+    @Override
+    @Transactional
+    public void rejectLicense(JSONObject data, UserInfo userInfo) {
+
+//        UserInfo user = userService.getById(userInfo.getId());
+//        assert  user != null;
+        Long id = data.getLong("id");
+        String rejectnote = data.getString("rejectnote");
+        if (id == null) {
+            throw new BusinessException("参数错误,请联系管理员");
+        }
+        LicenseInfo license = this.getLicenseById(id);
+        if (!license.getReviewstatus().equals((byte) 2) && !license.getReviewstatus().equals((byte) 1)) {
+            throw new BusinessException("只有等待审核和已审核的记录可以驳回");
+        }
+        if (StringUtils.isBlank(rejectnote)) {
+            throw new BusinessException("驳回意见不能为空");
+        }
+        LicenseInfo info = new LicenseInfo();
+        info.setId(id);
+        info.setReviewstatus((byte) 3);
+        info.setReviewnote(rejectnote);
+        this.updateById(info);
+        //删除企业信息的许可证
+        enterpriseLicenseService.deleteByLicenseNumber(license.getLicensecode());
+    }
+
+
+    /**
+    * @Description: 证书分析
+    * @date 2021/7/1 15:24
+    */
+    @Override
+    public IPage selectLicenseStatistic(Page<Map> page, Map filter, UserInfo user) {
+
+        Map<String, Object> params = new HashMap<>();
+
+        UserInfo userInfo = userService.getById(user.getId());
+
+        //可见度
+//        params.put("enterprisenumber", userInfo.getCompanynumber());
+        //该菜单只有监管部门能看
+        params.put("city", userInfo.getCity());
+        params.put("filterCity", filter.get("city"));
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        List<Map> result = licenseInfoMapper.selectLicenseStatisticPage(page, params);
+        return page.setRecords(result);
+    }
+
+    @Override
+    public List<LicenseVo> exportLicense(Map<String, Object> condition) {
+        List<LicenseVo> licenseVoList = licenseInfoMapper.selectLicenseDataGrid(condition);
+
+
+        List<LicenseVo> licenseVos = new ArrayList<>();
+        for (LicenseVo licenseVo : licenseVoList) {
+            List<LicenseStorage> licenseStorageList = licenseStorageService.getListByLicenseCode(licenseVo.getLicensecode());
+            String licenseStorage = JSON.toJSONString(licenseStorageList);
+            licenseVo.setLicenseStorage(licenseStorage);
+            StringBuilder dealingRangeStr = dealDealingRange(licenseVo.getDealingrange());
+            licenseVo.setDealingRangeStr(dealingRangeStr.toString());
+            UserInfo one = userService.getOne(new LambdaQueryWrapper<UserInfo>()
+                    .eq(UserInfo::getCompany, licenseVo.getIssuingunit()));
+            if (one != null)
+                licenseVo.setIssuingcode(one.getCode());
+            licenseVos.add(licenseVo);
+        }
+        return licenseVos;
+    }
+
+    @Override
+    @Transactional
+    public void delayLicense(Long id, String issuingunit, Date issuingdate, Date validstarttime, Date validendtime,UserInfo userInfo) {
+        if (id == null) throw new BusinessException("传参错误");
+        LicenseInfo licenseInfo = this.getLicenseById(id);
+        if (licenseInfo == null) throw new BusinessException("证书不存在");
+        if (licenseInfo.getReviewstatus() != (byte)2) throw new BusinessException("只能操作审批通过的证书");
+        if (StringUtils.isBlank(issuingunit)) throw new BusinessException("发证机关不能为空");
+        if (validendtime == null || validstarttime == null) throw new BusinessException("有效期不能为空");
+        if (issuingdate == null) throw new BusinessException("发证日期不能为空");
+        if (validendtime.before(new Date())) throw new BusinessException("无意义日期");
+        List<LicenseStorage> licenseStorages = licenseStorageService.getListByLicenseCode(licenseInfo.getLicensecode());
+        //1.注销原本的证书
+        licenseInfo.setValidstatus((byte) -1);
+        this.updateById(licenseInfo);
+        //2.创建新的证书
+        licenseInfo.setValidstatus((byte) 1);
+        this.generateLicenseDetail(licenseInfo);
+        licenseInfo.setId(null);
+        //证书状态:延期
+        licenseInfo.setLicensestatus(LicenseStatus.POSTP);
+        licenseInfo.setCreatedat(new Date());
+        licenseInfo.setCreatedby(userInfo.getUsername());
+        licenseInfo.setModifiedat(new Date());
+        licenseInfo.setModifiedby(userInfo.getUsername());
+        licenseInfo.setEffectdate(validstarttime);
+        licenseInfo.setNoeffectdate(validendtime);
+        licenseInfo.setIssuingdate(issuingdate);
+        licenseInfo.setIssuingunit(issuingunit);
+        this.save(licenseInfo);
+        //3.复制新的storage表
+        if (licenseStorages.size() > 0) {
+            for (LicenseStorage licenseStorage : licenseStorages) {
+                licenseStorage.setId(null);
+                licenseStorage.setLicensecode(licenseInfo.getLicensecode());
+                licenseStorageService.save(licenseStorage);
+            }
+        }
+
+        Enterprise enterprise = enterpriseService.selectEnterpriseByName(licenseInfo.getName());
+        enterprise.setValidstarttime(licenseInfo.getEffectdate());
+        enterprise.setValidendtime(licenseInfo.getNoeffectdate());
+        enterpriseService.updateById(enterprise);
+        EnterpriseLicense enterpriseLicense = new EnterpriseLicense();
+        if (licenseInfo.getType().equals((byte)2)){
+            enterpriseLicense.setLicensename("烟花爆竹经营(批发)许可证");
+        }else if (licenseInfo.getType().equals( (byte)3)){
+            enterpriseLicense.setLicensename("烟花爆竹经营(零售)许可证");
+        }
+        enterpriseLicense.setLicensenumber(licenseInfo.getLicensecode());
+        enterpriseLicense.setEnterpriseid(enterprise.getId());
+        enterpriseLicense.setAuthority(licenseInfo.getIssuingunit());
+        enterpriseLicense.setRanges(this.dealDealingRange(licenseInfo.getDealingrange()).toString());
+        enterpriseLicense.setValidendtime(licenseInfo.getNoeffectdate());
+        enterpriseLicense.setValidstarttime(licenseInfo.getEffectdate());
+        enterpriseLicense.setValidflag(true);
+        enterpriseLicense.setCreatetime(new Date());
+        enterpriseLicense.setCreateby(userInfo.getId());
+        enterpriseLicense.setCreatebyname(userInfo.getUsername());
+        enterpriseLicenseService.save(enterpriseLicense);
+        //issale = 1 修改 截止有效期
+        List<UserInfo> userList = userService.selectByCompanyId(enterprise.getId(),0);
+        if (userList.size() != 2) {
+            throw new BusinessException("发生错误,请联系管理员");
+        }
+        for (UserInfo info : userList) {
+            //修改许可证 同时修改issale=1的用户有效期
+            if (info.getIssale() == (byte) 1) {
+                Calendar instance = Calendar.getInstance();
+                instance.setTime(validendtime);
+                instance.set(Calendar.HOUR_OF_DAY, 23);
+                instance.set(Calendar.MINUTE, 59);
+                instance.set(Calendar.SECOND, 59);
+                info.setExpiredate(instance.getTime());
+                userService.updateById(info);
+            }
+        }
+    }
+
+    @Override
+    public void generateLicenseDetail(LicenseInfo licenseInfo) {
+        LicenseInfo licenseInfo1 = this.getLastOne();
+        Integer sn = licenseInfo1.getSn();
+        sn++;
+        licenseInfo.setSn(sn);
+        String abbr = "";
+        String typeCode = "";
+        for (ProvinceCode code : ProvinceCode.values()) {
+            if (licenseInfo.getProvince().equals(code.getName())) {
+                abbr = code.getAbbr();
+            }
+        }
+        if (licenseInfo.getType().equals((byte)2)) {
+            typeCode = "PF";
+        } else if (licenseInfo.getType().equals((byte)3)) {
+            typeCode = "LS";
+        }
+        Calendar cal = Calendar.getInstance();
+        int year = cal.get(Calendar.YEAR);
+
+        String licenseCode = "(" + abbr + ")" + typeCode + "〔" + year + "〕" + String.format("%05d", sn);
+        licenseInfo.setLicensecode(licenseCode);
+    }
+
+    @Override
+    @Transactional
+    public void modLicense(LicenseVo licenseVo, List<LicenseStorage> licenseStorageList, UserInfo user) {
+        //1.普通判断
+        if (licenseVo.getId() == null) throw new BusinessException("传参错误");
+        LicenseInfo older = this.getLicenseById(licenseVo.getId());
+        if (older == null) throw new BusinessException("证书不存在");
+        if (StringUtils.isBlank(licenseVo.getIssuingunit())) throw new BusinessException("发证机关不能为空");
+        if (licenseVo.getEffectdate() ==null|| licenseVo.getNoeffectdate() == null) throw new BusinessException("开始结束时间不能为空");
+        if (licenseVo.getIssuingdate()== null) throw new BusinessException("发证日期不能为空");
+        //2.注销旧版
+        older.setValidstatus((byte) -1);
+        this.updateById(older);
+        //3.新建新版
+        licenseVo.setLicensestatus(LicenseStatus.MOD);
+        licenseVo.setValidstatus((byte) 1);
+        licenseVo.setCreatedat(new Date());
+        licenseVo.setCreatedby(user.getUsername());
+        licenseVo.setModifiedat(new Date());
+        licenseVo.setModifiedby(user.getUsername());
+        licenseVo.setId(null);
+        this.save(licenseVo);
+        licenseStorageService.saveBatch(licenseStorageList);
+
+        Enterprise enterprise = enterpriseService.selectEnterpriseByName(licenseVo.getName());
+        enterprise.setValidstarttime(licenseVo.getEffectdate());
+        enterprise.setValidendtime(licenseVo.getNoeffectdate());
+        enterpriseService.updateById(enterprise);
+        EnterpriseLicense enterpriseLicense = new EnterpriseLicense();
+        if (licenseVo.getType().equals((byte)2)){
+            enterpriseLicense.setLicensename("烟花爆竹经营(批发)许可证");
+        }else if (licenseVo.getType().equals( (byte)3)){
+            enterpriseLicense.setLicensename("烟花爆竹经营(零售)许可证");
+        }
+        enterpriseLicense.setLicensenumber(licenseVo.getLicensecode());
+        enterpriseLicense.setEnterpriseid(enterprise.getId());
+        enterpriseLicense.setAuthority(licenseVo.getIssuingunit());
+        enterpriseLicense.setRanges(this.dealDealingRange(licenseVo.getDealingrange()).toString());
+        enterpriseLicense.setValidendtime(licenseVo.getNoeffectdate());
+        enterpriseLicense.setValidstarttime(licenseVo.getEffectdate());
+        enterpriseLicense.setValidflag(true);
+        enterpriseLicense.setCreatetime(new Date());
+        enterpriseLicense.setCreateby(user.getId());
+        enterpriseLicense.setCreatebyname(user.getUsername());
+        enterpriseLicenseService.save(enterpriseLicense);
+        //issale = 1 修改 截止有效期
+        List<UserInfo> userList = userService.selectByCompanyId(enterprise.getId(),0);
+        if (userList.size() != 2) {
+            throw new BusinessException("发生错误,请联系管理员");
+        }
+        for (UserInfo info : userList) {
+            //修改许可证 同时修改issale=1的用户有效期
+            if (info.getIssale() == (byte) 1) {
+                Calendar instance = Calendar.getInstance();
+                instance.setTime(licenseVo.getNoeffectdate());
+                instance.set(Calendar.HOUR_OF_DAY, 23);
+                instance.set(Calendar.MINUTE, 59);
+                instance.set(Calendar.SECOND, 59);
+                info.setExpiredate(instance.getTime());
+                userService.updateById(info);
+            }
+        }
+
+    }
+
+    @Override
+    public LicenseInfo getLastOne() {
+        LambdaQueryWrapper<LicenseInfo> wrapper = new LambdaQueryWrapper<>();
+        wrapper.orderByDesc(LicenseInfo::getSn);
+        return licenseInfoMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public LicenseInfo getLicenseById(Long id) {
+        LambdaQueryWrapper<LicenseInfo> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(LicenseInfo::getId, id);
+        wrapper.eq(LicenseInfo::getFlag, 0);
+        return licenseInfoMapper.selectOne(wrapper);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/LicenseStorageServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/LicenseStorageServiceImpl.java
new file mode 100644
index 0000000..dec1ecf
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/LicenseStorageServiceImpl.java
@@ -0,0 +1,29 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.LicenseStorage;
+import com.gk.firework.Mapper.LicenseStorageMapper;
+import com.gk.firework.Service.LicenseService;
+import com.gk.firework.Service.LicenseStorageService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author : jingjy
+ * @date : 2021/5/11 16:45
+ */
+@Service("LicenseStorageService")
+public class LicenseStorageServiceImpl extends ServiceImpl<LicenseStorageMapper, LicenseStorage> implements LicenseStorageService {
+    @Autowired
+    private LicenseStorageMapper licenseStorageMapper;
+
+    @Override
+    public List<LicenseStorage> getListByLicenseCode(String licensecode) {
+        LambdaQueryWrapper<LicenseStorage> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(LicenseStorage::getLicensecode,licensecode);
+        return licenseStorageMapper.selectList(wrapper);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/PatrolDetailServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/PatrolDetailServiceImpl.java
new file mode 100644
index 0000000..7f71262
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/PatrolDetailServiceImpl.java
@@ -0,0 +1,48 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.PatrolDetailInfo;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Vo.PatrolOrderVo;
+import com.gk.firework.Mapper.PatrolDetailInfoMapper;
+import com.gk.firework.Service.PatrolDetailService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service("PatrolDetailService")
+public class PatrolDetailServiceImpl extends ServiceImpl<PatrolDetailInfoMapper, PatrolDetailInfo> implements PatrolDetailService {
+    @Autowired
+    PatrolDetailInfoMapper patrolDetailInfoMapper;
+
+
+    @Override
+    public void selectDataGrid(PageInfo pageInfo) {
+        Page<PatrolDetailInfo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+        List<OrderItem> orderItems = new ArrayList<>();
+        OrderItem orderItem = new OrderItem();
+        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+            orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
+            orderItem.setColumn(pageInfo.getSort());
+        }else {
+            orderItem.setAsc(false);
+            orderItem.setColumn("modifieddate");
+        }
+        orderItems.add(orderItem);
+        page.setOrders(orderItems);
+        List<PatrolDetailInfo> list = patrolDetailInfoMapper.selectDataGrid(page,pageInfo.getCondition());
+
+        pageInfo.setResult(list);
+        pageInfo.setTotalCount(page.getTotal());
+    }
+
+    @Override
+    public int selectIsNotMend(Long orderid) {
+        return patrolDetailInfoMapper.selectIsNotMend(orderid);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/PatrolOrderServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/PatrolOrderServiceImpl.java
new file mode 100644
index 0000000..32fc962
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/PatrolOrderServiceImpl.java
@@ -0,0 +1,48 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.PatrolOrderInfo;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Vo.PatrolOrderVo;
+import com.gk.firework.Mapper.PatrolOrderInfoMapper;
+import com.gk.firework.Service.PatrolOrderService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service("PatrolOrderService")
+public class PatrolOrderServiceImpl extends ServiceImpl<PatrolOrderInfoMapper, PatrolOrderInfo> implements PatrolOrderService {
+    @Autowired
+    PatrolOrderInfoMapper patrolOrderInfoMapper;
+
+
+    @Override
+    public void selectDataGrid(PageInfo pageInfo) {
+        Page<PatrolOrderVo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+        List<OrderItem> orderItems = new ArrayList<>();
+        OrderItem orderItem = new OrderItem();
+        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+            orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
+            orderItem.setColumn(pageInfo.getSort());
+        }else {
+            orderItem.setAsc(false);
+            orderItem.setColumn("modifieddate");
+        }
+        orderItems.add(orderItem);
+        page.setOrders(orderItems);
+        List<PatrolOrderVo> list = patrolOrderInfoMapper.selectDataGrid(page,pageInfo.getCondition());
+
+        pageInfo.setResult(list);
+        pageInfo.setTotalCount(page.getTotal());
+    }
+
+    @Override
+    public List<PatrolOrderVo> selectListByEnterprise(String enterprisename, String username) {
+        return patrolOrderInfoMapper.selectListByEnterprise(enterprisename, username);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/PermissionServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/PermissionServiceImpl.java
new file mode 100644
index 0000000..ebbd558
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/PermissionServiceImpl.java
@@ -0,0 +1,142 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.PermissionInfo;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Vo.Menu;
+import com.gk.firework.Domain.Vo.SortData;
+import com.gk.firework.Mapper.PermissionInfoMapper;
+import com.gk.firework.Service.PermissionService;
+import com.gk.firework.Service.UserService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Service("PermissionService")
+public class PermissionServiceImpl extends ServiceImpl<PermissionInfoMapper, PermissionInfo> implements PermissionService {
+    @Autowired
+    private PermissionInfoMapper permissionInfoMapper;
+    @Autowired
+    private UserService userService;
+
+    @Override
+    public List<Menu> selectByUserId(String userId) {
+        List<Menu> menus = new ArrayList<>();
+
+        UserInfo userInfo = userService.getById(Integer.parseInt(userId));
+        if (null != userInfo && null != userInfo.getType()){
+            List<PermissionInfo> permissionInfoList = permissionInfoMapper.selectAll();
+            if (userInfo.getType() == 1){
+                //返回所有菜单
+                for (PermissionInfo permissionInfo : permissionInfoList){
+                    //一级菜单
+                    if (null == permissionInfo.getParentid()){
+                        Menu pmenu = new Menu();
+                        BeanUtils.copyProperties(permissionInfo,pmenu,Menu.class);
+                        List<Menu> iterateMenuList = iterateMenus(permissionInfoList,permissionInfo.getId());
+                        pmenu.setChildren(iterateMenuList);
+                        menus.add(pmenu);
+                    }
+                }
+            }else if (userInfo.getType() == 2){
+                //排除系统管理
+                for (PermissionInfo permissionInfo : permissionInfoList){
+                    //一级菜单
+                    if (null == permissionInfo.getParentid() && !permissionInfo.getTitle().equals("权限管理")){
+                        Menu pmenu = new Menu();
+                        BeanUtils.copyProperties(permissionInfo,pmenu,Menu.class);
+                        List<Menu> iterateMenuList = iterateMenus(permissionInfoList,permissionInfo.getId());
+                        pmenu.setChildren(iterateMenuList);
+                        menus.add(pmenu);
+                    }
+                }
+            }else {
+                permissionInfoList = permissionInfoMapper.selectByUserId(userId);
+                menus = addMenuList(permissionInfoList);
+//                for (PermissionInfo permissionInfo : permissionInfoList){
+//                    Menu pmenu = new Menu();
+//                    BeanUtils.copyProperties(permissionInfo,pmenu,Menu.class);
+//                    List<Menu> iterateMenuList = iterateMenus(permissionInfoList,permissionInfo.getId());
+//                    if (iterateMenuList.size() > 0) {
+//                        pmenu.setChildren(iterateMenuList);
+//                        menus.add(pmenu);
+//                    }
+//                }
+            }
+        }
+        return menus;
+    }
+
+    private List<Menu> iterateMenus(List<PermissionInfo> permissionInfoList, Integer pid) {
+        List<Menu> result = new ArrayList<Menu>();
+        for (PermissionInfo resource : permissionInfoList) {
+            Integer menuid = resource.getId();//获取菜单的id
+            Integer parentid = resource.getParentid();//获取菜单的父id
+            if(null != parentid && (parentid.equals(pid))){
+                Menu pmenu = new Menu();
+                BeanUtils.copyProperties(resource,pmenu,Menu.class);
+                List<Menu> iterateMenu = iterateMenus(permissionInfoList,menuid);
+                pmenu.setChildren(iterateMenu);
+                result.add(pmenu);
+            }
+        }
+        return result;
+    }
+
+    private List<Menu> addMenuList(List<PermissionInfo> permissionInfoList) {
+        List<Menu> menuList = new ArrayList<Menu>();
+        //一级菜单
+        for (PermissionInfo permissionInfo : permissionInfoList) {
+            if (permissionInfo.getType() == 1 && permissionInfo.getLevel() == 1 && permissionInfo.getStatus() == 1){
+                Menu menu = new Menu();
+                BeanUtils.copyProperties(permissionInfo,menu,Menu.class);
+                List<Menu> childList = new ArrayList<Menu>();
+                menu.setChildren(childList);
+                menuList.add(menu);
+            }
+        }
+        //二级菜单
+        for (PermissionInfo permissionInfo : permissionInfoList) {
+            if (permissionInfo.getType() == 1 && permissionInfo.getLevel() == 2 && permissionInfo.getStatus() == 1){
+                boolean isfound = false;
+                for (Menu menu : menuList){
+                    if (menu.getId().equals(permissionInfo.getParentid())){
+                        Menu pmenu = new Menu();
+                        BeanUtils.copyProperties(permissionInfo,pmenu,Menu.class);
+                        List<Menu> secList = iterateMenus(permissionInfoList,permissionInfo.getId());
+                        pmenu.setChildren(secList);
+                        menu.getChildren().add(pmenu);
+                        isfound = true;
+                        break;
+                    }
+                }
+                if (!isfound){
+                    PermissionInfo onePermission = this.getById(permissionInfo.getParentid());
+                    if (onePermission != null) {
+                        Menu childmenu = new Menu();
+                        BeanUtils.copyProperties(permissionInfo,childmenu,Menu.class);
+                        List<Menu> secList = new ArrayList<Menu>();
+                        childmenu.setChildren(secList);
+
+                        Menu onemenu = new Menu();
+                        BeanUtils.copyProperties(onePermission,onemenu,Menu.class);
+                        List<Menu> childList = new ArrayList<Menu>();
+                        childList.add(childmenu);
+                        onemenu.setChildren(childList);
+                        menuList.add(onemenu);
+                    }
+                }
+            }
+        }
+
+
+        return menuList.stream().sorted(Comparator.comparing(Menu::getSortorder)).collect(Collectors.toList());
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/ProductCategoryServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/ProductCategoryServiceImpl.java
new file mode 100644
index 0000000..7f9798d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/ProductCategoryServiceImpl.java
@@ -0,0 +1,69 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.ProductCategory;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Mapper.ProductCategoryMapper;
+import com.gk.firework.Service.ProductCategoryService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author : jingjy
+ * @date : 2021/4/22 9:56
+ */
+@Service("ProductCategoryService")
+public class ProductCategoryServiceImpl extends ServiceImpl<ProductCategoryMapper, ProductCategory> implements ProductCategoryService {
+    @Autowired
+    private ProductCategoryMapper productCategoryMapper;
+    @Override
+    public List<ProductCategory> selectAllOrByName(String name) {
+        LambdaQueryWrapper<ProductCategory> wrapper = new LambdaQueryWrapper<>();
+        if (StringUtils.isNotBlank(name)){
+            wrapper.like(ProductCategory::getName, name);
+        }
+        return productCategoryMapper.selectList(wrapper);
+    }
+
+    @Override
+    public List<ProductCategory> selectCategoryByType(byte type) {
+        LambdaQueryWrapper<ProductCategory> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ProductCategory::getType, type);
+        return productCategoryMapper.selectList(wrapper);
+    }
+
+    @Override
+    public List<ProductCategory> selectCategoryByTypeAndName(ProductCategory category) {
+        LambdaQueryWrapper<ProductCategory> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ProductCategory::getType, category.getType());
+        wrapper.eq(ProductCategory::getName, category.getName());
+        return productCategoryMapper.selectList(wrapper);
+    }
+
+    @Override
+    public List<ProductCategory> selectCategoryByMajorType(String major) {
+        LambdaQueryWrapper<ProductCategory> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ProductCategory::getType, (byte)2);
+        wrapper.eq(ProductCategory::getParentname, major);
+        wrapper.groupBy(ProductCategory::getName);
+        return productCategoryMapper.selectList(wrapper);
+    }
+
+    @Override
+    public ProductCategory selectCategoryByLevelAndName(String level, String secondaryType) {
+        LambdaQueryWrapper<ProductCategory> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ProductCategory::getLevel, level);
+        wrapper.eq(ProductCategory::getName,secondaryType);
+        return productCategoryMapper.selectOne(wrapper);
+    }
+
+
+    //查询是否存在一条数据
+    @Override
+    public boolean selectOne(String type, String secondaryType, String level) {
+       return  productCategoryMapper.countOne(type,secondaryType,level) == 1;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/ProductCodeServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/ProductCodeServiceImpl.java
new file mode 100644
index 0000000..f529aa7
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/ProductCodeServiceImpl.java
@@ -0,0 +1,47 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.ProductCodeInfo;
+import com.gk.firework.Mapper.ProductCodeInfoMapper;
+import com.gk.firework.Service.ProductCodeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service("ProductCodeService")
+public class ProductCodeServiceImpl extends ServiceImpl<ProductCodeInfoMapper, ProductCodeInfo> implements ProductCodeService {
+    @Autowired
+    ProductCodeInfoMapper productCodeInfoMapper;
+
+
+    @Override
+    public ProductCodeInfo selectByFourteen(String fourteen,String date) {
+        return productCodeInfoMapper.selectByFourteen(fourteen,date);
+    }
+
+    @Override
+    public void insertBatch(List<ProductCodeInfo> productCodeInfoList) {
+        productCodeInfoMapper.insertBatch(productCodeInfoList);
+    }
+
+    @Override
+    public List<ProductCodeInfo> selectByOrderCode(String ordercode) {
+        return productCodeInfoMapper.selectByOrderCode(ordercode);
+    }
+
+    @Override
+    public ProductCodeInfo selectByOriginalCode(String code) {
+        LambdaQueryWrapper<ProductCodeInfo> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ProductCodeInfo::getOriginalcode,code);
+        return productCodeInfoMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<ProductCodeInfo> selectByItemCode(String directionCode) {
+        LambdaQueryWrapper<ProductCodeInfo> wrapper = new LambdaQueryWrapper<>();
+        wrapper.likeRight(ProductCodeInfo::getOriginalcode,directionCode);
+        return productCodeInfoMapper.selectList(wrapper);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/ProductLocusServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/ProductLocusServiceImpl.java
new file mode 100644
index 0000000..0db7360
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/ProductLocusServiceImpl.java
@@ -0,0 +1,130 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Config.DataSource.MybatisPlusConfig;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.ProductLocusInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Vo.DirectionDetail;
+import com.gk.firework.Domain.Vo.FireworkDeal;
+import com.gk.firework.Domain.Vo.ProductLocusVo;
+import com.gk.firework.Domain.Vo.ProductVo;
+import com.gk.firework.Mapper.ProductLocusInfoMapper;
+import com.gk.firework.Service.ProductLocusService;
+import com.gk.firework.Service.ProductService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author : jingjy
+ * @date : 2021/3/24 14:34
+ */
+@Service("ProductLocusService")
+public class ProductLocusServiceImpl extends ServiceImpl<ProductLocusInfoMapper, ProductLocusInfo> implements ProductLocusService {
+    @Autowired
+    private ProductService productService;
+    @Autowired
+    private ProductLocusInfoMapper productLocusInfoMapper;
+
+    @Override
+    public int insertProductLocus(ProductLocusInfo productLocusInfo) {
+        int i = 0;
+        if (productLocusInfo == null){
+            return i;
+        }
+        String slice = productService.getSlice(productLocusInfo.getDirectioncode());
+        i = productLocusInfoMapper.insertProductLocus(productLocusInfo, slice);
+        return i;
+    }
+
+    @Override
+    public int insertBatch(List<ProductLocusInfo> productLocusInfos) {
+        int i = 0;
+        if (productLocusInfos == null || productLocusInfos.size() == 0){
+            return i;
+        }
+        for (ProductLocusInfo productLocusInfo : productLocusInfos){
+            i = insertProductLocus(productLocusInfo);
+        }
+        return i;
+    }
+
+    /**
+    * @Description: 条码流向查询
+    * @date 2021/4/14 16:01
+    */
+    @Override
+    public List<ProductLocusVo> getFlow(String directionCode) {
+
+        ArrayList<ProductLocusVo> result = new ArrayList<>();
+        //判空和长度判断
+        if (StringUtils.isBlank(directionCode)) throw new BusinessException("流向码不能为空");
+        if (FireworkDeal.isNotDirectionCode(directionCode)) throw new BusinessException("流向码非法");
+        //根据创建时间倒叙排序
+        DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(directionCode);
+        List<ProductVo> productVos = new ArrayList<>();
+        ProductVo productVo = productService.selectVoByDirection(directionCode);
+        if (productVo == null)  throw new BusinessException("产品不存在");
+        String slice = productService.getSlice(directionCode);
+        //22位码
+        if (FireworkDeal.is22Characters(directionCode)){
+            FireworkDeal.getProductVos(directionCode,directionDetail,directionDetail,productVos,productVo);
+            if (productVos.size() < 1) throw new BusinessException("产品流向码出现问题");
+            List<String>  codes= new ArrayList<>();
+            for (ProductVo product : productVos) {
+                codes.add(product.getDirectionCode());
+            }
+            //22位查询
+            List<ProductLocusVo> flow_22 = productLocusInfoMapper.selectLists(directionCode, slice);
+            if (flow_22.size() < 1) throw new BusinessException("查询结果不存在");
+            result.addAll(flow_22);
+            //19位查询
+            List<ProductLocusVo> flow_19 = productLocusInfoMapper.selectFlowByCodes(codes, slice);
+            assert flow_19.size() > 0;
+            result.addAll(flow_19);
+        }else{
+            //19位查询
+            List<ProductLocusVo> flow_19 =  productLocusInfoMapper.selectLists(directionCode,slice);
+            //19找22位箱
+            Integer boxNumber = productVo.getBoxNumber();
+            String serialNo = directionDetail.getSerialNo();
+            Integer serial = Integer.parseInt(serialNo);
+            int left_open_interval = serial - boxNumber;
+            int right_close_interval = serial;
+            List<String> codes = new ArrayList<>();
+            for (int i = left_open_interval + 1; i <= right_close_interval; i++) {
+                int abs = Math.abs(i);
+                String itemCode = directionDetail.getItemCode();
+                String dateCode = directionDetail.getDateCode();
+                String serials = String.format("%05d", abs);
+                String boxNumberCode = String.format("%03d", boxNumber);
+                String code = String.format("%s%s%s%s", itemCode, dateCode, serials, boxNumberCode);
+                codes.add(code);
+            }
+            List<ProductLocusVo> flow_22 =  productLocusInfoMapper.selectFlowByCodes(codes,slice);
+            assert flow_22.size() > 0;
+            result.addAll(flow_22);
+            result.addAll(flow_19);
+        }
+
+        if (result.size() >0 )
+            return result.stream().sorted(Comparator.comparing(ProductLocusVo::getCreateddate).reversed()).collect(Collectors.toList());
+
+        return result;
+    }
+
+    @Override
+    public int saveBatchLocus(List<ProductLocusInfo> productLocuses) {
+        if (productLocuses == null || productLocuses.size() == 0) {
+            throw new BusinessException("系统入参为空");
+        }
+        return productLocusInfoMapper.insertBatch(productLocuses);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/ProductPriceServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/ProductPriceServiceImpl.java
new file mode 100644
index 0000000..8ab56c9
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/ProductPriceServiceImpl.java
@@ -0,0 +1,32 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.ProductPriceInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Mapper.ProductPriceInfoMapper;
+import com.gk.firework.Service.ProductPriceService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service("ProductPriceService")
+public class ProductPriceServiceImpl extends ServiceImpl<ProductPriceInfoMapper, ProductPriceInfo> implements ProductPriceService {
+    @Autowired
+    ProductPriceInfoMapper productPriceInfoMapper;
+
+
+    @Override
+    public ProductPriceInfo selectByCode(String companynumber, String directionCode) {
+        return productPriceInfoMapper.selectByCode(companynumber,directionCode);
+    }
+
+    @Override
+    public List<ProductPriceInfo> selectByCodes(String companynumber, List<String> direction10CodesList) {
+        if (StringUtils.isBlank(companynumber) || direction10CodesList == null || direction10CodesList.size() == 0) {
+            throw new BusinessException("系统入参为空");
+        }
+        return productPriceInfoMapper.selectByCodes(companynumber, direction10CodesList);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/ProductServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/ProductServiceImpl.java
new file mode 100644
index 0000000..9d71453
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/ProductServiceImpl.java
@@ -0,0 +1,330 @@
+package com.gk.firework.Service.ServiceImpl;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.DO.ProductDO;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.ProductCodeInfo;
+import com.gk.firework.Domain.ProductInfo;
+import com.gk.firework.Domain.StockInfo;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.BeanUtils;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Vo.DirectionDetail;
+import com.gk.firework.Domain.Vo.FireworkDeal;
+import com.gk.firework.Domain.Vo.Product2JsonVo;
+import com.gk.firework.Domain.Vo.ProductVo;
+import com.gk.firework.Mapper.ProductInfoMapper;
+import com.gk.firework.Service.ExcelExportService;
+import com.gk.firework.Service.ProductCodeService;
+import com.gk.firework.Service.ProductService;
+import com.gk.firework.Service.StockService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @author : jingjy
+ * @date : 2021/3/16 10:21
+ */
+@Service("ProductService")
+public class ProductServiceImpl extends ServiceImpl<ProductInfoMapper, ProductInfo> implements ProductService{
+
+    @Autowired
+    private ProductInfoMapper productInfoMapper;
+    @Autowired
+    private ExcelExportService excelExportService;
+    @Autowired
+    private StockService stockService;
+    @Autowired
+    private ProductCodeService productCodeService;
+
+    @Override
+    public List<ProductInfo> selectProductInfos(Map<String, Object>condition) {
+        List<ProductInfo> productInfos = productInfoMapper.selectProductInfos(condition);
+        return productInfos;
+    }
+
+    @Override
+    public void selectDataGrid(PageInfo pageInfo) {
+        Page<ProductInfo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+
+        List<OrderItem> orderItems = new ArrayList<>();
+        OrderItem orderItem = new OrderItem();
+        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+            orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
+            orderItem.setColumn(pageInfo.getSort());
+        }else {
+            orderItem.setAsc(false);
+            orderItem.setColumn("createddate");
+        }
+        orderItems.add(orderItem);
+        page.setOrders(orderItems);
+        if (StringUtils.isBlank(pageInfo.getSort())){
+            pageInfo.setSort("createddate");
+        }
+        if (StringUtils.isBlank(pageInfo.getOrder())){
+            pageInfo.setOrder("desc");
+        }
+        List<ProductInfo> productInfos = productInfoMapper.selectProductDataGrid(pageInfo.getCondition(),page);
+        pageInfo.setResult(productInfos);
+        pageInfo.setTotalCount(page.getTotal());
+    }
+
+    @Override
+    public List<ProductInfo> selectByProduct(ProductInfo productInfo) {
+        if (productInfo == null || StringUtils.isBlank(productInfo.getDirectionCode())) {
+            return null;
+        }
+        return productInfoMapper.selectProductsByDirectionCode(productInfo.getDirectionCode(),productInfo.getCompanyNumber());
+    }
+
+    @Override
+    public boolean hasProductByDire(String directionCode) {
+        ProductInfo productInfo = productInfoMapper.selectProductByDirectionCode(directionCode);
+        return productInfo != null;
+    }
+
+    @Override
+    public List<String> hasNoProductByCodes(List<String> directionCodes) {
+        List<String>list = new ArrayList<>();
+        for (String dire : directionCodes){
+            if (!hasProductByDire(dire)){
+                list.add(dire);
+            }
+        }
+        return list;
+    }
+
+    @Override
+    public ProductInfo selectByDirection(String dire) {
+        if (StringUtils.isBlank(dire)|| dire.length() < 10){
+            return null;
+        }
+        dire = dire.substring(0,10);
+        return productInfoMapper.selectProductByDirectionCode(dire);
+    }
+
+    @Override
+    public ProductVo selectVoByDirection(String dire) {
+        DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(dire);
+        ProductInfo productInfo = productInfoMapper.selectProductByDirectionCode(directionDetail.getItemCode());
+        if (productInfo == null) return null;
+        ProductVo productVo = BeanUtils.copy(productInfo, ProductVo.class);
+        productVo.setDirectionCode(dire);
+        productVo.setItemCode(directionDetail.getItemCode());
+        productVo.setDateCode(directionDetail.getDateCode());
+        productVo.setSerialNo(directionDetail.getSerialNo());
+        return productVo;
+    }
+
+    @Override
+    public String getSlice(String directionCode){
+        if (StringUtils.isBlank(directionCode) || directionCode.length() < 10){
+            return "";
+        }
+
+        Integer slice = productInfoMapper.getSliceByDirectionCode(directionCode.substring(0,10));
+        if (slice == null){
+            return null;
+        }
+        return "_slice"+slice;
+    }
+
+    @Override
+    public String getSlice(Long productId){
+        if (productId == null){
+            return "";
+        }
+        ProductInfo productInfo = productInfoMapper.selectById(productId);
+        if (productInfo == null){
+            return null;
+        }
+        Integer slice = productInfoMapper.getSliceByDirectionCode(productInfo.getDirectionCode());
+        if (slice == null){
+            return null;
+        }
+        return "_slice"+slice;
+    }
+
+    @Override
+    public void deleteByEnterpriseName(String enterpriseName,String name) {
+        productInfoMapper.deleteByEnterpriseName(enterpriseName,name);
+    }
+
+    @Override
+    public List<Product2JsonVo> transform2Json(String enterprisenumber, MultipartFile file, UserInfo userInfo) {
+        if (StringUtils.isBlank(enterprisenumber)) {
+            throw new BusinessException("参数传递错误");
+        }
+        if (file == null || file.getSize() < 1 || file.getOriginalFilename() == null) {
+            throw new BusinessException("文件上传为空");
+        }
+
+        String originalFilename = file.getOriginalFilename();
+        try {
+            byte [] byteArr=file.getBytes();
+            InputStream inputStream = new ByteArrayInputStream(byteArr);
+            boolean isExcel2007 = originalFilename.substring(originalFilename.lastIndexOf(".") + 1).endsWith("xlsx");
+            //解析
+            List<Product2JsonVo> product2JsonVos = excelExportService.parsingProduct(inputStream, userInfo, isExcel2007, enterprisenumber);
+            //再做一遍筛查
+            assert product2JsonVos.size() > 0;
+            List<String> stringList = product2JsonVos.stream().map(Product2JsonVo::getDirectionCode)
+                    .collect(Collectors.toList());
+            long count = stringList.stream().distinct().count();
+            if (stringList.size() == count) {
+                return product2JsonVos;
+            } else {
+                throw new BusinessException("文件中有重复产品在不同行");
+            }
+
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+            throw new BusinessException("找不到文件");
+        } catch (IOException e) {
+            e.printStackTrace();
+            throw new BusinessException("发生错误,请联系管理员");
+        }
+
+    }
+
+
+    /**
+    * @Description: 根据产品编号和生产企业编号 查询个数
+    * @date 2021/5/24 15:45
+    */
+    @Override
+    public int countByEnterpriseNumberAndDirectionCode(String enterprisenumber, String directionCode) {
+        if (StringUtils.isBlank(enterprisenumber)) {
+            throw new BusinessException("企业编号不能为空");
+        }
+        if (StringUtils.isBlank(directionCode)) {
+            throw new BusinessException("产品编号不能为空");
+        }
+        LambdaQueryWrapper<ProductInfo> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(ProductInfo::getIsDel, (byte) 0).
+                eq(ProductInfo::getCompanyNumber, enterprisenumber)
+                .eq(ProductInfo::getDirectionCode, directionCode);
+        return productInfoMapper.selectCount(queryWrapper);
+    }
+
+    @Override
+    public List<Product2JsonVo> transform2JsonSimple(MultipartFile file, UserInfo userInfo) {
+        if (file == null || file.getSize() < 1 || file.getOriginalFilename() == null) {
+            throw new BusinessException("文件上传为空");
+        }
+
+        String originalFilename = file.getOriginalFilename();
+        try {
+            byte [] byteArr=file.getBytes();
+            InputStream inputStream = new ByteArrayInputStream(byteArr);
+            boolean isExcel2007 = originalFilename.substring(originalFilename.lastIndexOf(".") + 1).endsWith("xlsx");
+            //解析
+            List<Product2JsonVo> product2JsonVos = excelExportService.parsingProduct(inputStream, userInfo, isExcel2007);
+            //再做一遍筛查
+            assert product2JsonVos.size() > 0;
+            List<String> stringList = product2JsonVos.stream().map(Product2JsonVo::getDirectionCode)
+                    .collect(Collectors.toList());
+            long count = stringList.stream().distinct().count();
+            if (stringList.size() == count) {
+                return product2JsonVos;
+            } else {
+                throw new BusinessException("文件中有重复产品在不同行");
+            }
+
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+            throw new BusinessException("找不到文件");
+        } catch (IOException e) {
+            e.printStackTrace();
+            throw new BusinessException("发生错误,请联系管理员");
+        }
+    }
+
+    @Override
+    public List<ProductInfo> selectProductInfo(Map<String, Object> condition) {
+        return productInfoMapper.selectProductInfo(condition);
+    }
+
+    @Override
+    public List<String> getAllProductCodes() {
+        return productInfoMapper.getAllProductCodes();
+    }
+
+    @Override
+    @Transactional
+    public void importDataByExcel(MultipartFile file, UserInfo user) {
+        if (file == null || file.getSize() < 1 || file.getOriginalFilename() == null) {
+            throw new BusinessException("文件上传为空");
+        }
+
+        String originalFilename = file.getOriginalFilename();
+
+        try {
+            byte [] byteArr=file.getBytes();
+            InputStream inputStream = new ByteArrayInputStream(byteArr);
+            boolean isExcel2007 = originalFilename.substring(originalFilename.lastIndexOf(".") + 1).endsWith("xlsx");
+            //解析导入
+            List<ProductInfo> dataList= excelExportService.parseProductFromOldSystem(inputStream, user, isExcel2007);
+            assert dataList.size() > 0;
+            List<String> directionCodes = dataList.stream().map(ProductInfo::getDirectionCode)
+                    .collect(Collectors.toList());
+            long count = directionCodes.stream().distinct().count();
+            if (directionCodes.size() != count)
+                throw new BusinessException("文件中有重复产品流向码");
+
+            for (ProductInfo productInfo : dataList) {
+                productInfo.setIsOld((byte)1);
+                this.save(productInfo);
+            }
+
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+            throw new BusinessException("找不到文件");
+        } catch (IOException e) {
+            e.printStackTrace();
+            throw new BusinessException("发生错误,请联系管理员");
+        }
+    }
+
+    @Override
+    public boolean isProductUsed(Long id) {
+        ProductInfo productInfo = productInfoMapper.selectById(id);
+        if (productInfo == null){
+            return false;
+        }
+        List<StockInfo> stockInfos = stockService.selectStockByProductId(id);
+        if (stockInfos.size() > 0 ){
+            return true;
+        }
+        List<ProductCodeInfo> productCodeInfos =  productCodeService.selectByItemCode(productInfo.getDirectionCode());
+        return productCodeInfos.size() > 0;
+    }
+
+    @Override
+    public List<String> selectTypes() {
+
+        return productInfoMapper.selectTypes();
+    }
+
+    @Override
+    public List<ProductDO> selectDoByDirections(List<String> direction10Codes) {
+        if (direction10Codes == null || direction10Codes.size() == 0) {
+            throw new BusinessException("系统入参为空");
+        }
+        return productInfoMapper.selectDoByDirections(direction10Codes);
+    }
+}
+
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/ProductThresholdServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/ProductThresholdServiceImpl.java
new file mode 100644
index 0000000..d1df4f0
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/ProductThresholdServiceImpl.java
@@ -0,0 +1,15 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.ProductThresholdInfo;
+import com.gk.firework.Mapper.ProductThresholdInfoMapper;
+import com.gk.firework.Service.ProductThresholdService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author : jingjy
+ * @date : 2021/4/15 10:30
+ */
+@Service("ProductThresholdService")
+public class ProductThresholdServiceImpl  extends ServiceImpl<ProductThresholdInfoMapper, ProductThresholdInfo> implements ProductThresholdService {
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/RegisterServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/RegisterServiceImpl.java
new file mode 100644
index 0000000..227f8d2
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/RegisterServiceImpl.java
@@ -0,0 +1,88 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.EnterpriseResource;
+import com.gk.firework.Domain.RegisterInfo;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Vo.RegisterVo;
+import com.gk.firework.Mapper.RegisterInfoMapper;
+import com.gk.firework.Service.EnterpriseResourceService;
+import com.gk.firework.Service.RegisterService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author : jingjy
+ * @date : 2021/6/24 16:55
+ */
+@Service("RegisterService")
+public class RegisterServiceImpl extends ServiceImpl<RegisterInfoMapper, RegisterInfo>  implements RegisterService {
+
+    @Autowired
+    private RegisterInfoMapper registerInfoMapper;
+    @Autowired
+    private EnterpriseResourceService resourceService;
+
+    @Override
+    public List<RegisterInfo> needSendSmsList() {
+        Byte zero = 0;
+        Byte one = 1;
+        Byte two = 2;
+        LambdaQueryWrapper<RegisterInfo> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(RegisterInfo::getIssms,zero);
+        wrapper.in(RegisterInfo::getReviewresult,one,two);
+        wrapper.eq(RegisterInfo::getIsdel,zero);
+        return registerInfoMapper.selectList(wrapper);
+    }
+
+    @Override
+    public void selectDataGrid(PageInfo pageInfo) {
+        Page<RegisterVo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+
+        List<OrderItem> orderItems = new ArrayList<>();
+        OrderItem orderItem = new OrderItem();
+        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+            orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
+            orderItem.setColumn(pageInfo.getSort());
+        }else {
+            orderItem.setAsc(false);
+            orderItem.setColumn("createdat");
+        }
+        orderItems.add(orderItem);
+        page.setOrders(orderItems);
+        if (StringUtils.isBlank(pageInfo.getSort())){
+            pageInfo.setSort("createdat");
+        }
+        if (StringUtils.isBlank(pageInfo.getOrder())){
+            pageInfo.setOrder("desc");
+        }
+        List<RegisterVo> registerVos = registerInfoMapper.selectDataGrid(pageInfo.getCondition(),page);
+        List<RegisterVo> registerVoList = new ArrayList<>();
+        for (RegisterVo registerVo : registerVos){
+            List<String> business =resourceService.getUrlByBelongIdAndType(registerVo.getId(),RegisterVo.BUSINESS);
+            List<String> idCard =resourceService.getUrlByBelongIdAndType(registerVo.getId(),RegisterVo.ID_CARD);
+            List<String> legalPerson =resourceService.getUrlByBelongIdAndType(registerVo.getId(),RegisterVo.LEGAL_PERSON);
+            List<String> operation =resourceService.getUrlByBelongIdAndType(registerVo.getId(),RegisterVo.OPERATION);
+            List<String> escortCompany =resourceService.getUrlByBelongIdAndType(registerVo.getId(),RegisterVo.ESCORT_COMPANY);
+            List<String> insurance =resourceService.getUrlByBelongIdAndType(registerVo.getId(),RegisterVo.INSURANCE);
+            List<String> production =resourceService.getUrlByBelongIdAndType(registerVo.getId(),RegisterVo.PRODUCTION);
+            registerVo.setBusinessLicenseUrl(business);
+            registerVo.setIdCardUrl(idCard);
+            registerVo.setLegalPersonUrl(legalPerson);
+            registerVo.setOperationQualificationUrl(operation);
+            registerVo.setEscortCompanyUrl(escortCompany);
+            registerVo.setInsuranceUrl(insurance);
+            registerVo.setSafetyProductionUrl(production);
+            registerVoList.add(registerVo);
+        }
+        pageInfo.setResult(registerVoList);
+        pageInfo.setTotalCount(page.getTotal());
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/RolePermissionsServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/RolePermissionsServiceImpl.java
new file mode 100644
index 0000000..cad71a9
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/RolePermissionsServiceImpl.java
@@ -0,0 +1,28 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.RolePermissionsInfo;
+import com.gk.firework.Domain.Vo.Menu;
+import com.gk.firework.Mapper.RolePermissionsInfoMapper;
+import com.gk.firework.Service.RolePermissionsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service("RolePermissionsService")
+public class RolePermissionsServiceImpl extends ServiceImpl<RolePermissionsInfoMapper, RolePermissionsInfo> implements RolePermissionsService {
+    @Autowired
+    RolePermissionsInfoMapper rolePermissionsInfoMapper;
+
+
+    @Override
+    public List<Menu> selectMenuList(String roleId) {
+        return rolePermissionsInfoMapper.selectMenuList(roleId);
+    }
+
+    @Override
+    public void delRolePermissionByRoleId(Long roleid) {
+        rolePermissionsInfoMapper.delRolePermissionByRoleId(roleid);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/RoleServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/RoleServiceImpl.java
new file mode 100644
index 0000000..a8cbd1b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/RoleServiceImpl.java
@@ -0,0 +1,44 @@
+package com.gk.firework.Service.ServiceImpl;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.RoleInfo;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Mapper.RoleInfoMapper;
+import com.gk.firework.Service.RoleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service("RoleService")
+public class RoleServiceImpl extends ServiceImpl<RoleInfoMapper, RoleInfo> implements RoleService {
+
+    @Autowired
+    private RoleInfoMapper roleInfoMapper;
+
+
+    @Override
+    public List<RoleInfo> selectRoleByUser(Long id) {
+        return roleInfoMapper.selectRoleByUser(id);
+    }
+
+    @Override
+    public List<RoleInfo> selectList(String name) {
+        return roleInfoMapper.selectList(name);
+    }
+
+    @Override
+    public RoleInfo selectRoleByName(RoleInfo roleInfo){
+        roleInfo.setIsdel((byte)0);
+        QueryWrapper<RoleInfo> queryWrapper = new QueryWrapper<>(roleInfo);
+        return roleInfoMapper.selectOne(queryWrapper);
+    }
+
+    @Override
+    public List<RoleInfo> selectExistRole(Long id, String name) {
+        return roleInfoMapper.selectExistRole(id,name);
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/SaleOrderDetailServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/SaleOrderDetailServiceImpl.java
new file mode 100644
index 0000000..a3c9b18
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/SaleOrderDetailServiceImpl.java
@@ -0,0 +1,615 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Vo.*;
+import com.gk.firework.Mapper.SaleOrderDetailInfoMapper;
+import com.gk.firework.Service.*;
+import com.spire.doc.interfaces.IField;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.*;
+
+
+/**
+ * @author : jingjy
+ * @date : 2021/3/30 17:34
+ */
+@Service("SaleOrderDetailService")
+public class SaleOrderDetailServiceImpl extends ServiceImpl<SaleOrderDetailInfoMapper, SaleOrderDetailInfo> implements SaleOrderDetailService {
+    @Autowired
+    SaleOrderDetailInfoMapper saleOrderDetailInfoMapper;
+    @Autowired
+    SaleOrderService saleOrderService;
+    @Autowired
+    EnterpriseService enterpriseService;
+    @Autowired
+    ProductService productService;
+    @Autowired
+    private EntryDetailService entryDetailService;
+    @Autowired
+    private EntryService entryService;
+    @Autowired
+    private StockService stockService;
+    @Autowired
+    UserService userService;
+    @Autowired
+    DistrictService districtService;
+
+    @Override
+    public void selectByCustomId(PageInfo pageInfo) {
+        Page<SaleDetailVo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+        List<OrderItem> orderItems = new ArrayList<>();
+        OrderItem orderItem = new OrderItem();
+        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+            orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
+            orderItem.setColumn(pageInfo.getSort());
+        }else {
+            orderItem.setAsc(false);
+            orderItem.setColumn("createdat");
+        }
+        orderItems.add(orderItem);
+        page.setOrders(orderItems);
+        List<SaleDetailVo> list = saleOrderDetailInfoMapper.selectByCustomId(page,pageInfo.getCondition());
+        pageInfo.setResult(list);
+        pageInfo.setTotalCount(page.getTotal());
+    }
+
+
+    /**
+     * @Description: 近n天销售数据统计
+     * @date 2021/4/16 16:21
+     */
+    @Override
+    public List<Map> getSaleDataInDays(Integer days) {
+        Date startTime = moveForwardDays(days);
+        int[] index = new int[days];
+        for (int i = 0; i < days; i++) {
+            index[i] = i + 1;
+        }
+        return saleOrderDetailInfoMapper.getSaleDataInDays(startTime,null,index);
+    }
+
+
+    /**
+     * @Description: 销售数量按地区统计 n天 默认90
+     * @date 2021/4/16 16:21
+     */
+    @Override
+    public List<Map> getSaleDataAreaInDays(Integer days) {
+        Date startTime = moveForwardDays(days);
+        Map<String, Object> params = new HashMap<>();
+        params.put("province", "新疆维吾尔自治区");
+        return saleOrderDetailInfoMapper.getSaleDataAreaInDays(startTime,null,params);
+    }
+
+
+    /**
+     * @Description: 销售数量按品种统计 n天 默认90
+     * @date 2021/4/16 17:03
+     */
+    @Override
+    public List<Map> getSaleDataProductTypeInDays(Integer days) {
+        Date startTime = moveForwardDays(days);
+        return saleOrderDetailInfoMapper.getSaleDataProductTypeInDays(startTime,null);
+    }
+
+    /**
+    * @Description: 销售量同年对比
+    * @date 2021/4/22 15:13
+    */
+    @Override
+    public Map getSaleDataCompareInYear(String province, String city) {
+        //今年数据
+        Calendar cal = Calendar.getInstance();
+        int thisYear = cal.get(Calendar.YEAR);
+        List<Map> thisYearData = this.getSaleDataInYear(province, city, thisYear);
+        //去年数据
+        cal.add(Calendar.YEAR, -1);
+        int lastYear = cal.get(Calendar.YEAR);
+        List<Map> lastYearData = this.getSaleDataInYear(province, city, lastYear);
+        //生成结果
+        Map<Object, Object> result = new HashMap<>();
+        result.put(thisYear, thisYearData);
+        result.put(lastYear, lastYearData);
+        return result;
+    }
+
+    /**
+    * @Description: 获取{xxxx}年的销售数据
+    * @date 2021/4/22 15:50
+    */
+    @Override
+    public List<Map> getSaleDataInYear(String province, String city, Integer year) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("province", province);
+        params.put("city", city);
+        params.put("year", year);
+        return saleOrderDetailInfoMapper.getSaleDataInYear(params);
+    }
+
+    /**
+    * @Description: 进货量同年对比
+    * @date 2021/4/23 9:28
+    */
+    @Override
+    public Map getInboundCompareInYear(String province, String city) {
+        //今年数据
+        Calendar cal = Calendar.getInstance();
+        int thisYear = cal.get(Calendar.YEAR);
+        List<Map> thisYearData = this.getInboundInYear(province, city, thisYear);
+        //去年数据
+        cal.add(Calendar.YEAR, -1);
+        int lastYear = cal.get(Calendar.YEAR);
+        List<Map> lastYearData = this.getInboundInYear(province, city, lastYear);
+        //生成结果
+        Map<Object, Object> result = new HashMap<>();
+        result.put(thisYear, thisYearData);
+        result.put(lastYear, lastYearData);
+        return result;
+    }
+
+    /**
+    * @Description: 获取{xxxx}年的进货量
+    * @date 2021/4/23 9:31
+    */
+    @Override
+    public List<Map> getInboundInYear(String province, String city, Integer year) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("province", province);
+        params.put("city", city);
+        params.put("year", year);
+        return saleOrderDetailInfoMapper.getInboundInYear(params);
+    }
+    @Override
+    public List<SaleOrderDetailInfo> selectByOrderCode(String code) {
+        LambdaQueryWrapper<SaleOrderDetailInfo>wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SaleOrderDetailInfo::getOrdercode,code);
+        return saleOrderDetailInfoMapper.selectList(wrapper);
+    }
+
+    /**
+     * @Description: 标题数据 (零售店数量 今日销售数量 今年销售总量 今年购买人次)
+     * @date 2021/4/25 9:44
+     */
+    @Override
+    public Map getTitleData() {
+        //1.零售店数量
+        int saleShopNum = enterpriseService.getSaleNum();
+        //2.今日销售数量
+        int thisDaySaleNum = saleOrderDetailInfoMapper.getSaleNumThisDay();
+        //3.今年销售数量
+        int thisYearSaleNum = saleOrderDetailInfoMapper.getSaleNumThisYear();
+        //今年购买人数
+        int thisYearPurchasersNum = saleOrderDetailInfoMapper.getPurchasersNum();
+        Map<String, Integer> result = new HashMap<>();
+        result.put("saleShopNum", saleShopNum);
+        result.put("thisDaySaleNum", thisDaySaleNum);
+        result.put("thisYearSaleNum", thisYearSaleNum);
+        result.put("thisYearPurchasersNum", thisYearPurchasersNum);
+        return result;
+    }
+
+    @Override
+    public IPage getCityInAndOut(Page<Map> page, Map filter) {
+
+        Map<String, Object> params = new HashMap<>();
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        params.put("province", "新疆维吾尔自治区");
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        List<Map> list = saleOrderDetailInfoMapper.selectCityInAndOut(page, params);
+        page.setRecords(list);
+        return page;
+    }
+
+    @Override
+    public IPage getGenderSale(Page<Map> page, Map filter, UserInfo userInfo) {
+
+        Map<String, Object> params = new HashMap<>();
+        //可视权限
+        UserInfo user = userService.getById(userInfo.getId());
+        if (user.getCompanynumber() != null) {
+            params.put("enterprisenumber", user.getCompanynumber());
+        }else {
+            if (StringUtils.isNotBlank(user.getProvince())) {
+                params.put("province", user.getProvince());
+            }
+            if (StringUtils.isNotBlank(user.getCity())) {
+                params.put("city", user.getCity());
+            }
+            if (StringUtils.isNotBlank(user.getArea())) {
+                params.put("district", user.getArea());
+            }
+            if (StringUtils.isNotBlank(user.getTown())) {
+                params.put("street", user.getTown());
+            }
+
+            if (StringUtils.isNotBlank(user.getCommunity())) {
+                params.put("committee", user.getCommunity());
+            }
+        }
+
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("producttype", filter.get("producttype"));
+        params.put("secondarytype", filter.get("secondarytype"));
+        params.put("productname", filter.get("productname"));
+        params.put("provinceFilter", filter.get("province"));
+        params.put("cityFilter", filter.get("city"));
+        params.put("districtFilter", filter.get("district"));
+        params.put("streetFilter", filter.get("street"));
+        params.put("committeeFilter", filter.get("committee"));
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        List<Map> records =  saleOrderDetailInfoMapper.getGenderSale(page,params);
+        return page.setRecords(records);
+    }
+
+    @Override
+    public IPage getRaceSale(Page<Map> page, Map filter, UserInfo userInfo) {
+
+
+        Map<String, Object> params = new HashMap<>();
+
+        UserInfo user = userService.getById(userInfo.getId());
+        {
+            params.put("enterprisenumber", user.getCompanynumber());
+            params.put("province", user.getProvince());
+            params.put("city", user.getCity());
+            params.put("district", user.getArea());
+            params.put("street", user.getTown());
+            params.put("committee", user.getCommunity());
+        }
+
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("producttype", filter.get("producttype"));
+        params.put("secondarytype", filter.get("secondarytype"));
+        params.put("productname", filter.get("productname"));
+        params.put("provinceFilter", filter.get("province"));
+        params.put("cityFilter", filter.get("city"));
+        params.put("districtFilter", filter.get("city"));
+        params.put("streetFilter", filter.get("street"));
+        params.put("committeeFilter", filter.get("committee"));
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        List<Map> records =  saleOrderDetailInfoMapper.getRaceSale(page,params);
+        return page.setRecords(records);
+    }
+
+    @Override
+    public List<Map> getGenerationSale(Map filter, UserInfo userInfo) {
+        UserInfo user = userService.getById(userInfo.getId());
+        String[] generations = {"0-20", "20-30", "30-40", "40-50", "50-60", "60-70", "70"};
+        List<Map> table = new ArrayList<>();
+        Map<String, Object> row = null;
+        for (String generation : generations) {
+            Integer head = null;
+            Integer tail = null;
+            String[] split = generation.split("-");
+            head = Integer.valueOf(split[0]);
+            if (split.length > 1) {
+                tail = Integer.valueOf(split[1]);
+            }
+            int num = this.getSaleInfoByGeneration(head,tail,filter,user);
+            row = new HashMap<>();
+            row.put("generation", generation);
+            row.put("num", num);
+            table.add(row);
+        }
+        return table;
+    }
+
+
+    /**
+    * @Description: 年龄段购买数量
+    * @date 2021/5/15 17:05
+    */
+    @Override
+    public int getSaleInfoByGeneration(Integer head, Integer tail, Map filter,UserInfo user) {
+
+        Map<String, Object> params = new HashMap<>();
+        {
+            params.put("enterprisenumber", user.getCompanynumber());
+            params.put("province", user.getProvince());
+            params.put("city", user.getCity());
+            params.put("district", user.getArea());
+            params.put("street", user.getTown());
+            params.put("committee", user.getCommunity());
+        }
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("producttype", filter.get("producttype"));
+        params.put("secondarytype", filter.get("secondarytype"));
+        params.put("productname", filter.get("productname"));
+        params.put("provinceFilter", filter.get("province"));
+        params.put("cityFilter", filter.get("city"));
+        params.put("districtFilter", filter.get("city"));
+        params.put("streetFilter", filter.get("street"));
+        params.put("committeeFilter", filter.get("committee"));
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        //年龄段头尾
+        params.put("head", head);
+        params.put("tail", tail);
+        return saleOrderDetailInfoMapper.getSaleInfoByGeneration(params);
+    }
+
+    @Override
+    public List<SaleDetailVo> getDetailList(String directionCode) {
+        if (StringUtils.isBlank(directionCode)|| FireworkDeal.isNotDirectionCode(directionCode)) {
+            throw new BusinessException("流向码不符合规则");
+        }
+        List<String>  codes= new ArrayList<>();
+        //22位
+        if (FireworkDeal.is22Characters(directionCode)){
+            DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(directionCode);
+            List<ProductVo> productVos = new ArrayList<>();
+            ProductVo productVo = productService.selectVoByDirection(directionCode);
+            FireworkDeal.getProductVos(directionCode,directionDetail,directionDetail,productVos,productVo);
+            if (productVos.size() > 0) {
+                for (ProductVo product : productVos) {
+                    codes.add(product.getDirectionCode());
+                }
+            }
+        }else{
+            //19位
+            codes.add(directionCode);
+        }
+
+
+        if (codes.size() < 1) {
+            throw new BusinessException("流向码有误");
+        }
+
+        //循环查询
+        List<SaleDetailVo> details = new ArrayList<>();
+        for (String code : codes) {
+            SaleDetailVo saleDetailVo = saleOrderDetailInfoMapper.selectOneByDirectionCode(code);
+            if (saleDetailVo != null) {
+                details.add(saleDetailVo);
+            }
+        }
+        return details;
+    }
+
+    @Override
+    @Transactional
+    public void returnAndStorage(String directionCodes, String userId, String auth) {
+
+
+        if (StringUtils.isBlank(userId)) {
+            throw new BusinessException("用户信息不能为空");
+        }
+        UserInfo userInfo = userService.getById(userId);
+        if (userInfo == null) {
+            throw new BusinessException("用户不存在");
+        }
+
+        List<String> directionCodeList = new ArrayList<>();
+        if (FireworkDeal.is22Characters(directionCodes)){
+            DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(directionCodes);
+            List<ProductVo> productVos = new ArrayList<>();
+            ProductVo productVo = productService.selectVoByDirection(directionCodes);
+            FireworkDeal.getProductVos(directionCodes,directionDetail,directionDetail,productVos,productVo);
+            if (productVos.size() > 0) {
+                for (ProductVo product : productVos) {
+                    directionCodeList.add(product.getDirectionCode());
+                }
+            }
+        }else{
+            //19位
+            directionCodeList.add(directionCodes);
+        }
+
+
+        if (directionCodeList.size() < 1) {
+            throw new BusinessException("流向码有误");
+        }
+        for (String directionCode : directionCodeList) {
+
+            if (StringUtils.isBlank(directionCode) || FireworkDeal.isNotDirectionCode(directionCode)) {
+                throw new BusinessException("流向码不符合规则,退货失败!");
+            }
+            StockInfo stockInfo = stockService.selectStockByDirection(directionCode);
+//        if (stockInfo == null || !stockInfo.getOwner().equals(customerInfo.getId().toString())) {
+//            msg.setCode(ErrorCode.ERROR_CODE);
+//            msg.setMessage("库存状态异常,退货失败!");
+//            return msg;
+//        }
+            ProductInfo productInfo = productService.selectByDirection(directionCode.substring(0, 10));
+
+            // 创建入库单,type为2,创建入库明细,修改stock
+            EntryOrderInfo entryOrderInfo = entryService.generateEntryOrderInfo(EntryUtils.TH_ENTRY, userInfo, new Date(), "", auth);
+            EntryDetailInfo entryDetailInfo = new EntryDetailInfo(entryOrderInfo.getCode(), directionCode, productInfo.getDirectionCode(),
+                    productInfo.getName(), productInfo.getManufacturer(), new Date(),userInfo.getCompanynumber());
+            entryOrderInfo.setNum(1);
+            entryDetailInfo.setNum(1);
+            //查找未退货的商品记录
+            SaleOrderDetailInfo detailInfo = saleOrderService.selectOrderByDirectionReturnflag(directionCode,(byte) 0, null);
+            if (detailInfo == null) {
+                throw new BusinessException("条码:" + directionCode + ",已退货入库或者记录不存在");
+            }
+            Byte flag = 1;
+            detailInfo.setReturnflag(flag);
+            this.updateById(detailInfo);
+
+            int i = stockService.doReturn(stockInfo,userInfo,null, new Date());
+            if (i != 1){
+                throw new BusinessException("更新失败");
+            }else {
+                entryService.save(entryOrderInfo);
+                entryDetailService.save(entryDetailInfo);
+            }
+        }
+
+
+    }
+
+    @Override
+    public IPage selectSaleNumInfo(Page<SaleNumVo> page, Map<String, Object> filter, UserInfo user) {
+
+        List<SaleNumVo> records = saleOrderDetailInfoMapper.selectSaleNumInfo(page, filter);
+        page.setRecords(records);
+        return page;
+    }
+
+    @Override
+    public IPage selectSaleNumInfoDetail(Page<SaleOrderDetailInfo> page, Map<String, Object> filter, UserInfo user) {
+        List<SaleOrderDetailInfo> records = saleOrderDetailInfoMapper.selectSaleNumInfoDetail(page, filter);
+        page.setRecords(records);
+        return page;
+    }
+
+    @Override
+    public IPage getCityInAndOutDetail(Page<Map> page, Map<String, Object> filter) {
+
+        Map<String, Object> params = new HashMap<>();
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        params.put("province", "新疆维吾尔自治区");
+        params.put("city", filter.get("city"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        List<Map> list = saleOrderDetailInfoMapper.selectCityInAndOutDetail(page, params);
+        return page.setRecords(list);
+    }
+
+    @Override
+    public List<Map> getCityInAndOutExport(Map<String, Object> filter) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        params.put("province", "新疆维吾尔自治区");
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        return saleOrderDetailInfoMapper.selectCityInAndOut(params);
+    }
+
+    @Override
+    public IPage selectCityTypeSale(Page<Map> page, Map<String, Object> filter) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("province", "新疆维吾尔自治区");
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        List<String> list = productService.selectTypes();
+        List<Map> res =  saleOrderDetailInfoMapper.selectCityTypeSale(page,params,list);
+        Map totalRow = saleOrderDetailInfoMapper.selectAllType(list, params);
+        ArrayList<Map> result = new ArrayList<>(res);
+        result.add(totalRow);
+        return page.setRecords(result);
+    }
+
+    @Override
+    public List<Map> selectCityTypeSaleExport(Map<String, Object> filter) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("province", "新疆维吾尔自治区");
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        List<String> list = productService.selectTypes();
+        List<Map> res = saleOrderDetailInfoMapper.selectCityTypeSale(params, list);
+        Map totalRow = saleOrderDetailInfoMapper.selectAllType(list, params);
+        ArrayList<Map> result = new ArrayList<>(res);
+        result.add(totalRow);
+        return result;
+    }
+
+    @Override
+    public IPage selectEnterpriseTypeSale(Page<Map> page, Map<String, Object> filter, UserInfo user) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        params.put("province", filter.get("province"));
+        params.put("city", filter.get("city"));
+        params.put("district", filter.get("district"));
+        List<String> list = productService.selectTypes();
+        List<Map> res =  saleOrderDetailInfoMapper.selectEnterpriseTypeSale(page,params,list);
+        //合计行
+        Map totalRow = saleOrderDetailInfoMapper.selectAllType(list, params);
+        ArrayList<Map> result = new ArrayList<>(res);
+        result.add(totalRow);
+        return page.setRecords(result);
+    }
+
+    @Override
+    public List<Map> selectExportEnterpriseTypeSale(Map<String, Object> filter, UserInfo user) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        params.put("province", filter.get("province"));
+        params.put("city", filter.get("city"));
+        params.put("district", filter.get("district"));
+        List<String> list = productService.selectTypes();
+        List<Map> res =  saleOrderDetailInfoMapper.selectEnterpriseTypeSale(params,list);
+        //合计行
+        Map totalRow = saleOrderDetailInfoMapper.selectAllType(list, params);
+        ArrayList<Map> result = new ArrayList<>(res);
+        result.add(totalRow);
+        return result;
+    }
+
+
+    private Date moveForwardDays(Integer days) {
+        Calendar calendar = new GregorianCalendar();
+        calendar.setTime(new Date());
+        //当前日期往前推days天
+        calendar.add(Calendar.DATE, -days);
+        return calendar.getTime();
+    }
+
+    @Override
+    public IPage selectDistrictTypeSale(Page<Map> page, Map<String, Object> filter) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("province", "新疆维吾尔自治区");
+        params.put("city", filter.get("city"));
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        List<String> list = productService.selectTypes();
+        List<Map> res =  saleOrderDetailInfoMapper.selectDistrictTypeSale(page,params,list);
+        Map totalRow = saleOrderDetailInfoMapper.selectAllDistrictType(list, params);
+        ArrayList<Map> result = new ArrayList<>(res);
+        result.add(totalRow);
+        return page.setRecords(result);
+    }
+
+    @Override
+    public List<Map> selectDistrictTypeSaleExport(Map<String, Object> filter) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("province", "新疆维吾尔自治区");
+        params.put("city", filter.get("city"));
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        List<String> list = productService.selectTypes();
+        List<Map> res = saleOrderDetailInfoMapper.selectDistrictTypeSale(params, list);
+        Map totalRow = saleOrderDetailInfoMapper.selectAllDistrictType(list, params);
+        ArrayList<Map> result = new ArrayList<>(res);
+        result.add(totalRow);
+        return result;
+    }
+
+    @Override
+    public void saveBatchOrderDetailInfo(List<SaleOrderDetailInfo> detailInfoList) {
+        if (detailInfoList == null || detailInfoList.size() == 0) {
+            throw new BusinessException("系统参数为空");
+        }
+        int i = saleOrderDetailInfoMapper.saveBatchOrderDetailInfo(detailInfoList);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/SaleOrderServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/SaleOrderServiceImpl.java
new file mode 100644
index 0000000..b9a2270
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/SaleOrderServiceImpl.java
@@ -0,0 +1,801 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.BO.SaleOrderDetailInfoBO;
+import com.gk.firework.Domain.Enum.ErrorCode;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.Utils.Msg;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Vo.*;
+import com.gk.firework.Mapper.SaleOrderDetailInfoMapper;
+import com.gk.firework.Mapper.SaleOrderInfoMapper;
+import com.gk.firework.Mapper.UserInfoMapper;
+import com.gk.firework.Service.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.gk.firework.Domain.Vo.EntryUtils.RK_ENTRY;
+import static com.gk.firework.Domain.Vo.EntryUtils.TH_ENTRY;
+
+/**
+ * @author : jingjy
+ * @date : 2021/3/30 17:30
+ */
+@Service("SaleOrderService")
+public class SaleOrderServiceImpl extends ServiceImpl<SaleOrderInfoMapper, SaleOrderInfo> implements SaleOrderService {
+    @Autowired
+    private UserInfoMapper userInfoMapper;
+    @Autowired
+    private SaleOrderInfoMapper saleOrderInfoMapper;
+    @Autowired
+    private SaleOrderService saleOrderService;
+    @Autowired
+    private SaleOrderDetailService saleOrderDetailService;
+    @Autowired
+    private CustomerService customerService;
+    @Autowired
+    private StockService stockService;
+    @Autowired
+    private SaleOrderDetailInfoMapper saleOrderDetailInfoMapper;
+    @Autowired
+    private ProductService productService;
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private EnterpriseService enterpriseService;
+    @Autowired
+    private EntryService entryService;
+    @Autowired
+    private DistrictService districtService;
+    @Autowired
+    private DeliveryDetailService deliveryDetailService;
+
+    @Value("${hostId}")
+    private String hostId;
+
+    private static final String RETAIL_ORDER = "1";
+    private static final String GROUP_ORDER = "2";
+    private static final String NORMAL_DELIVERY = "1";
+    public static final String OTHER_DELIVERY = "2";
+    static final String MODULE_ENTRY = "入库";
+    public static final String MODULE_DELIVERY = "出库";
+    private static final String MODULE_SALE = "销售";
+
+    @Override
+    public SaleOrderInfo createOrder(UserInfo userInfo, List<SaleOrderDetailInfoBO> detailInfoList, String type, Integer num,
+                                     Date salesTime, Long customerId, String pay, String total, String change, String auth) {
+        //TODO:添加订单信息及订单详情信息
+        SaleOrderInfo orderInfo = new SaleOrderInfo();
+        orderInfo.setCode(generateOrderCode(MODULE_SALE,type,new Date(),userInfo.getId()));
+        orderInfo.setType(Byte.parseByte(type));
+        orderInfo.setCreatedat(salesTime);
+        orderInfo.setCreatedby(userInfo.getUsername());
+        orderInfo.setBoxnum(new BigDecimal(num));
+        orderInfo.setPay(new BigDecimal(pay));
+        orderInfo.setChange(new BigDecimal(change));
+        orderInfo.setSalesperson(userInfo.getUsername());
+        orderInfo.setTotalprice(new BigDecimal(total));
+        orderInfo.setShop(userInfo.getCompany());
+        orderInfo.setCompanynumber(userInfo.getCompanynumber());
+        orderInfo.setCustomer(customerId);
+        for (SaleOrderDetailInfo detailInfo : detailInfoList){
+            detailInfo.setOrdercode(orderInfo.getCode());
+            detailInfo.setCreatedat(salesTime);
+            detailInfo.setCreatedby(userInfo.getUsername());
+        }
+        saleOrderService.save(orderInfo);
+        saleOrderDetailService.saveBatchOrderDetailInfo(detailInfoList.stream().map(item -> (SaleOrderDetailInfo) item).collect(Collectors.toList()));
+
+        return orderInfo;
+    }
+
+    @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
+    @Override
+    public Msg doSalesProcess(JSONObject customer, Integer num, String idCardNum, UserInfo userInfo,
+                              List<SaleOrderDetailInfoBO> detailInfoList, String type, Date salesTime,
+                              String pay, String total, String change, String auth)  {
+
+        Msg msg = new Msg();
+        msg.setCode("200");
+        CustomerInfo customerInfo;
+        // 身份证表 存入和更新
+        try {
+            customerInfo = customerService.createOrUpdate(customer, num, salesTime);
+        } catch (ParseException e) {
+            throw new BusinessException("时间解析错误");
+        }
+
+//        CustomerInfo customerInfo = customerService.getCustomerByIdCardNum(idCardNum);
+
+        //扣库存
+        Msg result = stockService.changeStockBySale(customerInfo,detailInfoList,userInfo,salesTime);
+        if (!result.getCode().equals(ErrorCode.SUCCESS.getCode())){
+            msg = result;
+        }else {
+            //订单及详情生成
+            SaleOrderInfo saleOrderInfo = saleOrderService.createOrder(userInfo,detailInfoList,type,num,salesTime,customerInfo.getId(),pay,total,change, auth);
+            msg.setResult(saleOrderInfo);
+        }
+        return msg;
+    }
+
+    @Override
+    public List<SaleOrderDetailInfo> selectDetailByIdCardNum(String idCardNum, String directionCode) {
+        return saleOrderDetailInfoMapper.selectDetailByIdCardNumAndDire(idCardNum,directionCode);
+    }
+
+    @Override
+    public SaleOrderDetailInfo selectOrderByDirectionAndCustomer(String directionCode, CustomerInfo customerInfo) {
+        return saleOrderDetailInfoMapper.selectOrderByDirectionAndCustomer(directionCode, customerInfo.getId());
+    }
+
+    @Override
+    public void selectReturnDataGrid(PageInfo pageInfo) {
+        Page<SaleOrderDetailInfo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+
+        List<OrderItem> orderItems = new ArrayList<>();
+        OrderItem orderItem = new OrderItem();
+        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+            orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
+            orderItem.setColumn(pageInfo.getSort());
+        }else {
+            orderItem.setAsc(false);
+            orderItem.setColumn("createdat");
+        }
+        orderItems.add(orderItem);
+        page.setOrders(orderItems);
+        if (StringUtils.isBlank(pageInfo.getSort())){
+            pageInfo.setSort("createdat");
+        }
+        if (StringUtils.isBlank(pageInfo.getOrder())){
+            pageInfo.setOrder("desc");
+        }
+        List<SaleOrderDetailInfo> detailInfos = saleOrderDetailInfoMapper.selectDetailDataGridByIdCardNum(pageInfo.getCondition(),page);
+        pageInfo.setResult(detailInfos);
+        pageInfo.setTotalCount(page.getTotal());
+    }
+
+    /**
+    * @Description: 按零售单位查询
+    * @date 2021/4/12 16:35
+    */
+    @Override
+    public IPage selectSaleRecord2(Page<Map> page, Map filter, UserInfo user) {
+        Map<String, Object> params = new HashMap<>();
+        UserInfo userInfo = userService.getById(user.getId());
+        //过滤条件
+        //权限
+        {
+            params.put("enterprisenumber", userInfo.getCompanynumber());
+            params.put("province", user.getProvince());
+            params.put("city", user.getCity());
+            params.put("district", user.getArea());
+            params.put("street", user.getTown());
+            params.put("committee", user.getCommunity());
+        }
+        //基本
+        params.put("filterProvince", filter.get("province"));
+        params.put("filterCity", filter.get("city"));
+        params.put("filterDistrict", filter.get("district"));
+        params.put("filterStreet", filter.get("street"));
+        params.put("filterCommittee", filter.get("committee"));
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("parententerprisename", filter.get("parententerprisename"));
+
+        List<Map> list = saleOrderInfoMapper.selectSaleRecord2(page, params);
+        return page.setRecords(list);
+    }
+
+    /**
+    * @Description: 按产品查询,没有权限,显示所有产品
+    * @date 2021/4/13 8:54
+    */
+    @Override
+    public PageInfoExtension<Map> selectSaleRecord3(Page<Map> page, Map filter, UserInfo user) {
+
+        Map<String, Object> params = new HashMap<>();
+        UserInfo userInfo = userService.getById(user.getId());
+        //权限
+        {
+            params.put("enterprisenumber", userInfo.getCompanynumber());
+            params.put("province", user.getProvince());
+            params.put("city", user.getCity());
+            params.put("district", user.getArea());
+            params.put("street", user.getTown());
+            params.put("committee", user.getCommunity());
+        }
+        //过滤条件
+        //产品流向码,产品名称
+        params.put("itemcode", filter.get("itemcode"));
+        params.put("itemname", filter.get("itemname"));
+
+        params.put("filterProvince", filter.get("province"));
+        params.put("filterCity", filter.get("city"));
+        params.put("filterDistrict", filter.get("district"));
+        params.put("filterStreet", filter.get("street"));
+        params.put("filterCommittee", filter.get("committee"));
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("parententerprisename", filter.get("parententerprisename"));
+
+        List<Map> list = saleOrderInfoMapper.selectSaleRecord3(page, params);
+        //统计该查询条件下所有产品销售的总箱数
+        Map sales = saleOrderInfoMapper.selectProductSales(params);
+        PageInfoExtension<Map> extension = new PageInfoExtension<>();
+        extension.setExtension(sales);
+        extension.setPageSize((int) page.getSize());
+        extension.setPageIndex((int) page.getCurrent());
+        extension.setResult(list);
+        extension.setTotalCount(page.getTotal());
+        return extension;
+    }
+
+    /**
+    * @Description: 按购买人查询
+    * @date 2021/4/13 9:07
+    */
+    @Override
+    public IPage selectSaleRecord4(Page<Map> page, Map filter, UserInfo user) {
+
+        Map<String, Object> params = new HashMap<>();
+        UserInfo userInfo = userService.getById(user.getId());
+        //过滤条件
+        //权限
+        {
+            params.put("enterprisenumber", userInfo.getCompanynumber());
+            if (StringUtils.isNotBlank(userInfo.getCompanynumber())) {
+                List<Enterprise> subs = enterpriseService.selectSubEnterprise(userInfo.getCompanyid());
+                List<String> subList = subs.stream().map(Enterprise::getEnterprisenumber).collect(Collectors.toList());
+                if (subList.size() > 0)
+                    params.put("subList", subList);
+            }
+
+            params.put("province", user.getProvince());
+            params.put("city", user.getCity());
+            params.put("district", user.getArea());
+            params.put("street", user.getTown());
+            params.put("committee", user.getCommunity());
+        }
+        //基本
+        params.put("directioncode", filter.get("directioncode"));
+        params.put("identify", filter.get("identify"));
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("parententerprisename", filter.get("parententerprisename"));
+        params.put("isNeedUploadPhoto", filter.get("isNeedUploadPhoto"));
+        params.put("nation", filter.get("nation"));
+        //省市区
+        params.put("filterProvince", filter.get("province"));
+        params.put("filterCity", filter.get("city"));
+        params.put("filterDistrict", filter.get("district"));
+        params.put("filterStreet", filter.get("street"));
+        params.put("filterCommittee", filter.get("committee"));
+        List<Map> list = saleOrderInfoMapper.selectSaleRecord4(page, params);
+
+        Map<String, Object> totalRow = new HashMap<>();
+        //购买总人数
+        totalRow.put("city", "合计");
+        totalRow.put("enterprisename", "购买总人数");
+        Integer i = saleOrderInfoMapper.selectSaleAllPerson(params);
+        totalRow.put("name", i);
+        //购买总数
+        totalRow.put("identify", "购买总挂数");
+        Integer j = saleOrderInfoMapper.selectAllSaleNum(params);
+        totalRow.put("num", j);
+        //退货数量
+        Integer m = saleOrderInfoMapper.selectAllReturnNum(params);
+        totalRow.put("returnnum", m);
+        ArrayList<Map> res = new ArrayList<>(list);
+        res.add(totalRow);
+        return page.setRecords(res);
+    }
+
+    /**
+    * @Description: 根据销售企业的单位编号和人员的身份证获取购买明细
+    * @date 2021/4/14 12:43
+    */
+    @Override
+    public IPage getPurchaseDetailInUnit(Page<SaleOrderDetailInfo> page, Map filter, UserInfo user) {
+
+        String enterprisenumber = (String) filter.get("enterprisenumber");
+        String identify = (String) filter.get("identify");
+        if (StringUtils.isBlank(enterprisenumber) || StringUtils.isBlank(identify)) {
+            throw new BusinessException("企业单位编号和身份证不能为空");
+        }
+        Map<String, Object> params = new HashMap<>();
+        params.put("enterprisenumber", enterprisenumber);
+        params.put("identify", identify);
+        params.put("directioncode", filter.get("directioncode"));
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        List<SaleOrderDetailInfo> list = saleOrderInfoMapper.getPurchaseDetailInUnit(page, params);
+        return page.setRecords(list);
+    }
+
+    @Override
+    public List<SaleOrderInfo> selectEarlyWarn(String starttime, String endttime, Integer min, Integer max) {
+        return saleOrderInfoMapper.selectEarlyWarn(starttime, endttime, min, max);
+    }
+
+    @Override
+    public List<SaleOrderInfo> selectAlarm(String starttime, String endttime, Integer max) {
+        return saleOrderInfoMapper.selectAlarm(starttime, endttime, max);
+    }
+
+    @Override
+    public Long selectByCustomer(Long customid) {
+        return saleOrderInfoMapper.selectByCustomer(customid);
+    }
+
+    @Override
+    public BigDecimal getSaleNumByCondition(Map<String, Object> condition) {
+        return saleOrderDetailInfoMapper.getSaleNumByCondition(condition);
+    }
+
+    /**
+    * @Description: 销售汇总导出
+    * @date 2021/4/19 17:33
+    */
+    @Override
+    public List<Map> selectExportSaleRecord3(Map filter, UserInfo user) {
+
+        Map<String, Object> params = new HashMap<>();
+        UserInfo userInfo = userService.getById(user);
+        //权限
+        {
+            params.put("enterprisenumber", userInfo.getCompanynumber());
+            params.put("province", user.getProvince());
+            params.put("city", user.getCity());
+            params.put("district", user.getArea());
+            params.put("street", user.getTown());
+            params.put("committee", user.getCommunity());
+        }
+        //过滤条件
+        //产品流向码,产品名称
+        params.put("itemcode", filter.get("itemcode"));
+        params.put("itemname", filter.get("itemname"));
+
+        params.put("filterProvince", filter.get("province"));
+        params.put("filterCity", filter.get("city"));
+        params.put("filterDistrict", filter.get("district"));
+        params.put("filterStreet", filter.get("street"));
+        params.put("filterCommittee", filter.get("committee"));
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("parententerprisename", filter.get("parententerprisename"));
+
+        return saleOrderInfoMapper.selectSaleRecord3(params);
+    }
+
+    /**
+    * @Description: 实名销售导出
+    * @date 2021/4/19 17:40
+    */
+    @Override
+    public List<Map> selectExportSaleRecord4(Map filter, UserInfo user) {
+
+        Map<String, Object> params = new HashMap<>();
+        UserInfo userInfo = userService.getById(user.getId());
+        //过滤条件
+        //权限
+        {
+            params.put("enterprisenumber", userInfo.getCompanynumber());
+            if (StringUtils.isNotBlank(userInfo.getCompanynumber())) {
+                List<Enterprise> subs = enterpriseService.selectSubEnterprise(userInfo.getCompanyid());
+                List<String> subList = subs.stream().map(Enterprise::getEnterprisenumber).collect(Collectors.toList());
+                if (subList.size() > 0)
+                    params.put("subList", subList);
+            }
+            params.put("province", user.getProvince());
+            params.put("city", user.getCity());
+            params.put("district", user.getArea());
+            params.put("street", user.getTown());
+            params.put("committee", user.getCommunity());
+        }
+        //基本
+        params.put("directioncode", filter.get("directioncode"));
+        params.put("identify", filter.get("identify"));
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("parententerprisename", filter.get("parententerprisename"));
+        params.put("nation", filter.get("nation"));
+        //省市区
+        params.put("filterProvince", filter.get("province"));
+        params.put("filterCity", filter.get("city"));
+        params.put("filterDistrict", filter.get("district"));
+        params.put("filterStreet", filter.get("street"));
+        params.put("filterCommittee", filter.get("committee"));
+
+        List<Map> list = saleOrderInfoMapper.selectSaleRecord4(params);
+        Map<String, Object> totalRow = new HashMap<>();
+        //购买总人数
+        totalRow.put("city", "合计");
+        totalRow.put("enterprisename", "购买总人数");
+        Integer i = saleOrderInfoMapper.selectSaleAllPerson(params);
+        totalRow.put("name", i);
+        //购买总数
+        totalRow.put("identify", "购买总挂数");
+        Integer j = saleOrderInfoMapper.selectAllSaleNum(params);
+        totalRow.put("num", j);
+        //退货数量
+        Integer m = saleOrderInfoMapper.selectAllReturnNum(params);
+        totalRow.put("returnnum", m);
+        ArrayList<Map> res = new ArrayList<>(list);
+        res.add(totalRow);
+        return res;
+
+
+    }
+
+    @Override
+    public PageInfoExtension<List> selectDailySaleReport(PageInfo pageInfo) {
+        Page<DailySaleReport> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+
+        List<OrderItem> orderItems = new ArrayList<>();
+        OrderItem orderItem = new OrderItem();
+        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+            orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
+            orderItem.setColumn(pageInfo.getSort());
+        }else {
+            orderItem.setAsc(false);
+            orderItem.setColumn("createdat");
+        }
+        orderItems.add(orderItem);
+        page.setOrders(orderItems);
+        if (StringUtils.isBlank(pageInfo.getSort())){
+            pageInfo.setSort("createdat");
+        }
+        if (StringUtils.isBlank(pageInfo.getOrder())){
+            pageInfo.setOrder("desc");
+        }
+        List<DailySaleReport> reports = saleOrderInfoMapper.selectDailySaleReport(pageInfo.getCondition(),page);
+        pageInfo.setResult(reports);
+        pageInfo.setTotalCount(page.getTotal());
+        List<Map> list = saleOrderInfoMapper.selectAllDailySaleReport(pageInfo.getCondition());
+        PageInfoExtension<List> extension = new PageInfoExtension<>(pageInfo);
+        extension.setExtension(list);
+        return extension;
+    }
+
+    @Override
+    public void selectOrderDataGrid(PageInfo pageInfo) {
+        Page<SaleOrderInfo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+
+        List<OrderItem> orderItems = new ArrayList<>();
+        OrderItem orderItem = new OrderItem();
+        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+            orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
+            orderItem.setColumn(pageInfo.getSort());
+        }else {
+            orderItem.setAsc(false);
+            orderItem.setColumn("createdat");
+        }
+        orderItems.add(orderItem);
+        page.setOrders(orderItems);
+        if (StringUtils.isBlank(pageInfo.getSort())){
+            pageInfo.setSort("createdat");
+        }
+        if (StringUtils.isBlank(pageInfo.getOrder())){
+            pageInfo.setOrder("desc");
+        }
+        List<SaleOrderInfo> orderInfos = saleOrderInfoMapper.selectDataGrid(pageInfo.getCondition(),page);
+        if (orderInfos.size() > 0) {
+            for (SaleOrderInfo info : orderInfos) {
+                info.setDetails(saleOrderInfoMapper.selectDetails(info.getCode()));
+            }
+        }
+        pageInfo.setResult(orderInfos);
+        pageInfo.setTotalCount(page.getTotal());
+    }
+
+    @Override
+    public int getDailySaleCount(UserInfo userInfo) {
+        LambdaQueryWrapper<SaleOrderInfo>wrapper = new LambdaQueryWrapper<>();
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(new Date());
+        calendar.set(Calendar.HOUR_OF_DAY, 0);
+        calendar.set(Calendar.MINUTE, 0);
+        calendar.set(Calendar.SECOND, 0);
+        Date start = calendar.getTime();
+        calendar.set(Calendar.HOUR_OF_DAY, 23);
+        calendar.set(Calendar.MINUTE, 59);
+        calendar.set(Calendar.SECOND, 59);
+        Date end = calendar.getTime();
+        wrapper.ge(SaleOrderInfo::getCreatedat,start);
+        wrapper.le(SaleOrderInfo::getCreatedat,end);
+        wrapper.eq(SaleOrderInfo::getCompanynumber,userInfo.getCompanynumber());
+        return saleOrderInfoMapper.selectCount(wrapper);
+    }
+
+    @Override
+    public void selectEnterpriseEnterSellStoreDataGrid(PageInfo pageInfo, Map<String, Object> filter, UserInfo userInfo) {
+        Page<Enterprise> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+
+        Map<String, Object> params = new HashMap<>();
+        //过滤条件
+        params.put("filterProvince", filter.get("province"));
+        params.put("filterCity", filter.get("city"));
+        params.put("filterDistrict", filter.get("district"));
+        params.put("filterStreet", filter.get("street"));
+        params.put("filterCommittee", filter.get("committee"));
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("parententerprisename", filter.get("parententerprisename"));
+
+        if (userInfo != null && userInfo.getCompanynumber() != null){
+            params.put("enterprisenumber", userInfo.getCompanynumber());
+            List<Enterprise> subs = enterpriseService.selectSubEnterprise(userInfo.getCompanyid());
+            List<String> subList = subs.stream().map(Enterprise::getEnterprisenumber).collect(Collectors.toList());
+            if (subList.size() > 0)
+                params.put("subList", subList);
+        }
+
+        List<OrderItem> orderItems = new ArrayList<>();
+        OrderItem orderItem = new OrderItem();
+        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+            orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
+            orderItem.setColumn(pageInfo.getSort());
+        }else {
+            orderItem.setAsc(false);
+            orderItem.setColumn("id");
+        }
+        orderItems.add(orderItem);
+        page.setOrders(orderItems);
+        if (StringUtils.isBlank(pageInfo.getSort())){
+            pageInfo.setSort("id");
+        }
+        if (StringUtils.isBlank(pageInfo.getOrder())){
+            pageInfo.setOrder("asc");
+        }
+        List<Enterprise> enterprises = enterpriseService.selectSaleEnterprise(params,page);
+        List<EnterpriseDataVo> enterpriseDataVos = new ArrayList<>();
+        for (Enterprise enterprise : enterprises){
+            BigDecimal saleNumber = saleOrderInfoMapper.selectEnterpriseSaleNumber(enterprise.getEnterprisenumber(),filter.get("starttime"),filter.get("endtime"));
+            BigDecimal entryNumber = entryService.selectEnterpriseEntryNumber(enterprise.getEnterprisenumber(),filter.get("starttime"),filter.get("endtime"));
+            BigDecimal deliveryNumber = deliveryDetailService.selectEnterpriseDeliveryNumber(enterprise.getEnterprisenumber(), filter.get("starttime"), filter.get("endtime"));
+            EnterpriseDataVo enterpriseDataVo = new EnterpriseDataVo(enterprise.getEnterprisename(),saleNumber,entryNumber);
+            enterpriseDataVo.setDeliveryNumber(deliveryNumber);
+            enterpriseDataVos.add(enterpriseDataVo);
+        }
+        pageInfo.setResult(enterpriseDataVos);
+        pageInfo.setTotalCount(page.getTotal());
+    }
+
+    @Override
+    public List<EnterpriseDataVo> selectEnterpriseEnterSellStoreData(Map<String, Object> filter,UserInfo userInfo) {
+        Map<String, Object> params = new HashMap<>();
+        //过滤条件
+        params.put("filterProvince", filter.get("province"));
+        params.put("filterCity", filter.get("city"));
+        params.put("filterDistrict", filter.get("district"));
+        params.put("filterStreet", filter.get("street"));
+        params.put("filterCommittee", filter.get("committee"));
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("parententerprisename", filter.get("parententerprisename"));
+
+        if (userInfo != null && userInfo.getCompanynumber() != null){
+            params.put("enterprisename", userInfo.getCompany());
+        }
+
+        List<Enterprise> enterprises = enterpriseService.selectSaleEnterprise(params);
+        List<EnterpriseDataVo> enterpriseDataVos = new ArrayList<>();
+        for (Enterprise enterprise : enterprises){
+            BigDecimal saleNumber = saleOrderInfoMapper.selectEnterpriseSaleNumber(enterprise.getEnterprisenumber(),filter.get("starttime"),filter.get("endtime"));
+            BigDecimal entryNumber = entryService.selectEnterpriseEntryNumber(enterprise.getEnterprisenumber(),filter.get("starttime"),filter.get("endtime"));
+            BigDecimal deliveryNumber = deliveryDetailService.selectEnterpriseDeliveryNumber(enterprise.getEnterprisenumber(), filter.get("starttime"), filter.get("endtime"));
+            EnterpriseDataVo enterpriseDataVo = new EnterpriseDataVo(enterprise.getEnterprisename(),saleNumber,entryNumber);
+            enterpriseDataVo.setDeliveryNumber(deliveryNumber);
+            enterpriseDataVos.add(enterpriseDataVo);
+        }
+        return enterpriseDataVos;
+    }
+
+    @Override
+    public SaleOrderDetailInfo selectOrderByDirectionReturnflag(String directionCode, byte returnflag, String datetime) {
+        return saleOrderDetailInfoMapper.selectOrderByDirectionReturnflag(directionCode,returnflag,datetime);
+    }
+
+    @Override
+    public void selectCityEnterSellStoreDataGrid(PageInfo pageInfo, Map<String, Object> filter) {
+        Page<Enterprise> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+
+        Map<String, Object> params = new HashMap<>();
+        //过滤条件
+        params.put("filterProvince", filter.get("province"));
+        params.put("filterCity", filter.get("city"));
+        params.put("filterDistrict", filter.get("district"));
+        params.put("filterStreet", filter.get("street"));
+        params.put("filterCommittee", filter.get("committee"));
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("parententerprisename", filter.get("parententerprisename"));
+
+        List<OrderItem> orderItems = new ArrayList<>();
+        OrderItem orderItem = new OrderItem();
+        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+            orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
+            orderItem.setColumn(pageInfo.getSort());
+        }else {
+            orderItem.setAsc(false);
+            orderItem.setColumn("id");
+        }
+        orderItems.add(orderItem);
+        page.setOrders(orderItems);
+        if (StringUtils.isBlank(pageInfo.getSort())){
+            pageInfo.setSort("id");
+        }
+        if (StringUtils.isBlank(pageInfo.getOrder())){
+            pageInfo.setOrder("asc");
+        }
+
+        List<DistrictInfo> districtInfos = districtService.selectInfoByParentCodeAndCity("65",filter.get("city"));
+        List<CityDataVo> cityDataVos = new ArrayList<>();
+        for (DistrictInfo districtInfo : districtInfos){
+            BigDecimal saleNumber = saleOrderInfoMapper.selectCitySaleNumber(districtInfo.getName(),filter.get("starttime"),filter.get("endtime"));
+            BigDecimal entryNumber = entryService.selectCityEntryNumber(districtInfo.getName(),filter.get("starttime"),filter.get("endtime"));
+            //销售金额
+            BigDecimal sales = saleOrderInfoMapper.selectCitySales(districtInfo.getName(),filter.get("starttime"),filter.get("endtime"));
+            BigDecimal saleNumber2 = saleOrderInfoMapper.selectCitySaleNumber(districtInfo.getName(),filter.get("starttime2"),filter.get("endtime2"));
+            BigDecimal entryNumber2 = entryService.selectCityEntryNumber(districtInfo.getName(),filter.get("starttime2"),filter.get("endtime2"));
+            ////销售金额
+            BigDecimal sales2 = saleOrderInfoMapper.selectCitySales(districtInfo.getName(),filter.get("starttime2"),filter.get("endtime2"));
+            String dataRange = filter.get("starttime")+" - "+filter.get("endtime");
+            String dataRange2 = filter.get("starttime2")+" - "+filter.get("endtime2");
+            CityDataVo cityDataVo = new CityDataVo(districtInfo.getName(),dataRange,saleNumber,entryNumber,dataRange2,saleNumber2,entryNumber2);
+            cityDataVo.setSales(sales);
+            cityDataVo.setSales2(sales2);
+            cityDataVos.add(cityDataVo);
+        }
+        pageInfo.setResult(cityDataVos);
+        pageInfo.setTotalCount(page.getTotal());
+    }
+
+    /**
+    * @Description: 按流向码查询
+    * @date 2021/4/12 16:35
+    */
+    @Override
+    public IPage selectSaleRecord1(Page<Map> page,Map filter, UserInfo user) {
+
+        Map<String, Object> params = new HashMap<>();
+        UserInfo userInfo = userService.getById(user.getId());
+        //过滤条件
+        //权限
+        {
+            params.put("enterprisenumber", userInfo.getCompanynumber());
+            params.put("province", user.getProvince());
+            params.put("city", user.getCity());
+            params.put("district", user.getArea());
+            params.put("street", user.getTown());
+            params.put("committee", user.getCommunity());
+        }
+        //基本
+        params.put("filterProvince", filter.get("province"));
+        params.put("filterCity", filter.get("city"));
+        params.put("filterDistrict", filter.get("district"));
+        params.put("filterStreet", filter.get("street"));
+        params.put("filterCommittee", filter.get("committee"));
+        params.put("starttime", filter.get("starttime"));
+        params.put("endtime", filter.get("endtime"));
+        params.put("identify", filter.get("identify"));
+        params.put("directioncode", filter.get("directioncode"));
+        params.put("safetySupervision", filter.get("safetySupervision"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("parententerprisename", filter.get("parententerprisename"));
+        List<Map> list = saleOrderInfoMapper.selectSaleRecord1(page, params);
+        return page.setRecords(list);
+    }
+
+
+
+    public SaleOrderInfo generateSaleOrderInfo(String type, UserInfo userInfo, Integer num, Date salesTime,
+                                                      Long customerId, String pay, String total, String change, String userId){
+        SaleOrderInfo orderInfo = new SaleOrderInfo();
+        orderInfo.setCode(generateOrderCode(MODULE_SALE,type,new Date(),userInfo.getId()));
+        orderInfo.setType(Byte.parseByte(type));
+        orderInfo.setCreatedat(salesTime);
+        orderInfo.setCreatedby(userInfo.getUsername());
+        orderInfo.setBoxnum(new BigDecimal(num));
+        orderInfo.setPay(new BigDecimal(pay));
+        orderInfo.setChange(new BigDecimal(change));
+        orderInfo.setSalesperson(userInfo.getUsername());
+        orderInfo.setTotalprice(new BigDecimal(total));
+        orderInfo.setShop(userInfo.getCompany());
+        orderInfo.setCompanynumber(userInfo.getCompanynumber());
+        orderInfo.setCustomer(customerId);
+
+        return orderInfo;
+    }
+
+    @Override
+    public String generateOrderCode(String module, String type, Date date, Long userId){
+        //DateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+        //创建Instant对象
+        Instant instant = Instant.now();
+        //获取毫秒数
+        long currentMilli = instant.toEpochMilli();
+        String orderCode = String.valueOf(currentMilli);
+        String extend = String.format("%06d",userId);
+        switch (module) {
+            case MODULE_ENTRY:
+                if (type.equals(RK_ENTRY)) {
+                    orderCode = "RK-" + orderCode;
+                } else if (type.equals(TH_ENTRY)) {
+                    orderCode = "TH-" + orderCode;
+                }
+                break;
+            case MODULE_DELIVERY:
+                if (type.equals(NORMAL_DELIVERY)) {
+                    orderCode = "ND-" + orderCode;
+                } else {
+                    orderCode = "OD-" + orderCode;
+                }
+                break;
+            case MODULE_SALE:
+                if (type.equals(RETAIL_ORDER)) {
+                    orderCode = "RO-" + orderCode;
+                } else if (type.equals(GROUP_ORDER)) {
+                    orderCode = "GO-" + orderCode;
+                }
+                break;
+            default:
+        }
+
+        return orderCode+extend+hostId+Thread.currentThread().getId();
+    }
+
+    @Override
+    public SaleOrderInfo isExist(Long id, String companynumber, Date salesTime) {
+        LambdaQueryWrapper<SaleOrderInfo>wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SaleOrderInfo::getCreatedat,salesTime);
+        wrapper.eq(SaleOrderInfo::getCustomer,id);
+        wrapper.eq(SaleOrderInfo::getCompanynumber,companynumber);
+        return baseMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<SaleOrderInfo> getWaitUploadOrderByEnterprise(Enterprise enterprise) {
+        LambdaQueryWrapper<SaleOrderInfo> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SaleOrderInfo::getIsupload,0);
+        wrapper.ge(SaleOrderInfo::getCreatedat,"2022-01-21");
+        wrapper.eq(SaleOrderInfo::getCompanynumber,enterprise.getEnterprisenumber());
+        return baseMapper.selectList(wrapper);
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/SaleProductServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/SaleProductServiceImpl.java
new file mode 100644
index 0000000..89a9b88
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/SaleProductServiceImpl.java
@@ -0,0 +1,22 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.SaleProductInfo;
+import com.gk.firework.Mapper.SaleProductInfoMapper;
+import com.gk.firework.Service.SaleProductService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service("SaleProductService")
+public class SaleProductServiceImpl extends ServiceImpl<SaleProductInfoMapper, SaleProductInfo> implements SaleProductService {
+    @Autowired
+    SaleProductInfoMapper saleProductInfoMapper;
+
+
+    @Override
+    public List<SaleProductInfo> selectRandom(int n) {
+        return saleProductInfoMapper.selectRandom(n);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/SecuritySupervisoryServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/SecuritySupervisoryServiceImpl.java
new file mode 100644
index 0000000..7598579
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/SecuritySupervisoryServiceImpl.java
@@ -0,0 +1,34 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.SecuritySupervisory;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Mapper.SecuritySupervisoryMapper;
+import com.gk.firework.Service.SecuritySupervisoryService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service("securitySupervisoryService")
+public class SecuritySupervisoryServiceImpl extends ServiceImpl<SecuritySupervisoryMapper, SecuritySupervisory> implements SecuritySupervisoryService {
+
+    @Autowired
+    private SecuritySupervisoryMapper securitySupervisoryMapper;
+
+    @Override
+    public Page<SecuritySupervisory> selectPage (Page<SecuritySupervisory> page, String name) {
+
+        LambdaQueryWrapper<SecuritySupervisory> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.select(SecuritySupervisory::getId,
+                SecuritySupervisory::getLevel,
+                SecuritySupervisory::getCode,
+                SecuritySupervisory::getName)
+                .eq(SecuritySupervisory::getValidflag, true);
+        if (StringUtils.isNotBlank(name)) {
+            queryWrapper.like(SecuritySupervisory::getName, name);
+        }
+        return securitySupervisoryMapper.selectPage(page,queryWrapper);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/SelfCheckReportServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/SelfCheckReportServiceImpl.java
new file mode 100644
index 0000000..f0f246c
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/SelfCheckReportServiceImpl.java
@@ -0,0 +1,191 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.Enterprise;
+import com.gk.firework.Domain.SelfCheckReport;
+import com.gk.firework.Domain.Utils.JsonUtils;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Vo.SelfCheckReportSearchVo;
+import com.gk.firework.Domain.Vo.SelfCheckReportVo;
+import com.gk.firework.Mapper.EnterpriseMapper;
+import com.gk.firework.Mapper.SelfCheckReportMapper;
+import com.gk.firework.Service.EnterpriseService;
+import com.gk.firework.Service.SelfCheckReportService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@Service("SelfCheckReportService")
+public class SelfCheckReportServiceImpl extends ServiceImpl<SelfCheckReportMapper,SelfCheckReport> implements SelfCheckReportService {
+
+    @Autowired
+    SelfCheckReportMapper selfCheckReportMapper;
+
+    @Autowired
+    EnterpriseService enterpriseService;
+
+
+    @Override
+    public int createNewReport(SelfCheckReportVo reportVo) {
+        if(checkVoForCreate(reportVo) == false){
+            return 0;
+        }
+        SelfCheckReport selfCheckReport = null;
+        Enterprise e = enterpriseService.getById(reportVo.getEid());
+        if(e!= null){
+            selfCheckReport = new SelfCheckReport();
+            Date sysTime = new Date();
+            selfCheckReport.setEid(e.getId());
+            selfCheckReport.setEname(e.getEnterprisename());
+            selfCheckReport.setChecktime(sysTime);
+            selfCheckReport.setPrice(reportVo.getPrice());
+            if(reportVo.getStatus()==1 || reportVo.getStatus()==2){
+                selfCheckReport.setStatus(reportVo.getStatus());
+            }
+            else{
+                selfCheckReport.setStatus((byte)1);
+            }
+            selfCheckReport.setYhdesc(reportVo.getYhdesc());
+            selfCheckReport.setYhlevel(reportVo.getYhlevel());
+            selfCheckReport.setSolution(reportVo.getSolution());
+            selfCheckReport.setEndtime(reportVo.getEndtime());
+            selfCheckReport.setChargeperson(reportVo.getChargeperson());
+        }
+        if(selfCheckReport!=null){
+            return selfCheckReportMapper.insert(selfCheckReport);
+        }else {
+            return 0;
+        }
+    }
+
+    @Override
+    public SelfCheckReport getSelfCheckReportById(Long id) {
+        return selfCheckReportMapper.selectByReportId(id);
+    }
+
+    @Override
+    public int updateSelfCheckReport(SelfCheckReportVo reportVo) {
+        SelfCheckReport report = selfCheckReportMapper.selectByReportId(reportVo.getId());
+        if(report == null){
+            return 0;
+        }
+        if(!report.getEid().equals(reportVo.getEid())){
+            return 0;
+        }
+        if(report.getStatus() == 2){
+            return 0;
+        }
+        if(report.getStatus() ==1 && reportVo.getStatus() == 2){
+            report.setStatus((byte) 2);
+        }
+        if(!reportVo.getChargeperson().isEmpty()){
+            report.setChargeperson(reportVo.getChargeperson());
+        }
+        if(!reportVo.getYhdesc().isEmpty()){
+            report.setYhdesc(reportVo.getYhdesc());
+        }
+        if(reportVo.getEndtime() != null){
+            report.setEndtime(reportVo.getEndtime());
+        }
+        if(!reportVo.getSolution().isEmpty()){
+            report.setSolution(reportVo.getSolution());
+        }
+        if(reportVo.getYhlevel() == 1 || reportVo.getYhlevel() == 2){
+            report.setYhlevel(reportVo.getYhlevel());
+        }
+        report.setPrice(reportVo.getPrice());
+        return selfCheckReportMapper.updateReport(report);
+    }
+
+
+    @Override
+    public List<SelfCheckReport> findSelfCheckReportList(Long enterpriseId, Byte status,Byte yhlevel) {
+        return selfCheckReportMapper.selectReportListByCondition(enterpriseId,status,yhlevel);
+    }
+
+    @Override
+    public List<SelfCheckReport> findSelfCheckReportListWithAllCondition(SelfCheckReportSearchVo searchVo) {
+        //1、解析企业ID集合
+        List<Long> eidList = null;
+        //优先级别:1-指定企业ID,2-指定企业名称。3-指定省市区范围
+        if(searchVo.getEid() != null && searchVo.getEid().longValue() > 0){
+            if(enterpriseService.getById(searchVo.getEid())!=null){
+                eidList = new ArrayList<>();
+                eidList.add(searchVo.getEid());
+            }else {
+                return null;
+            }
+        }else if(searchVo.getEname() != null && !searchVo.getEname().isEmpty()){
+            List<Enterprise> list = enterpriseService.selectEnterpriseListByNameLike(searchVo.getEname());
+            if(list != null && list.size() >0){
+                eidList = new ArrayList<>();
+                for(Enterprise e : list){
+                    eidList.add(e.getId());
+                }
+            }else {
+                return null;
+            }
+        }else if(searchVo.getProvince()!=null && !searchVo.getProvince().isEmpty()){
+            List<Enterprise> enterpriseList = enterpriseService.findEnterpriseListByLocation(searchVo.getProvince(),searchVo.getCity(),searchVo.getDistrict(),searchVo.getStreet(),searchVo.getCommittee());
+            if(enterpriseList!=null){
+                eidList = new ArrayList<>();
+                for(Enterprise e : enterpriseList){
+                    eidList.add(e.getId());
+                }
+            }
+            if(eidList == null || eidList.size()<=0 ){
+                return null;
+            }
+        }
+        //2、设定分页参数
+        if (searchVo.getPage()==null || searchVo.getPage() <=0){
+            //未指定页数,默认第1页
+            searchVo.setPage(1);
+        }
+        if(searchVo.getPageSize() == null || searchVo.getPageSize() <= 0){
+            //未指定页大小,默认20条
+            searchVo.setPageSize(20);
+        }
+        Page<SelfCheckReport> page = new Page<>(searchVo.getPage(),searchVo.getPageSize());
+        List<OrderItem> orderItems = new ArrayList<>();
+        OrderItem orderItem = new OrderItem();
+        orderItem.setAsc(false);
+        orderItem.setColumn("id");
+        orderItems.add(orderItem);
+        page.setOrders(orderItems);
+        //3、查找
+        List<SelfCheckReport> list = null;
+        list =  selfCheckReportMapper.selectReportListWithEnterpriseIdList(eidList,searchVo.getStatus(),searchVo.getYhlevel(),searchVo.getStartTime(),searchVo.getEndTime(),page);
+        searchVo.setTotalCount(page.getTotal());
+        return list;
+    }
+
+    /**
+     * 新增隐患信息参数检查
+     * @param reportVo
+     * @return
+     */
+    private boolean checkVoForCreate(SelfCheckReportVo reportVo){
+        if(reportVo.getStatus()<1 ||reportVo.getStatus()>2){
+           return false;
+        }
+        if(reportVo.getYhlevel() <1 || reportVo.getYhlevel() >2){
+           return false;
+        }
+        if(reportVo.getChargeperson().isEmpty() || reportVo.getYhdesc().isEmpty() || reportVo.getSolution().isEmpty()){
+           return false;
+        }
+        if(reportVo.getPrice().intValue()<0){
+            return false;
+        }
+        if(reportVo.getEndtime().before(new Date())){
+            return false;
+        }
+        return true;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/SelfCheckServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/SelfCheckServiceImpl.java
new file mode 100644
index 0000000..0b27eb3
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/SelfCheckServiceImpl.java
@@ -0,0 +1,51 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.SelfCheckInfo;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Mapper.SelfCheckInfoMapper;
+import com.gk.firework.Service.SelfCheckService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service("SelfCheckService")
+public class SelfCheckServiceImpl extends ServiceImpl<SelfCheckInfoMapper, SelfCheckInfo> implements SelfCheckService {
+    @Autowired
+    SelfCheckInfoMapper selfCheckInfoMapper;
+
+
+    @Override
+    public List<SelfCheckInfo> selctByType(String type) {
+        return selfCheckInfoMapper.selctByType(type);
+    }
+
+    @Override
+    public void selectDataGrid(PageInfo pageInfo) {
+        Page<SelfCheckInfo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+        List<OrderItem> orderItems = new ArrayList<>();
+        OrderItem orderItem = new OrderItem();
+        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+            orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
+            orderItem.setColumn(pageInfo.getSort());
+        }else {
+            orderItem.setAsc(false);
+            orderItem.setColumn("createddate");
+        }
+        orderItems.add(orderItem);
+        page.setOrders(orderItems);
+        List<SelfCheckInfo> list = selfCheckInfoMapper.selectDataGrid(page,pageInfo.getCondition());
+        pageInfo.setResult(list);
+        pageInfo.setTotalCount(page.getTotal());
+    }
+
+    @Override
+    public List<SelfCheckInfo> selectByIds(List<Long> idList){
+        return selfCheckInfoMapper.selectByIds(idList);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/SmsLogServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/SmsLogServiceImpl.java
new file mode 100644
index 0000000..a52b3f5
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/SmsLogServiceImpl.java
@@ -0,0 +1,25 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.SmsLogInfo;
+import com.gk.firework.Mapper.SmsLogInfoMapper;
+import com.gk.firework.Service.SmsLogService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service("SmsLogService")
+public class SmsLogServiceImpl extends ServiceImpl<SmsLogInfoMapper, SmsLogInfo> implements SmsLogService {
+    @Autowired
+    SmsLogInfoMapper smsLogInfoMapper;
+
+
+    @Override
+    public SmsLogInfo selectByTel(String mobile, String starttime, String endtime,Byte type) {
+        return smsLogInfoMapper.selectByTel(mobile,starttime,endtime,type);
+    }
+
+    @Override
+    public void deleteByTime(String seventime) {
+        smsLogInfoMapper.deleteByTime(seventime);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/SoldNoStockServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/SoldNoStockServiceImpl.java
new file mode 100644
index 0000000..5ddd708
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/SoldNoStockServiceImpl.java
@@ -0,0 +1,96 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Mapper.SoldNoStockInfoMapper;
+import com.gk.firework.Service.ProductService;
+import com.gk.firework.Service.SoldNoStockService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author : jingjy
+ * @date : 2021/4/7 15:19
+ */
+@Service("SoldNoStockService")
+public class SoldNoStockServiceImpl extends ServiceImpl<SoldNoStockInfoMapper, SoldNoStockInfo> implements SoldNoStockService {
+    @Autowired
+    private SoldNoStockInfoMapper soldNoStockInfoMapper;
+    @Autowired
+    private ProductService productService;
+
+    @Override
+    public void selectSoldNoStockDataGrid(PageInfo pageInfo) {
+        Page<SaleOrderDetailInfo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+
+        List<OrderItem> orderItems = new ArrayList<>();
+        OrderItem orderItem = new OrderItem();
+        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+            orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
+            orderItem.setColumn(pageInfo.getSort());
+        }else {
+            orderItem.setAsc(false);
+            orderItem.setColumn("createdat");
+        }
+        orderItems.add(orderItem);
+        page.setOrders(orderItems);
+        if (StringUtils.isBlank(pageInfo.getSort())){
+            pageInfo.setSort("createdat");
+        }
+        if (StringUtils.isBlank(pageInfo.getOrder())){
+            pageInfo.setOrder("desc");
+        }
+        List<SaleOrderDetailInfo> detailInfos = soldNoStockInfoMapper.selectSoldNoStockDataGrid(pageInfo.getCondition(),page);
+        pageInfo.setResult(detailInfos);
+        pageInfo.setTotalCount(page.getTotal());
+    }
+
+    @Override
+    public SoldNoStockInfo selectSoldNoStockByDire(String directionCode) {
+        LambdaQueryWrapper<SoldNoStockInfo> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(SoldNoStockInfo::getDirectioncode, directionCode);
+        return soldNoStockInfoMapper.selectOne(queryWrapper);
+    }
+
+    @Override
+    public List<SoldNoStockInfo> selectSoldNoStocksUnprocessed(Enterprise enterprise) {
+        LambdaQueryWrapper<SoldNoStockInfo> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(SoldNoStockInfo::getCompanynumber, enterprise.getEnterprisenumber());
+        queryWrapper.eq(SoldNoStockInfo::getFlag, SoldNoStockInfo.UNPROCESSED);
+        return soldNoStockInfoMapper.selectList(queryWrapper);
+    }
+
+    @Override
+    public void saveByStock(StockInfo stockInfo, Date salesTime, UserInfo userInfo) {
+        SoldNoStockInfo soldNoStockInfo = new SoldNoStockInfo();
+        soldNoStockInfo.setDirectioncode(stockInfo.getDirectioncode());
+        ProductInfo productInfo1 = productService.selectByDirection(stockInfo.getDirectioncode());
+        soldNoStockInfo.setItemcode(productInfo1.getDirectionCode());
+        soldNoStockInfo.setItemname(productInfo1.getName());
+        soldNoStockInfo.setSalestime(salesTime);
+        soldNoStockInfo.setSalesperson(userInfo.getUsername());
+        soldNoStockInfo.setCompanynumber(userInfo.getCompanynumber());
+        soldNoStockInfo.setCreatedat(new Date());
+        soldNoStockInfo.setCreatedby("系统生成");
+        soldNoStockInfo.setContent(productInfo1.getManufacturer());
+        this.save(soldNoStockInfo);
+    }
+
+    @Override
+    public void saveBatchInfo(List<SoldNoStockInfo> soldNoStockInfos) {
+        if (soldNoStockInfos == null || soldNoStockInfos.size() == 0) {
+            throw new BusinessException("系统入参为空");
+        }
+        int i = soldNoStockInfoMapper.insertBatch(soldNoStockInfos);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/StandardConferenceRecordServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/StandardConferenceRecordServiceImpl.java
new file mode 100644
index 0000000..0d79ab7
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/StandardConferenceRecordServiceImpl.java
@@ -0,0 +1,91 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.StandardConferenceRecord;
+import com.gk.firework.Domain.StandardSupplyMarketObject;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Mapper.StandardConferenceRecordMapper;
+import com.gk.firework.Service.StandardConferenceRecordService;
+import com.gk.firework.Service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service("standardConferenceRecordService")
+public class StandardConferenceRecordServiceImpl extends ServiceImpl<StandardConferenceRecordMapper, StandardConferenceRecord> implements StandardConferenceRecordService {
+
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private StandardConferenceRecordMapper standardConferenceRecordMapper;
+
+
+    @Override
+    public IPage selectPage(Page<StandardConferenceRecord> page, Map filter, UserInfo userInfo) {
+        UserInfo user = userService.getById(userInfo.getId());
+        Map<String, Object> params = new HashMap<>();
+        //菜单
+        //可视权限
+        {
+            params.put("enterprisenumber", user.getCompanynumber());
+            params.put("province", user.getProvince());
+            params.put("city", user.getCity());
+            params.put("district", user.getArea());
+            params.put("street", user.getTown());
+            params.put("committee", user.getCommunity());
+        }
+
+        params.put("filterProvince", filter.get("province"));
+        params.put("filterCity", filter.get("city"));
+        params.put("filterDistrict", filter.get("district"));
+        params.put("filterStreet", filter.get("street"));
+        params.put("filterCommittee", filter.get("committee"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        List<StandardConferenceRecord> list = standardConferenceRecordMapper.selectPages(page,params);
+
+        return page.setRecords(list);
+    }
+
+    @Override
+    public void addStandardConferenceRecord(StandardConferenceRecord standardConferenceRecord, UserInfo userInfo) {
+
+        UserInfo user = userService.getById(userInfo.getId());
+        standardConferenceRecord.setCreateby(user.getId());
+        standardConferenceRecord.setCreatebyname(user.getUsername());
+        standardConferenceRecord.setCreatetime(new Date());
+        standardConferenceRecord.setValidflag(true);
+        standardConferenceRecord.setEnterprisenumber(user.getUsername());
+        standardConferenceRecord.setEnterprisename(user.getUsername());
+        this.save(standardConferenceRecord);
+    }
+
+    @Override
+    public void modStandardConferenceRecord(StandardConferenceRecord standardConferenceRecord, UserInfo user) {
+
+        standardConferenceRecord.setUpdateby(user.getId());
+        standardConferenceRecord.setUpdatetime(new Date());
+        standardConferenceRecord.setUpdatebyname(user.getUsername());
+        this.updateById(standardConferenceRecord);
+    }
+
+    @Override
+    public void delStandardConferenceRecord(Long id, UserInfo user) {
+        LambdaUpdateWrapper<StandardConferenceRecord> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(StandardConferenceRecord::getValidflag, false)
+                .set(StandardConferenceRecord::getUpdatetime, new Date())
+                .set(StandardConferenceRecord::getUpdateby, user.getId())
+                .set(StandardConferenceRecord::getUpdatebyname,user.getUsername())
+                .eq(StandardConferenceRecord::getId, id);
+        this.update(updateWrapper);
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/StandardDeviceToolsLegerServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/StandardDeviceToolsLegerServiceImpl.java
new file mode 100644
index 0000000..01ac36c
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/StandardDeviceToolsLegerServiceImpl.java
@@ -0,0 +1,91 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.StandardDeviceToolsLeger;
+import com.gk.firework.Domain.StandardGuardRoll;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Mapper.StandDeviceToolsLegerMapper;
+import com.gk.firework.Service.StandardDeviceToolsLegerService;
+import com.gk.firework.Service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.List;
+
+@Service("standardDeviceToolsLegerService")
+public class StandardDeviceToolsLegerServiceImpl extends ServiceImpl<StandDeviceToolsLegerMapper, StandardDeviceToolsLeger> implements StandardDeviceToolsLegerService {
+
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private StandDeviceToolsLegerMapper standDeviceToolsLegerMapper;
+
+    @Override
+    public IPage selectPage(Page<StandardDeviceToolsLeger> page, Map filter, UserInfo userInfo) {
+        UserInfo user = userService.getById(userInfo.getId());
+        Map<String, Object> params = new HashMap<>();
+        //菜单
+        //可视权限
+        {
+            params.put("enterprisenumber", user.getCompanynumber());
+            params.put("province", user.getProvince());
+            params.put("city", user.getCity());
+            params.put("district", user.getArea());
+            params.put("street", user.getTown());
+            params.put("committee", user.getCommunity());
+        }
+
+        params.put("filterProvince", filter.get("province"));
+        params.put("filterCity", filter.get("city"));
+        params.put("filterDistrict", filter.get("district"));
+        params.put("filterStreet", filter.get("street"));
+        params.put("filterCommittee", filter.get("committee"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        List<StandardDeviceToolsLeger> list = standDeviceToolsLegerMapper.selectPages(page, params);
+
+        return page.setRecords(list);
+    }
+
+    @Override
+    public void addDeviceToolsLeger(StandardDeviceToolsLeger standardDeviceToolsLeger, UserInfo userInfo) {
+
+        UserInfo user = userService.getById(userInfo.getId());
+        standardDeviceToolsLeger.setCreateby(user.getId());
+        standardDeviceToolsLeger.setCreatebyname(user.getUsername());
+        standardDeviceToolsLeger.setCreatetime(new Date());
+        standardDeviceToolsLeger.setValidflag(true);
+        standardDeviceToolsLeger.setEnterprisenumber(user.getUsername());
+        standardDeviceToolsLeger.setEnterprisename(user.getUsername());
+        this.save(standardDeviceToolsLeger);
+
+    }
+
+    @Override
+    public void modDeviceToolsLeger(StandardDeviceToolsLeger standardDeviceToolsLeger, UserInfo user) {
+        standardDeviceToolsLeger.setUpdatebyname(user.getUsername());
+        standardDeviceToolsLeger.setUpdatetime(new Date());
+        standardDeviceToolsLeger.setUpdateby(user.getId());
+        this.updateById(standardDeviceToolsLeger);
+    }
+
+    @Override
+    public void delDeviceToolsLeger(Long id, UserInfo user) {
+        LambdaUpdateWrapper<StandardDeviceToolsLeger> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(StandardDeviceToolsLeger::getValidflag, false)
+                .set(StandardDeviceToolsLeger::getUpdatetime, new Date())
+                .set(StandardDeviceToolsLeger::getUpdateby, user.getId())
+                .set(StandardDeviceToolsLeger::getUpdatebyname,user.getUsername())
+                .eq(StandardDeviceToolsLeger::getId, id);
+        this.update(updateWrapper);
+
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/StandardEducationLegerServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/StandardEducationLegerServiceImpl.java
new file mode 100644
index 0000000..b6a9a99
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/StandardEducationLegerServiceImpl.java
@@ -0,0 +1,121 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.StandardEducationLeger;
+import com.gk.firework.Domain.StandardLawList;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.Properties;
+import com.gk.firework.Domain.Utils.UploadUtil;
+import com.gk.firework.Mapper.StandardEducationLegerMapper;
+import com.gk.firework.Service.StandardEducationLegerService;
+import com.gk.firework.Service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service("standardEducationLegerService")
+public class StandardEducationLegerServiceImpl  extends ServiceImpl<StandardEducationLegerMapper, StandardEducationLeger> implements StandardEducationLegerService {
+
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private StandardEducationLegerMapper standardEducationLegerMapper;
+
+    /**
+    * @Description: 查询从业人员教育培训台账
+    * @date 2021/5/8 16:33
+    */
+    @Override
+    public IPage selectPage(Page<StandardEducationLeger> page, Map filter, UserInfo userInfo) {
+
+
+        UserInfo user = userService.getById(userInfo.getId());
+        Map<String, Object> params = new HashMap<>();
+        //菜单
+        //可视权限
+        {
+            params.put("enterprisenumber", user.getCompanynumber());
+            params.put("province", user.getProvince());
+            params.put("city", user.getCity());
+            params.put("district", user.getArea());
+            params.put("street", user.getTown());
+            params.put("committee", user.getCommunity());
+        }
+
+        params.put("filterProvince", filter.get("province"));
+        params.put("filterCity", filter.get("city"));
+        params.put("filterDistrict", filter.get("district"));
+        params.put("filterStreet", filter.get("street"));
+        params.put("filterCommittee", filter.get("committee"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        List<StandardEducationLeger> list =  standardEducationLegerMapper.selectPages(page,params);
+        return page.setRecords(list);
+    }
+
+    @Override
+    public void addStandardEducationLeger(StandardEducationLeger standardEducationLeger, UserInfo userInfo) {
+        if (standardEducationLeger.getFile() == null) {
+            throw new BusinessException("需要上传文件");
+        }
+
+        UserInfo user = userService.getById(userInfo.getId());
+        standardEducationLeger.setCreateby(user.getId());
+        standardEducationLeger.setCreatebyname(user.getUsername());
+        standardEducationLeger.setCreatetime(new Date());
+        standardEducationLeger.setValidflag(true);
+        standardEducationLeger.setEnterprisenumber(user.getUsername());
+        standardEducationLeger.setEnterprisename(user.getUsername());
+
+        assert standardEducationLeger.getFile() != null;
+        try {
+            String name = UploadUtil.uploadFile(standardEducationLeger.getFile(), Properties.standardPath);
+            standardEducationLeger.setFilename(standardEducationLeger.getFile().getOriginalFilename());
+            standardEducationLeger.setUrl(Properties.standard + name);
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new BusinessException("上传文件失败");
+        }
+        this.save(standardEducationLeger);
+    }
+
+
+
+    @Override
+    public void modStandardEducationLeger(StandardEducationLeger standardEducationLeger, UserInfo user) {
+        standardEducationLeger.setUpdateby(user.getId());
+        standardEducationLeger.setUpdatebyname(user.getUsername());
+        standardEducationLeger.setUpdatetime(new Date());
+
+        try {
+            if (standardEducationLeger.getFile() != null) {
+                String name = UploadUtil.uploadFile(standardEducationLeger.getFile(), Properties.standardPath);
+                standardEducationLeger.setFilename(standardEducationLeger.getFile().getOriginalFilename());
+                standardEducationLeger.setUrl(Properties.standard + name);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new BusinessException("上传文件失败");
+        }
+        this.updateById(standardEducationLeger);
+    }
+
+    @Override
+    public void delStandardEducationLeger(Long id, UserInfo user) {
+        LambdaUpdateWrapper<StandardEducationLeger> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(StandardEducationLeger::getValidflag, false)
+                .set(StandardEducationLeger::getUpdatetime, new Date())
+                .set(StandardEducationLeger::getUpdateby, user.getId())
+                .set(StandardEducationLeger::getUpdatebyname,user.getUsername())
+                .eq(StandardEducationLeger::getId, id);
+        this.update(updateWrapper);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/StandardGuardRollServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/StandardGuardRollServiceImpl.java
new file mode 100644
index 0000000..711d8fb
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/StandardGuardRollServiceImpl.java
@@ -0,0 +1,90 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.StandardGuardRoll;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Mapper.StandardGuardRollMapper;
+import com.gk.firework.Service.StandardGuardRollService;
+import com.gk.firework.Service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.List;
+
+@Service("standardGuardRollService")
+public class StandardGuardRollServiceImpl extends ServiceImpl<StandardGuardRollMapper, StandardGuardRoll> implements StandardGuardRollService {
+
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private StandardGuardRollMapper standardGuardRollMapper;
+
+
+    @Override
+    public IPage selectPage(Page<StandardGuardRoll> page, Map filter, UserInfo userInfo) {
+        UserInfo user = userService.getById(userInfo.getId());
+        Map<String, Object> params = new HashMap<>();
+        //菜单
+        //可视权限
+        {
+            params.put("enterprisenumber", user.getCompanynumber());
+            params.put("province", user.getProvince());
+            params.put("city", user.getCity());
+            params.put("district", user.getArea());
+            params.put("street", user.getTown());
+            params.put("committee", user.getCommunity());
+        }
+
+        params.put("filterProvince", filter.get("province"));
+        params.put("filterCity", filter.get("city"));
+        params.put("filterDistrict", filter.get("district"));
+        params.put("filterStreet", filter.get("street"));
+        params.put("filterCommittee", filter.get("committee"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        List<StandardGuardRoll> list =  standardGuardRollMapper.selectPages(page,params);
+        return page.setRecords(list);
+    }
+
+
+    @Override
+    public void addStandardGuardRoll(StandardGuardRoll standardGuardRoll, UserInfo userInfo) {
+
+        UserInfo user = userService.getById(userInfo.getId());
+        standardGuardRoll.setCreateby(user.getId());
+        standardGuardRoll.setCreatebyname(user.getUsername());
+        standardGuardRoll.setCreatetime(new Date());
+        standardGuardRoll.setValidflag(true);
+        standardGuardRoll.setEnterprisenumber(user.getUsername());
+        standardGuardRoll.setEnterprisename(user.getUsername());
+
+        this.save(standardGuardRoll);
+    }
+
+    @Override
+    public void modStandardGuardRoll(StandardGuardRoll standardGuardRoll, UserInfo user) {
+        standardGuardRoll.setUpdatebyname(user.getUsername());
+        standardGuardRoll.setUpdatetime(new Date());
+        standardGuardRoll.setUpdateby(user.getId());
+        this.updateById(standardGuardRoll);
+    }
+
+    @Override
+    public void delStandardGuardRoll(Long id, UserInfo user) {
+        LambdaUpdateWrapper<StandardGuardRoll> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(StandardGuardRoll::getValidflag, false)
+                .set(StandardGuardRoll::getUpdatetime, new Date())
+                .set(StandardGuardRoll::getUpdateby, user.getId())
+                .set(StandardGuardRoll::getUpdatebyname,user.getUsername())
+                .eq(StandardGuardRoll::getId, id);
+        this.update(updateWrapper);
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/StandardHiddenDangerLegerServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/StandardHiddenDangerLegerServiceImpl.java
new file mode 100644
index 0000000..3ecc87b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/StandardHiddenDangerLegerServiceImpl.java
@@ -0,0 +1,88 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.StandardHiddenDangerLeger;
+import com.gk.firework.Domain.StandardProductLeger;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Mapper.StandHiddenDangerLegerMapper;
+import com.gk.firework.Service.StandardHiddenDangerLegerService;
+import com.gk.firework.Service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.List;
+
+@Service("standardHiddenDangerLegerService")
+public class StandardHiddenDangerLegerServiceImpl extends ServiceImpl<StandHiddenDangerLegerMapper, StandardHiddenDangerLeger> implements StandardHiddenDangerLegerService {
+
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private StandHiddenDangerLegerMapper standHiddenDangerLegerMapper;
+
+    @Override
+    public IPage selectPage(Page<StandardHiddenDangerLeger> page, Map filter, UserInfo userInfo) {
+
+        UserInfo user = userService.getById(userInfo.getId());
+        Map<String, Object> params = new HashMap<>();
+        //菜单
+        //可视权限
+        {
+            params.put("enterprisenumber", user.getCompanynumber());
+            params.put("province", user.getProvince());
+            params.put("city", user.getCity());
+            params.put("district", user.getArea());
+            params.put("street", user.getTown());
+            params.put("committee", user.getCommunity());
+        }
+
+        params.put("filterProvince", filter.get("province"));
+        params.put("filterCity", filter.get("city"));
+        params.put("filterDistrict", filter.get("district"));
+        params.put("filterStreet", filter.get("street"));
+        params.put("filterCommittee", filter.get("committee"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        List<StandardHiddenDangerLeger> list = standHiddenDangerLegerMapper.selectPages(page,params);
+        return page.setRecords(list);
+    }
+
+
+    @Override
+    public void addHiddenDangerLeger(StandardHiddenDangerLeger standardHiddenDangerLeger, UserInfo userInfo) {
+        UserInfo user = userService.getById(userInfo.getId());
+        standardHiddenDangerLeger.setCreateby(user.getId());
+        standardHiddenDangerLeger.setCreatebyname(user.getUsername());
+        standardHiddenDangerLeger.setCreatetime(new Date());
+        standardHiddenDangerLeger.setValidflag(true);
+        standardHiddenDangerLeger.setEnterprisenumber(user.getUsername());
+        standardHiddenDangerLeger.setEnterprisename(user.getUsername());
+        this.save(standardHiddenDangerLeger);
+
+    }
+
+    @Override
+    public void modHiddenDangerLeger(StandardHiddenDangerLeger standardHiddenDangerLeger, UserInfo user) {
+        standardHiddenDangerLeger.setUpdateby(user.getId());
+        standardHiddenDangerLeger.setUpdatetime(new Date());
+        standardHiddenDangerLeger.setUpdatebyname(user.getUsername());
+        this.updateById(standardHiddenDangerLeger);
+    }
+
+    @Override
+    public void delHiddenDangerLeger(Long id, UserInfo user) {
+        LambdaUpdateWrapper<StandardHiddenDangerLeger> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(StandardHiddenDangerLeger::getValidflag, false)
+                .set(StandardHiddenDangerLeger::getUpdatetime, new Date())
+                .set(StandardHiddenDangerLeger::getUpdateby, user.getId())
+                .set(StandardHiddenDangerLeger::getUpdatebyname,user.getUsername())
+                .eq(StandardHiddenDangerLeger::getId, id);
+        this.update(updateWrapper);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/StandardLawListServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/StandardLawListServiceImpl.java
new file mode 100644
index 0000000..9147d40
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/StandardLawListServiceImpl.java
@@ -0,0 +1,137 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.StandardLawList;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.Properties;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Utils.UploadUtil;
+import com.gk.firework.Mapper.StandardLawListMapper;
+import com.gk.firework.Service.StandardLawListService;
+import com.gk.firework.Service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.List;
+
+@Service("standardLawListService")
+public class StandardLawListServiceImpl extends ServiceImpl<StandardLawListMapper, StandardLawList> implements StandardLawListService {
+
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private StandardLawListMapper standardLawListMapper;
+
+    /**
+    * @Description: 适用法律法规分页查询
+    * @date 2021/5/8 13:54
+    */
+    @Override
+    public IPage selectPage(Page<StandardLawList> page, Map filter, UserInfo userInfo) {
+
+        UserInfo user = userService.getById(userInfo.getId());
+        Map<String, Object> params = new HashMap<>();
+        //菜单
+        //可视权限
+        {
+            params.put("enterprisenumber", user.getCompanynumber());
+            params.put("province", user.getProvince());
+            params.put("city", user.getCity());
+            params.put("district", user.getArea());
+            params.put("street", user.getTown());
+            params.put("committee", user.getCommunity());
+        }
+
+        params.put("filterProvince", filter.get("province"));
+        params.put("filterCity", filter.get("city"));
+        params.put("filterDistrict", filter.get("district"));
+        params.put("filterStreet", filter.get("street"));
+        params.put("filterCommittee", filter.get("committee"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        //按法律法规标准查
+        params.put("name", filter.get("name"));
+        List<StandardLawList> list =  standardLawListMapper.selectPages(page,params);
+        return page.setRecords(list);
+    }
+
+
+    /**
+    * @Description: 新增法律法规清单
+    * @date 2021/5/8 14:06
+    */
+    @Override
+    @Transactional
+    public void addStandardLawList(StandardLawList standardLawList, UserInfo userInfo) {
+        if (standardLawList.getFile() == null) {
+            throw new BusinessException("需要上传文件");
+        }
+
+        UserInfo user = userService.getById(userInfo.getId());
+        standardLawList.setCreateby(user.getId());
+        standardLawList.setCreatebyname(user.getUsername());
+        standardLawList.setCreatetime(new Date());
+        standardLawList.setValidflag(true);
+        standardLawList.setEnterprisenumber(user.getUsername());
+        standardLawList.setEnterprisename(user.getUsername());
+
+        assert standardLawList.getFile() != null;
+        try {
+            String name = UploadUtil.uploadFile(standardLawList.getFile(), Properties.standardPath);
+            standardLawList.setFilename(standardLawList.getFile().getOriginalFilename());
+            standardLawList.setUrl(Properties.standard + name);
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new BusinessException("上传文件失败");
+        }
+        this.save(standardLawList);
+    }
+
+
+    /**
+    * @Description: 修改法律法规清单
+    * @date 2021/5/8 14:07
+    */
+    @Override
+    public void modStandardLawList(StandardLawList standardLawList, UserInfo user) {
+        standardLawList.setUpdateby(user.getId());
+        standardLawList.setUpdatebyname(user.getUsername());
+        standardLawList.setUpdatetime(new Date());
+
+        try {
+            if (standardLawList.getFile() != null) {
+                String name = UploadUtil.uploadFile(standardLawList.getFile(), Properties.standardPath);
+                standardLawList.setFilename(standardLawList.getFile().getOriginalFilename());
+                standardLawList.setUrl(Properties.standard + name);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new BusinessException("上传文件失败");
+        }
+        this.updateById(standardLawList);
+    }
+
+
+    /**
+    * @Description: 删除法律法规清单
+    * @date 2021/5/8 14:11
+    */
+    @Override
+    public void delStandardLawList(Long id, UserInfo user) {
+        LambdaUpdateWrapper<StandardLawList> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(StandardLawList::getValidflag, false)
+                .set(StandardLawList::getUpdatetime, new Date())
+                .set(StandardLawList::getUpdateby, user.getId())
+                .set(StandardLawList::getUpdatebyname,user.getUsername())
+                .eq(StandardLawList::getId, id);
+        this.update(updateWrapper);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/StandardProductLegerServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/StandardProductLegerServiceImpl.java
new file mode 100644
index 0000000..dda96d7
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/StandardProductLegerServiceImpl.java
@@ -0,0 +1,90 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.StandardDeviceToolsLeger;
+import com.gk.firework.Domain.StandardProductLeger;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Mapper.StandProductLegerMapper;
+import com.gk.firework.Service.StandardProductLegerService;
+import com.gk.firework.Service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service("standardProductLegerService")
+public class StandardProductLegerServiceImpl extends ServiceImpl<StandProductLegerMapper, StandardProductLeger> implements StandardProductLegerService {
+
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private StandProductLegerMapper standProductLegerMapper;
+
+    @Override
+    public IPage selectPage(Page<StandardProductLeger> page, Map<String, Object> filter, UserInfo userInfo) {
+
+        UserInfo user = userService.getById(userInfo.getId());
+        Map<String, Object> params = new HashMap<>();
+        //菜单
+        //可视权限
+        {
+            params.put("enterprisenumber", user.getCompanynumber());
+            params.put("province", user.getProvince());
+            params.put("city", user.getCity());
+            params.put("district", user.getArea());
+            params.put("street", user.getTown());
+            params.put("committee", user.getCommunity());
+        }
+
+        params.put("filterProvince", filter.get("province"));
+        params.put("filterCity", filter.get("city"));
+        params.put("filterDistrict", filter.get("district"));
+        params.put("filterStreet", filter.get("street"));
+        params.put("filterCommittee", filter.get("committee"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        List<StandardProductLeger> standardProductLegers = standProductLegerMapper.selectPages(page, params);
+
+        return page.setRecords(standardProductLegers);
+    }
+
+
+
+    @Override
+    public void addProductLeger(StandardProductLeger standardProductLeger, UserInfo userInfo) {
+        UserInfo user = userService.getById(userInfo.getId());
+        standardProductLeger.setCreateby(user.getId());
+        standardProductLeger.setCreatebyname(user.getUsername());
+        standardProductLeger.setCreatetime(new Date());
+        standardProductLeger.setValidflag(true);
+        standardProductLeger.setEnterprisenumber(user.getUsername());
+        standardProductLeger.setEnterprisename(user.getUsername());
+        this.save(standardProductLeger);
+    }
+
+    @Override
+    public void modProductLeger(StandardProductLeger standardProductLeger, UserInfo user) {
+
+        standardProductLeger.setUpdatebyname(user.getUsername());
+        standardProductLeger.setUpdatetime(new Date());
+        standardProductLeger.setUpdateby(user.getId());
+        this.updateById(standardProductLeger);
+    }
+
+    @Override
+    public void delProductLeger(Long id, UserInfo user) {
+        LambdaUpdateWrapper<StandardProductLeger> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(StandardProductLeger::getValidflag, false)
+                .set(StandardProductLeger::getUpdatetime, new Date())
+                .set(StandardProductLeger::getUpdateby, user.getId())
+                .set(StandardProductLeger::getUpdatebyname,user.getUsername())
+                .eq(StandardProductLeger::getId, id);
+        this.update(updateWrapper);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/StandardRewardRecordServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/StandardRewardRecordServiceImpl.java
new file mode 100644
index 0000000..67493ec
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/StandardRewardRecordServiceImpl.java
@@ -0,0 +1,88 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.StandardConferenceRecord;
+import com.gk.firework.Domain.StandardRewardRecord;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Mapper.StandardRewardRecordMapper;
+import com.gk.firework.Service.StandardRewardRecordService;
+import com.gk.firework.Service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service("standardRewardRecordService")
+public class StandardRewardRecordServiceImpl extends ServiceImpl<StandardRewardRecordMapper, StandardRewardRecord> implements StandardRewardRecordService {
+
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private StandardRewardRecordMapper standardRewardRecordMapper;
+
+    @Override
+    public IPage selectPage(Page<StandardRewardRecord> page, Map filter, UserInfo userInfo) {
+
+        UserInfo user = userService.getById(userInfo.getId());
+        Map<String, Object> params = new HashMap<>();
+        //菜单
+        //可视权限
+        {
+            params.put("enterprisenumber", user.getCompanynumber());
+            params.put("province", user.getProvince());
+            params.put("city", user.getCity());
+            params.put("district", user.getArea());
+            params.put("street", user.getTown());
+            params.put("committee", user.getCommunity());
+        }
+
+        params.put("filterProvince", filter.get("province"));
+        params.put("filterCity", filter.get("city"));
+        params.put("filterDistrict", filter.get("district"));
+        params.put("filterStreet", filter.get("street"));
+        params.put("filterCommittee", filter.get("committee"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        List<StandardRewardRecord> list = standardRewardRecordMapper.selectPages(page,params);
+
+        return page.setRecords(list);
+    }
+
+    @Override
+    public void addRecordAndPunishmentRecord(StandardRewardRecord standardRewardRecord, UserInfo userInfo) {
+
+        UserInfo user = userService.getById(userInfo.getId());
+        standardRewardRecord.setCreateby(user.getId());
+        standardRewardRecord.setCreatebyname(user.getUsername());
+        standardRewardRecord.setCreatetime(new Date());
+        standardRewardRecord.setValidflag(true);
+        standardRewardRecord.setEnterprisenumber(user.getUsername());
+        standardRewardRecord.setEnterprisename(user.getUsername());
+        this.save(standardRewardRecord);
+    }
+
+    @Override
+    public void modRecordAndPunishmentRecord(StandardRewardRecord standardRewardRecord, UserInfo user) {
+        standardRewardRecord.setUpdateby(user.getId());
+        standardRewardRecord.setUpdatetime(new Date());
+        standardRewardRecord.setUpdatebyname(user.getUsername());
+        this.updateById(standardRewardRecord);
+    }
+
+    @Override
+    public void delRecordAndPunishmentRecord(Long id, UserInfo user) {
+        LambdaUpdateWrapper<StandardRewardRecord> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(StandardRewardRecord::getValidflag, false)
+                .set(StandardRewardRecord::getUpdatetime, new Date())
+                .set(StandardRewardRecord::getUpdateby, user.getId())
+                .set(StandardRewardRecord::getUpdatebyname,user.getUsername())
+                .eq(StandardRewardRecord::getId, id);
+        this.update(updateWrapper);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/StandardSupplyMarketObjectServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/StandardSupplyMarketObjectServiceImpl.java
new file mode 100644
index 0000000..7389bfe
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/StandardSupplyMarketObjectServiceImpl.java
@@ -0,0 +1,90 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.StandardHiddenDangerLeger;
+import com.gk.firework.Domain.StandardSupplyMarketObject;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Mapper.StandardSupplyMarketObjectMapper;
+import com.gk.firework.Service.StandardSupplyMarketObjectService;
+import com.gk.firework.Service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.List;
+
+@Service("standardSupplyMarketObjectService")
+public class StandardSupplyMarketObjectServiceImpl extends ServiceImpl<StandardSupplyMarketObjectMapper, StandardSupplyMarketObject> implements StandardSupplyMarketObjectService {
+
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private StandardSupplyMarketObjectMapper standardSupplyMarketObjectMapper;
+
+    @Override
+    public IPage selectPage(Page<StandardSupplyMarketObject> page, Map filter, UserInfo userInfo) {
+
+
+        UserInfo user = userService.getById(userInfo.getId());
+        Map<String, Object> params = new HashMap<>();
+        //菜单
+        //可视权限
+        {
+            params.put("enterprisenumber", user.getCompanynumber());
+            params.put("province", user.getProvince());
+            params.put("city", user.getCity());
+            params.put("district", user.getArea());
+            params.put("street", user.getTown());
+            params.put("committee", user.getCommunity());
+        }
+
+        params.put("filterProvince", filter.get("province"));
+        params.put("filterCity", filter.get("city"));
+        params.put("filterDistrict", filter.get("district"));
+        params.put("filterStreet", filter.get("street"));
+        params.put("filterCommittee", filter.get("committee"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("menu", filter.get("menu"));
+        List<StandardSupplyMarketObject> list  = standardSupplyMarketObjectMapper.selectPages(page, params);
+        return page.setRecords(list);
+    }
+
+    @Override
+    public void addSupplyMarketObject(StandardSupplyMarketObject standardSupplyMarketObject, UserInfo userInfo) {
+        UserInfo user = userService.getById(userInfo.getId());
+        standardSupplyMarketObject.setCreateby(user.getId());
+        standardSupplyMarketObject.setCreatebyname(user.getUsername());
+        standardSupplyMarketObject.setCreatetime(new Date());
+        standardSupplyMarketObject.setValidflag(true);
+        standardSupplyMarketObject.setEnterprisenumber(user.getUsername());
+        standardSupplyMarketObject.setEnterprisename(user.getUsername());
+        this.save(standardSupplyMarketObject);
+    }
+
+    @Override
+    public void modSupplyMarketObject(StandardSupplyMarketObject standardSupplyMarketObject, UserInfo user) {
+        standardSupplyMarketObject.setUpdateby(user.getId());
+        standardSupplyMarketObject.setUpdatetime(new Date());
+        standardSupplyMarketObject.setUpdatebyname(user.getUsername());
+        this.updateById(standardSupplyMarketObject);
+    }
+
+    @Override
+    public void delSupplyMarketObject(Long id, UserInfo user) {
+        LambdaUpdateWrapper<StandardSupplyMarketObject> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(StandardSupplyMarketObject::getValidflag, false)
+                .set(StandardSupplyMarketObject::getUpdatetime, new Date())
+                .set(StandardSupplyMarketObject::getUpdateby, user.getId())
+                .set(StandardSupplyMarketObject::getUpdatebyname,user.getUsername())
+                .eq(StandardSupplyMarketObject::getId, id);
+        this.update(updateWrapper);
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/StandardTemplate1ServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/StandardTemplate1ServiceImpl.java
new file mode 100644
index 0000000..a5e7df3
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/StandardTemplate1ServiceImpl.java
@@ -0,0 +1,160 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.StandardTemplate1;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.Properties;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Utils.UploadUtil;
+import com.gk.firework.Domain.Vo.StandardTemplate1Vo;
+import com.gk.firework.Mapper.StandardTemplate1Mapper;
+import com.gk.firework.Service.StandardTemplate1Service;
+import com.gk.firework.Service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.List;
+
+@Service("standardTemplate1Service")
+public class StandardTemplate1ServiceImpl extends ServiceImpl<StandardTemplate1Mapper, StandardTemplate1> implements StandardTemplate1Service {
+
+    @Autowired
+    private StandardTemplate1Mapper standardTemplate1Mapper;
+    @Autowired
+    private UserService userService;
+
+    @Override
+    public IPage selectPage(Page<StandardTemplate1> page, Map filter, UserInfo userInfo) {
+
+        UserInfo user = userService.getById(userInfo.getId());
+        Map<String, Object> params = new HashMap<>();
+        //菜单
+        params.put("menu", filter.get("menu"));
+        params.put("type", filter.get("type"));
+        //可视权限
+        {
+            params.put("enterprisenumber", user.getCompanynumber());
+            params.put("province", user.getProvince());
+            params.put("city", user.getCity());
+            params.put("district", user.getArea());
+            params.put("street", user.getTown());
+            params.put("committee", user.getCommunity());
+        }
+
+        params.put("filterProvince", filter.get("province"));
+        params.put("filterCity", filter.get("city"));
+        params.put("filterDistrict", filter.get("district"));
+        params.put("filterStreet", filter.get("street"));
+        params.put("filterCommittee", filter.get("committee"));
+        params.put("safetysupervision", filter.get("safetysupervision"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        List<StandardTemplate1> list = standardTemplate1Mapper.selectPages(page, params);
+        return page.setRecords(list);
+    }
+
+
+    @Override
+    @Transactional
+    public void addStandard(StandardTemplate1Vo standardTemplate1Vo, UserInfo user) {
+
+        if (standardTemplate1Vo.getFile() == null) {
+            throw new BusinessException("未上传文件");
+        }
+        if (StringUtils.isBlank(standardTemplate1Vo.getMenu())) {
+            throw new BusinessException("菜单发生错误");
+        }
+
+        UserInfo userInfo = userService.getById(user.getId());
+        StandardTemplate1 template1 = new StandardTemplate1();
+        template1.setMenu(standardTemplate1Vo.getMenu());
+        template1.setSettime(standardTemplate1Vo.getSettime());
+        template1.setEnterprisenumber(userInfo.getCompanynumber());
+        template1.setEnterprisename(userInfo.getUsername());
+        template1.setName(standardTemplate1Vo.getName());
+        template1.setCreatetime(new Date());
+        template1.setCreateby(user.getId());
+        template1.setCreatebyname(user.getUsername());
+        template1.setValidflag(true);
+        template1.setType(standardTemplate1Vo.getType());
+        template1.setContent(standardTemplate1Vo.getContent());
+
+
+        try {
+            String name = UploadUtil.uploadFile(standardTemplate1Vo.getFile(), Properties.standardPath);
+            template1.setFilename(standardTemplate1Vo.getFile().getOriginalFilename());
+            template1.setUrl(Properties.standard + name);
+        } catch (Exception e) {
+            throw new BusinessException("上传发生错误");
+        }
+
+        this.save(template1);
+
+
+    }
+
+    /**
+    * @Description: 修改简单模板
+    * @date 2021/4/30 16:15
+    */
+    @Override
+    public void modStandard(StandardTemplate1Vo standardTemplate1Vo, UserInfo user) {
+
+
+        if (StringUtils.isBlank(standardTemplate1Vo.getMenu())) {
+            throw new BusinessException("菜单发生错误");
+        }
+
+        UserInfo userInfo = userService.getById(user.getId());
+        StandardTemplate1 template1 = new StandardTemplate1();
+        template1.setId(standardTemplate1Vo.getId());
+        template1.setMenu(standardTemplate1Vo.getMenu());
+        template1.setSettime(standardTemplate1Vo.getSettime());
+        template1.setEnterprisenumber(userInfo.getCompanynumber());
+        template1.setEnterprisename(userInfo.getUsername());
+        template1.setName(standardTemplate1Vo.getName());
+        template1.setCreatetime(new Date());
+        template1.setCreateby(user.getId());
+        template1.setCreatebyname(user.getUsername());
+        template1.setValidflag(true);
+        template1.setType(standardTemplate1Vo.getType());
+        template1.setContent(standardTemplate1Vo.getContent());
+        try {
+            if (standardTemplate1Vo.getFile() != null) {
+                String name = UploadUtil.uploadFile(standardTemplate1Vo.getFile(), Properties.standardPath);
+                template1.setFilename(standardTemplate1Vo.getFile().getOriginalFilename());
+                template1.setUrl(Properties.standard + name);
+            }
+
+        } catch (Exception e) {
+            throw new BusinessException("上传发生错误");
+        }
+
+        this.updateById(template1);
+
+    }
+
+    /**
+    * @Description: 删除简单模板
+    * @date 2021/4/30 16:25
+    */
+    @Override
+    public void delStandard(Long id, UserInfo user) {
+        LambdaUpdateWrapper<StandardTemplate1> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(StandardTemplate1::getValidflag, false)
+                .set(StandardTemplate1::getUpdatetime, new Date())
+                .set(StandardTemplate1::getUpdateby, user.getId())
+                .set(StandardTemplate1::getUpdatebyname,user.getUsername())
+                .eq(StandardTemplate1::getId, id);
+        this.update(updateWrapper);
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/StaticStockServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/StaticStockServiceImpl.java
new file mode 100644
index 0000000..becfdd0
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/StaticStockServiceImpl.java
@@ -0,0 +1,34 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.StaticStock;
+import com.gk.firework.Mapper.StaticStockMapper;
+import com.gk.firework.Service.StaticStockService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author : jingjy
+ * @date : 2022/1/29 16:07
+ */
+@Service("StaticStockService")
+public class StaticStockServiceImpl extends ServiceImpl<StaticStockMapper, StaticStock> implements StaticStockService {
+
+    @Autowired
+    private StaticStockMapper staticStockMapper;
+    @Override
+    public StaticStock getByOwner(long owner) {
+        LambdaQueryWrapper<StaticStock> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(StaticStock::getOwner,owner);
+        return baseMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<StaticStock> selectStaticStocks(Map<String, Object> condition) {
+        return staticStockMapper.selectEnterpriseStocks(condition);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/StockServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/StockServiceImpl.java
new file mode 100644
index 0000000..064a7df
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/StockServiceImpl.java
@@ -0,0 +1,899 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.BO.DirectionProductBO;
+import com.gk.firework.Domain.BO.ProductLocusInfoBO;
+import com.gk.firework.Domain.BO.SaleOrderDetailInfoBO;
+import com.gk.firework.Domain.DO.ProductDO;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.Extension.StockTotal;
+import com.gk.firework.Domain.Utils.Msg;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Vo.*;
+import com.gk.firework.Mapper.ProductInfoMapper;
+import com.gk.firework.Mapper.StockInfoMapper;
+import com.gk.firework.Service.*;
+import org.joda.time.DateTime;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+
+import java.math.BigDecimal;
+import java.util.*;
+
+import static com.gk.firework.Domain.Enum.ErrorCode.*;
+
+/**
+ * @author : jingjy
+ * @date : 2021/3/24 14:04
+ */
+@Service("StockService")
+public class StockServiceImpl extends ServiceImpl<StockInfoMapper, StockInfo> implements StockService {
+    @Autowired
+    private StockInfoMapper stockInfoMapper;
+    @Autowired
+    private ProductInfoMapper productInfoMapper;
+    @Autowired
+    private ProductLocusService productLocusService;
+    @Autowired
+    private ProductService productService;
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private CustomerService customerService;
+    @Autowired
+    private SoldNoStockService soldNoStockService;
+    @Autowired
+    private EntryService entryService;
+    @Autowired
+    private SaleOrderService saleOrderService;
+    @Autowired
+    private SaleOrderDetailService saleOrderDetailService;
+    @Autowired
+    private DeliveryOrderService deliveryOrderService;
+    @Autowired
+    private WarnContentService warnContentService;
+    @Autowired
+    private EnterpriseService enterpriseService;
+    @Autowired
+    private StaticStockService staticStockService;
+
+    /** 入库 **/
+    @Override
+    public boolean putInStorage(UserInfo userInfo, List<ProductVo> productVos, Date datetime, String type) {
+        boolean flag = false;
+        for (ProductVo productVo : productVos){
+            StockInfo stockInfo = selectStockByDirection(productVo.getDirectionCode());
+            ProductInfo productInfo = productInfoMapper.selectProductByDirectionCode(productVo.getItemCode());
+            ProductLocusInfo productLocusInfo = new ProductLocusInfo();
+            //如果为空则创建
+            if (stockInfo == null){
+                stockInfo = new StockInfo();
+                stockInfo.setDirectioncode(productVo.getDirectionCode());
+                stockInfo.setCreateddate(new Date());
+                stockInfo.setCreatedby(userInfo.getUsername());
+                stockInfo.setDirectionboxcode(String.format("%03d",productVo.getBoxNumber()));
+                stockInfo.setModifieddate(datetime);
+                stockInfo.setNum(1);
+                stockInfo.setOperator(userInfo.getUsername());
+                stockInfo.setIndate(datetime);
+                stockInfo.setProductid(productInfo.getId());
+                stockInfo.setOwner(userInfo.getCompanyid().toString());
+                stockInfo.setFlag((byte)0);
+                stockInfo.setType(Byte.parseByte(type));
+                int i = insertStockInfo(stockInfo);
+                if (i == 1){ flag = true; }
+                productLocusInfo = new ProductLocusInfo(productVo.getDirectionCode(),new Date(),
+                        datetime,userInfo.getCompany(),null,ProductLocusInfo.ENTRY_STATUS,
+                        productVo.getBoxNumber().toString());
+                productLocusService.insertProductLocus(productLocusInfo);
+            }else {
+                //一般入库
+                if (EntryUtils.RK_ENTRY.equals(type)){
+                    // 判断入库是否大于修改时间,小于修改时间不做修改
+                    if (stockInfo.getModifieddate().compareTo(datetime) > 0 ){
+                        continue;
+                    }
+
+                    //如果不为空,判断flag,如果flag=1,则不进行修改,只记录流向,否则修改owner
+                    if (stockInfo.getFlag() == 0){
+                        stockInfo.setModifieddate(datetime);
+                        stockInfo.setModifiedby(userInfo.getUsername());
+                        stockInfo.setIndate(datetime);
+                        stockInfo.setOwner(userInfo.getCompanyid().toString());
+                        stockInfo.setFlag((byte)0);
+                        stockInfo.setStatus("");
+                    }
+                    productLocusInfo = new ProductLocusInfo(productVo.getDirectionCode(),new Date(),
+                            datetime,userInfo.getCompany(),null,ProductLocusInfo.ENTRY_STATUS,
+                            productVo.getBoxNumber().toString());
+
+                }else if (EntryUtils.TH_ENTRY.equals(type)){
+                    //退货入库
+                    //未使用
+                    stockInfo.setOwner(userInfo.getCompanyid().toString());
+                    stockInfo.setModifieddate(datetime);
+                    stockInfo.setModifiedby(userInfo.getUsername());
+                    stockInfo.setStatus("");
+                    productLocusInfo = new ProductLocusInfo(productVo.getDirectionCode(),new Date(),
+                            datetime,userInfo.getCompany(),null,ProductLocusInfo.RETURN_ENTRY_STATUS,
+                            productVo.getBoxNumber().toString());
+
+                }
+                productLocusService.insertProductLocus(productLocusInfo);
+                int i = updateStockInfo(stockInfo);
+                if (i == 1){ flag = true; }
+            }
+        }
+        return flag;
+    }
+
+    @Override
+    public void setProductEntryStatus(List<ProductVo> productVos, UserInfo userInfo) {
+        if (productVos.size() != 0 && userInfo != null){
+
+            for (ProductVo productVo : productVos) {
+                if (isStockInfoExist(productVo.getDirectionCode(),userInfo.getCompanyid())){
+                    productVo.setEntryFlag("历史入库");
+                }else {
+                    productVo.setEntryFlag("可以入库");
+                }
+            }
+        }
+    }
+
+    @Override
+    public void deliveryByDetail(Date datetime, List<DeliveryDetailInfo> deliveryDetailInfos, UserInfo userInfo) {
+        List<ProductVo>productVos = new ArrayList<>();
+        List<ProductLocusInfo>productLocusInfos = new ArrayList<>();
+
+        for (DeliveryDetailInfo deliveryDetailInfo : deliveryDetailInfos){
+            String dire = deliveryDetailInfo.getDirectioncode();
+            DirectionDetail detail = FireworkDeal.dealDirectionCode(dire);
+            ProductVo productVo = productInfoMapper.selectProductVoByDirectionCode(detail.getItemCode());
+            if (FireworkDeal.is22Characters(dire)){
+                FireworkDeal.getProductVos(dire,detail,detail,productVos,productVo);
+                ProductLocusInfo productLocusInfo = new ProductLocusInfo(dire,new Date(),datetime,userInfo.getCompany()
+                        ,null, ProductLocusInfo.DELIVERY_STATUS,detail.getBoxNo());
+                productLocusInfos.add(productLocusInfo);
+            }else if (FireworkDeal.is19Characters(dire)){
+                productVos.add(productVo);
+            }
+
+
+        }
+
+        for (ProductVo productVo : productVos){
+            StockInfo stockInfo = selectStockByDirection(productVo.getDirectionCode());
+            DirectionDetail detail = FireworkDeal.dealDirectionCode(productVo.getDirectionCode());
+            ProductInfo productInfo = productService.selectByDirection(productVo.getDirectionCode());
+            ProductLocusInfo productLocusInfo = new ProductLocusInfo(productVo.getDirectionCode(),new Date(),datetime,userInfo.getCompany()
+                    ,null, ProductLocusInfo.DELIVERY_STATUS,detail.getBoxNo());
+            productLocusInfos.add(productLocusInfo);
+            if (stockInfo == null) {
+                stockInfo = new StockInfo();
+                stockInfo.setDirectioncode(productVo.getDirectionCode());
+                stockInfo.setCreateddate(new Date());
+                stockInfo.setDirectionboxcode(String.format("%03d", productVo.getBoxNumber()));
+                stockInfo.setCreatedby(userInfo.getUsername());
+                stockInfo.setNum(1);
+                stockInfo.setOperator(userInfo.getUsername());
+                stockInfo.setIndate(new Date());
+                stockInfo.setProductid(productInfo.getId());
+                stockInfo.setOwner("");
+                stockInfo.setModifiedby(userInfo.getUsername());
+                stockInfo.setModifieddate(datetime);
+                stockInfo.setOutdate(datetime);
+                stockInfo.setFlag((byte) 0);
+                stockInfo.setType((byte) 1);
+                insertStockInfo(stockInfo);
+            }else {
+                //库存修改原则,时间最近的修改才生效
+                // 判断出库是否大于修改时间,小于修改时间不做库存修改
+                if (stockInfo.getModifieddate().compareTo(datetime) > 0){
+                    continue;
+                }
+                //出库后Owner设空
+                stockInfo.setOwner("");
+                stockInfo.setModifiedby(userInfo.getUsername());
+                stockInfo.setModifieddate(datetime);
+                stockInfo.setOutdate(datetime);
+                updateStockInfo(stockInfo);
+            }
+
+        }
+        productLocusService.insertBatch(productLocusInfos);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public Msg changeStockBySale(CustomerInfo customerInfo, List<SaleOrderDetailInfoBO> detailInfoList, UserInfo userInfo, Date salesTime) {
+        Msg msg = new Msg();
+        if (customerInfo == null || userInfo == null
+                || detailInfoList == null || detailInfoList.size() ==0){
+            msg.setCode(ERROR_10002.getCode());
+            msg.setMessage(ERROR_10002.getMsg()+":销售出库失败");
+            return msg;
+        }
+        Date now = new Date();
+        List<ProductLocusInfo> productLocuses = new ArrayList<>();
+        List<SoldNoStockInfo> soldNoStockInfos = new ArrayList<>();
+        List<WarnContentInfo> warnContentInfos = new ArrayList<>();
+        for (SaleOrderDetailInfoBO detailInfo : detailInfoList){
+            DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(detailInfo.getDirectioncode());
+            if (directionDetail.getLength().equals(FireworkDeal.DIRECTION_INSIDE)){
+                ProductDO productInfo = detailInfo.getProductDO();
+                //流向码为19位时
+                StockInfo stockInfo = selectStockByDirectionAndSlice(directionDetail.getOriginalCode(),productInfo.getSlice());
+                if (stockInfo == null){
+                    //库存为空则插入
+                    stockInfo = new StockInfo();
+                    stockInfo.setDirectioncode(directionDetail.getOriginalCode());
+                    stockInfo.setOwner(userInfo.getCompanyid().toString());
+                    stockInfo.setCreateddate(now);
+                    stockInfo.setCreatedby(userInfo.getUsername());
+                    stockInfo.setDirectionboxcode(directionDetail.getBoxNo());
+                    stockInfo.setModifieddate(salesTime);
+                    stockInfo.setNum(1);
+                    stockInfo.setOperator(userInfo.getUsername());
+                    stockInfo.setIndate(new Date());
+                    stockInfo.setProductid(productInfo.getId());
+                    stockInfo.setOwner(userInfo.getCompanyid().toString());
+                    stockInfo.setFlag((byte)0);
+                    stockInfo.setType((byte)1);
+
+                    //插入一条已销未入库
+                    SoldNoStockInfo soldNoStockInfo = new SoldNoStockInfo();
+                    soldNoStockInfo.setDirectioncode(stockInfo.getDirectioncode());
+                    soldNoStockInfo.setItemcode(productInfo.getDirectionCode());
+                    soldNoStockInfo.setItemname(productInfo.getName());
+                    soldNoStockInfo.setSalestime(salesTime);
+                    soldNoStockInfo.setSalesperson(userInfo.getUsername());
+                    soldNoStockInfo.setCompanynumber(userInfo.getCompanynumber());
+                    soldNoStockInfo.setCreatedat(new Date());
+                    soldNoStockInfo.setCreatedby("系统生成");
+                    soldNoStockInfo.setContent(productInfo.getManufacturer());
+//                    soldNoStockService.save(soldNoStockInfo);
+                    soldNoStockInfos.add(soldNoStockInfo);
+                }
+                if (stockInfo.getStatus() != null && stockInfo.getStatus().equals(StockInfo.STOCK_SOLD)
+                        && !stockInfo.getOwner().equals(customerInfo.getId().toString())){
+                    WarnContentInfo warnContentInfo = new WarnContentInfo();
+                    warnContentInfo.setWarntype("多次售出");
+                    warnContentInfo.setWarnlevel("预警");
+                    warnContentInfo.setEnterpriseid(userInfo.getCompanyid());
+                    warnContentInfo.setWarncontent(stockInfo.getDirectioncode()+"多次售出");
+                    warnContentInfo.setIsmend((byte) 0);
+                    warnContentInfo.setIsneed((byte) 0);
+                    warnContentInfo.setIssend((byte) 0);
+                    warnContentInfo.setModifiedby("系统生成");
+                    warnContentInfo.setModifieddate(new Date());
+                    warnContentInfo.setCreateddate(new Date());
+                    warnContentInfos.add(warnContentInfo);
+//                    warnContentService.save(warnContentInfo);
+                }
+                if (StringUtils.isNotBlank(stockInfo.getOwner()) && Long.parseLong(stockInfo.getOwner()) != userInfo.getCompanyid()
+                    || StringUtils.isBlank(stockInfo.getOwner())){
+                    //已销未入库信息插入
+                    SoldNoStockInfo soldNoStockInfo = new SoldNoStockInfo();
+                    soldNoStockInfo.setDirectioncode(stockInfo.getDirectioncode());
+                    soldNoStockInfo.setItemcode(productInfo.getDirectionCode());
+                    soldNoStockInfo.setItemname(productInfo.getName());
+                    soldNoStockInfo.setSalestime(salesTime);
+                    soldNoStockInfo.setSalesperson(userInfo.getUsername());
+                    soldNoStockInfo.setCompanynumber(userInfo.getCompanynumber());
+                    soldNoStockInfo.setCreatedat(new Date());
+                    soldNoStockInfo.setCreatedby("系统生成");
+                    soldNoStockInfo.setContent(productInfo.getManufacturer());
+//                    soldNoStockService.save(soldNoStockInfo);
+                    soldNoStockInfos.add(soldNoStockInfo);
+                }
+
+                stockInfo.setOwner(customerInfo.getId().toString());
+                stockInfo.setModifieddate(salesTime);
+                stockInfo.setModifiedby(userInfo.getUsername());
+                stockInfo.setStatus(StockInfo.STOCK_SOLD);
+                int flag;
+                if (stockInfo.getId() == null){
+                    flag = this.insertStockInfoBySlice(stockInfo,productInfo.getSlice());
+                }else {
+                    flag = this.updateStockInfoBySlice(stockInfo,productInfo.getSlice());
+                }
+                //插入流向轨迹
+//                ProductLocusInfo productLocusInfo = new ProductLocusInfo(directionDetail.getOriginalCode(),new Date(),salesTime,
+//                        userInfo.getCompany(),customerInfo.getId(),ProductLocusInfo.SALES_STATUS,null);
+//                productLocusService.insertProductLocus(productLocusInfo);
+                ProductLocusInfoBO productLocusInfoBO = new ProductLocusInfoBO();
+                productLocusInfoBO.setSlice(productInfo.getSlice());
+                productLocusInfoBO.setDirectioncode(directionDetail.getOriginalCode());
+                productLocusInfoBO.setCreateddate(now);
+                productLocusInfoBO.setModifieddate(salesTime);
+                productLocusInfoBO.setContent(userInfo.getCompany());
+                productLocusInfoBO.setCustomerid(customerInfo.getId());
+                productLocusInfoBO.setType(ProductLocusInfo.SALES_STATUS);
+                productLocusInfoBO.setBoxcode(null);
+                productLocuses.add(productLocusInfoBO);
+                // 判断是否更新库存成功
+                if (flag == 0){
+                    msg.setCode(ERROR_30001.getCode());
+                    msg.setMessage(ERROR_30001.getMsg()+":流向码为:"+directionDetail.getOriginalCode()+" 库存更新失败,销售失败");
+                    break;
+                }else {
+                    msg.setCode(SUCCESS.getCode());
+                    msg.setMessage("出库成功!");
+                }
+            }
+
+        }
+
+        if (productLocuses.size() > 0) {
+            productLocusService.saveBatchLocus(productLocuses);
+        }
+        if (warnContentInfos.size() > 0) {
+            warnContentService.saveBatchInfo(warnContentInfos);
+        }
+        if (soldNoStockInfos.size() > 0) {
+            soldNoStockService.saveBatchInfo(soldNoStockInfos);
+        }
+
+        if (!SUCCESS.getCode().equals(msg.getCode())){
+            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+        }
+        return msg;
+    }
+
+    private boolean isStockInfoExist(String directionCode, Long id) {
+        boolean flag = false;
+        StockInfo stockInfo = selectStockByDireAndUser(id,directionCode);
+        if (stockInfo != null){
+            flag = true;
+        }
+        return flag;
+    }
+
+    private int insertStockInfo(StockInfo stockInfo){
+        int i = 0;
+        if (stockInfo == null){
+            return i;
+        }
+        String slice = productService.getSlice(stockInfo.getDirectioncode());
+        i = stockInfoMapper.insertStockInfo(stockInfo, slice);
+        return i;
+    }
+
+    private int updateStockInfo(StockInfo stockInfo){
+        int i = 0;
+        if (stockInfo == null){
+            return i;
+        }
+        String slice = productService.getSlice(stockInfo.getDirectioncode());
+        i = stockInfoMapper.updateStockInfo(stockInfo,slice);
+        return i;
+    }
+
+    @Override
+    public StockInfo selectStockByDirection(String directionCode){
+        String slice = productService.getSlice(directionCode);
+        if (StringUtils.isBlank(slice)){
+            return null;
+        }
+        return stockInfoMapper.selectStockByDirection(directionCode,slice);
+    }
+
+    @Override
+    public int doReturn(StockInfo stockInfo, UserInfo userInfo, CustomerInfo customerInfo, Date date) {
+        int flag = 0;
+        if (stockInfo.getModifieddate().compareTo(date)>0){
+            WarnContentInfo warnContentInfo = warnContentService.selectByWarnTypeAndContent("多次售出",stockInfo.getDirectioncode()+"多次售出");
+            if (warnContentInfo != null){
+                warnContentService.removeById(warnContentInfo.getId());
+            }
+        }else {
+            stockInfo.setOwner(userInfo.getCompanyid().toString());
+            stockInfo.setModifieddate(new Date());
+            stockInfo.setModifiedby(userInfo.getUsername());
+            stockInfo.setStatus("");
+            flag = updateStockInfo(stockInfo);
+        }
+
+        //插入流向轨迹
+        ProductLocusInfo productLocusInfo = new ProductLocusInfo(stockInfo.getDirectioncode(), new Date(), new Date(),
+                userInfo.getCompany(), customerInfo == null ? null : customerInfo.getId(), ProductLocusInfo.RETURN_ENTRY_STATUS, null);
+        productLocusService.insertProductLocus(productLocusInfo);
+        return flag;
+    }
+
+    @Override
+    public StockInfo selectStockByDireAndUser(Long companyId, String directionCode) {
+        String slice = productService.getSlice(directionCode);
+        if (StringUtils.isBlank(slice)){
+            return new StockInfo();
+        }
+        return stockInfoMapper.selectStockByDireAndUser(directionCode,companyId,slice);
+    }
+
+    @Override
+    public void updateStocks(List<StockInfo> stockInfos, UserInfo user) {
+        for (StockInfo stockInfo : stockInfos){
+            updateStockInfo(stockInfo);
+
+            //插入流向轨迹
+            ProductLocusInfo productLocusInfo = new ProductLocusInfo(stockInfo.getDirectioncode(),new Date(),new Date(),
+                    user.getCompany(),null,ProductLocusInfo.RETURN_DELIVERY_STATUS,null);
+            productLocusService.insertProductLocus(productLocusInfo);
+        }
+    }
+
+    @Override
+    public void selectDataGrid(PageInfo pageInfo) {
+        Page<StockVo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+
+        List<OrderItem> orderItems = new ArrayList<>();
+        OrderItem orderItem = new OrderItem();
+        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+            orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
+            orderItem.setColumn(pageInfo.getSort());
+        }else {
+            orderItem.setAsc(false);
+            orderItem.setColumn("createddate");
+        }
+        orderItems.add(orderItem);
+        page.setOrders(orderItems);
+        if (StringUtils.isBlank(pageInfo.getSort())){
+            pageInfo.setSort("createddate");
+        }
+        if (StringUtils.isBlank(pageInfo.getOrder())){
+            pageInfo.setOrder("desc");
+        }
+        List<Integer>list = new ArrayList<>();
+        for (int i = 1; i<=20; i++){
+            list.add(i);
+        }
+        List<StockVo> stockVos = stockInfoMapper.selectStockDataGrid(pageInfo.getCondition(),page,list);
+        /*for (StockVo stockVo : stockVos){
+            pageInfo.getCondition().put("companyNumber",stockVo.getEnterpriseNumber());
+            pageInfo.getCondition().put("itemCode",stockVo.getDirectioncode());
+            BigDecimal entryNum = entryService.getEntryNumByCondition(pageInfo.getCondition());
+            BigDecimal returnNum = entryService.getReturnNumByCondition(pageInfo.getCondition());
+            BigDecimal saleNum = saleOrderService.getSaleNumByCondition(pageInfo.getCondition());
+            BigDecimal deliveryNum = deliveryOrderService.getDeliveryNum(pageInfo.getCondition());
+            BigDecimal returnDeliveryNum = deliveryOrderService.getReturnDeliveryNum(pageInfo.getCondition());
+            BigDecimal zero = new BigDecimal("0");
+            stockVo.setEntryNum(entryNum == null ? zero:entryNum);
+            stockVo.setReturnNum(returnNum == null ? zero : returnNum);
+            stockVo.setSaleNum(saleNum == null ? zero: saleNum);
+            stockVo.setDeliveryNum(deliveryNum == null ? zero: deliveryNum);
+            stockVo.setReturnDeliveryNum(returnDeliveryNum == null ? zero : returnDeliveryNum);
+        }*/
+        pageInfo.setResult(stockVos);
+        pageInfo.setTotalCount(page.getTotal());
+    }
+
+    @Override
+    public void selectEnterpriseStockDataGrid(PageInfo pageInfo) {
+        Page<StockVo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+
+        List<OrderItem> orderItems = new ArrayList<>();
+        OrderItem orderItem = new OrderItem();
+        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+            orderItem.setAsc("ascending".equalsIgnoreCase(pageInfo.getOrder()));
+            orderItem.setColumn(pageInfo.getSort());
+        }else {
+            orderItem.setAsc(false);
+            orderItem.setColumn("owner");
+        }
+        orderItems.add(orderItem);
+        page.setOrders(orderItems);
+        if (StringUtils.isBlank(pageInfo.getSort())){
+            pageInfo.setSort("owner");
+        }
+        if (StringUtils.isBlank(pageInfo.getOrder())){
+            pageInfo.setOrder("desc");
+        }
+        List<Integer>list = new ArrayList<>();
+        for (int i = 1; i<=20; i++){
+            list.add(i);
+        }
+        List<StockVo> stockVos = stockInfoMapper.selectEnterpriseStockDataGrid(pageInfo.getCondition(),page,list);
+        pageInfo.setResult(stockVos);
+        pageInfo.setTotalCount(page.getTotal());
+    }
+
+    @Override
+    public List<NoEntryVo> selectNoEntryCount(Date time, Integer warnPeriod) {
+        List<Integer>list = new ArrayList<>();
+        for (int i = 1; i<=20; i++){
+            list.add(i);
+        }
+        return stockInfoMapper.selectNoEntryCount(time,list,warnPeriod);
+    }
+
+    @Override
+    public void selectNoEntryDetail(PageInfo pageInfo) {
+        Page<StockVo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+        List<OrderItem> orderItems = new ArrayList<>();
+        OrderItem orderItem = new OrderItem();
+        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+            orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
+            orderItem.setColumn(pageInfo.getSort());
+        }else {
+            orderItem.setAsc(false);
+            orderItem.setColumn("modifieddate");
+        }
+        orderItems.add(orderItem);
+        page.setOrders(orderItems);
+        List<Integer>list = new ArrayList<>();
+        for (int i = 1; i<=20; i++){
+            list.add(i);
+        }
+        pageInfo.getCondition().put("list",list);
+        List<StockVo> stockVoList = stockInfoMapper.selectNoEntryDetail(page,pageInfo.getCondition());
+        pageInfo.setResult(stockVoList);
+        pageInfo.setTotalCount(page.getTotal());
+    }
+
+    @Override
+    public void doReturnBatch(UserInfo userInfo, List<EntryDetailInfo> entryDetailInfos, Date date) {
+        for (EntryDetailInfo entryDetailInfo : entryDetailInfos){
+            String directionCode = entryDetailInfo.getDirectioncode();
+            SaleOrderDetailInfo detailInfo = saleOrderService.selectOrderByDirectionReturnflag(directionCode,(byte) 0, null);
+            CustomerInfo customerInfo = customerService.getCustomerBySaleOrder(detailInfo.getOrdercode());
+            byte flag = 1;
+            detailInfo.setReturnflag(flag);
+            saleOrderDetailService.updateById(detailInfo);
+            StockInfo stockInfo = selectStockByDirection(directionCode);
+
+            if (stockInfo.getModifieddate().compareTo(date)>0){
+                WarnContentInfo warnContentInfo = warnContentService.selectByWarnTypeAndContent("多次售出",stockInfo.getDirectioncode()+"多次售出");
+                if (warnContentInfo != null){
+                    warnContentService.removeById(warnContentInfo.getId());
+                }
+            }else {
+                stockInfo.setOwner(userInfo.getCompanyid().toString());
+                stockInfo.setModifieddate(new Date());
+                stockInfo.setModifiedby(userInfo.getUsername());
+                stockInfo.setStatus("");
+                updateStockInfo(stockInfo);
+            }
+            //插入流向轨迹
+            ProductLocusInfo productLocusInfo = new ProductLocusInfo(stockInfo.getDirectioncode(), new Date(), new Date(),
+                    userInfo.getCompany(), customerInfo == null ? null : customerInfo.getId(), ProductLocusInfo.RETURN_ENTRY_STATUS, null);
+            productLocusService.insertProductLocus(productLocusInfo);
+        }
+    }
+
+    @Override
+    public List<StockInfo> selectStockByProductId(Long id) {
+        String slice = productService.getSlice(id);
+        List<StockInfo>stockInfos = new ArrayList<>();
+        if (StringUtils.isBlank(slice)){
+            return stockInfos;
+        }
+        return stockInfoMapper.selectStockByProductId(id,slice);
+    }
+
+    @Override
+    public PageInfoExtension<Map> selectEnterpriseSaleDataGrid(PageInfo pageInfo) {
+        Page<StockVo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+
+        List<OrderItem> orderItems = new ArrayList<>();
+        OrderItem orderItem = new OrderItem();
+        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+            orderItem.setAsc("ascending".equalsIgnoreCase(pageInfo.getOrder()));
+            orderItem.setColumn(pageInfo.getSort());
+        }else {
+            orderItem.setAsc(false);
+            orderItem.setColumn("companynumber");
+        }
+        orderItems.add(orderItem);
+        page.setOrders(orderItems);
+        if (StringUtils.isBlank(pageInfo.getSort())){
+            pageInfo.setSort("companynumber");
+        }
+        if (StringUtils.isBlank(pageInfo.getOrder())){
+            pageInfo.setOrder("desc");
+        }
+        List<Integer>list = new ArrayList<>();
+        for (int i = 1; i<=20; i++){
+            list.add(i);
+        }
+        List<StockVo> stockVos = stockInfoMapper.selectEnterpriseSaleDataGrid(pageInfo.getCondition(),page,list);
+        Map total = stockInfoMapper.selectEnterpriseSaleDataCount(pageInfo.getCondition(), list);
+        pageInfo.setResult(stockVos);
+        pageInfo.setTotalCount(page.getTotal());
+        PageInfoExtension<Map> extension = new PageInfoExtension<>(pageInfo);
+        extension.setExtension(total);
+        return extension;
+
+    }
+
+    @Override
+    public void selectStockDetailByItemCode(PageInfo pageInfo) {
+        Page<StockVo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+
+        List<OrderItem> orderItems = new ArrayList<>();
+        OrderItem orderItem = new OrderItem();
+        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+            orderItem.setAsc("ascending".equalsIgnoreCase(pageInfo.getOrder()));
+            orderItem.setColumn(pageInfo.getSort());
+        }else {
+            orderItem.setAsc(false);
+            orderItem.setColumn("stock.id");
+        }
+        orderItems.add(orderItem);
+        page.setOrders(orderItems);
+        if (StringUtils.isBlank(pageInfo.getSort())){
+            pageInfo.setSort("stock.id");
+        }
+        if (StringUtils.isBlank(pageInfo.getOrder())){
+            pageInfo.setOrder("desc");
+        }
+        String itemCode = pageInfo.getCondition().get("itemCode").toString();
+        ProductInfo productInfo = productService.selectByDirection(itemCode);
+        if (productInfo != null){
+            String slice = productService.getSlice(itemCode);
+            pageInfo.getCondition().put("slice",slice);
+            List<StockVo> stockVos = stockInfoMapper.selectStockVoByItemCode(pageInfo.getCondition(),page);
+            pageInfo.setResult(stockVos);
+            pageInfo.setTotalCount(page.getTotal());
+        }
+
+
+    }
+
+    @Override
+    public void selectSaleDetailDataGrid(PageInfo pageInfo) {
+        Page<StockVo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+
+        List<OrderItem> orderItems = new ArrayList<>();
+        OrderItem orderItem = new OrderItem();
+        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+            orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
+            orderItem.setColumn(pageInfo.getSort());
+        }else {
+            orderItem.setAsc(false);
+            orderItem.setColumn("companynumber");
+        }
+        orderItems.add(orderItem);
+        page.setOrders(orderItems);
+        if (StringUtils.isBlank(pageInfo.getSort())){
+            pageInfo.setSort("companynumber");
+        }
+        if (StringUtils.isBlank(pageInfo.getOrder())){
+            pageInfo.setOrder("desc");
+        }
+        List<StockVo>stockVoList = stockInfoMapper.selectSaleDetailDataGrid(pageInfo.getCondition(),page);
+        pageInfo.setResult(stockVoList);
+        pageInfo.setTotalCount(page.getTotal());
+    }
+
+    @Override
+    public PageInfoExtension<StockTotal> selectDataGridExtensions(PageInfo pageInfo) {
+
+        List<Integer> slices = new ArrayList<Integer>(){{
+            for (int i = 1; i <= 20; i++) {
+                add(i);
+            }
+        }};
+
+        List<StockVo> stockVos = stockInfoMapper.selectStockDataGrid(pageInfo.getCondition(),null,slices);
+        pageInfo.setResult(stockVos);
+        pageInfo.setTotalCount((long) stockVos.size());
+        StockTotal stockTotal = new StockTotal(BigDecimal.ZERO);
+        if (stockVos.size() > 0) {
+            stockVos.forEach(item->{
+                BigDecimal toAdd = BigDecimal.ZERO;
+                if (item.getCountNum() != null )
+                    toAdd = item.getCountNum();
+                stockTotal.setCountNum(stockTotal.getCountNum().add(toAdd));
+            });
+        }
+
+        PageInfoExtension<StockTotal> extension = new PageInfoExtension<>(pageInfo);
+        extension.setExtension(stockTotal);
+        return extension;
+    }
+
+    @Override
+    public PageInfoExtension<ProductVo> selectCurrentFireStatus(Integer pageIndex,Integer pageSize, Map filter, UserInfo user) {
+        String directioncode = (String) filter.get("directioncode");
+        if (StringUtils.isBlank(directioncode) || FireworkDeal.isNotDirectionCode(directioncode))
+            throw new BusinessException("请输入合法的流向码");
+
+        DirectionDetail directionDetail = FireworkDeal.dealDirectionCode(directioncode);
+
+        ProductVo productVo = productService.selectVoByDirection(directioncode);
+        if (productVo == null)  throw new BusinessException("产品不存在");
+
+        //分表
+        String slice = productService.getSlice(directioncode);
+        List<ProductVo> productVos = new ArrayList<>();
+        List<StockInfo> records;
+        List<String> codes = null;
+        PageInfoExtension<ProductVo> extension = new PageInfoExtension<>();
+        //22位
+        if (FireworkDeal.is22Characters(directioncode)) {
+            FireworkDeal.getProductVos(directioncode,directionDetail,directionDetail,productVos,productVo);
+            if (productVos.size() < 1) throw new BusinessException("产品流向码出现问题");
+
+             codes = new ArrayList<String>() {{
+                for (ProductVo product : productVos) {
+                    add(product.getDirectionCode());
+                }
+            }};
+        }
+        //19位
+        if (FireworkDeal.is19Characters(directioncode)) {
+             codes = new ArrayList<String>(){{
+                add(directioncode);
+            }};
+        }
+
+        //条件准备
+        Map<String, Object> params = new HashMap<>();
+        String status = (String) filter.get("status");
+        //1.已售出
+        if ("已售出".equals(status))
+            params.put("status", status);
+
+        if ("未入库".equals(status)) {
+            params.put("status", "");
+            params.put("owner", "");
+        }
+
+        if ("已入库".equals(status)) {
+            params.put("status", "");
+            params.put("owner", "库存owner");
+        }
+
+
+        params.put("directioncode", directioncode);
+        //查询结果集
+        records = stockInfoMapper.selectCurrentFireStatus(codes,params,slice);
+
+
+        extension.setExtension(productVo);
+        extension.setResult(records);
+        extension.setPageIndex(pageIndex);
+        extension.setPageSize(pageSize);
+        //总数
+        assert codes != null;
+        extension.setTotalCount((long) codes.size());
+        return extension;
+    }
+
+    @Override
+    public List<StockVo> selectEnterpriseStocks(Map<String, Object> condition) {
+        List<Integer>list = new ArrayList<>();
+        for (int i = 1; i<=20; i++){
+            list.add(i);
+        }
+        return stockInfoMapper.selectEnterpriseStocks(condition,list);
+    }
+
+    @Override
+    public void saveOrUpdateCurrentStock(String updatedBy) {
+        Map<String, Object> condition = new HashMap<>(16);
+        List<StockVo>stockVos = selectEnterpriseStocks(condition);
+        List<StaticStock>staticStocks = new ArrayList<>();
+        for (StockVo stockVo : stockVos){
+            Enterprise enterprise = enterpriseService.getById(stockVo.getOwner());
+            StaticStock staticStock = new StaticStock(Long.parseLong(stockVo.getOwner()),stockVo.getEnterpriseName(),stockVo.getEnterpriseNumber(),
+                    enterprise.getSafetysupervision(),stockVo.getProvince(),stockVo.getCity(),stockVo.getDistrict(),
+                    stockVo.getStockNum(), stockVo.getFirecracker(),stockVo.getSpray(),stockVo.getRotation(),stockVo.getBead(),
+                    stockVo.getToy(),stockVo.getCombined(),updatedBy,new Date(),(byte)0 );
+            StaticStock staticStock1 = staticStockService.getByOwner(Long.parseLong(stockVo.getOwner()));
+            if (staticStock1 != null){
+                staticStock.setId(staticStock1.getId());
+            }
+            staticStocks.add(staticStock);
+        }
+        staticStockService.saveOrUpdateBatch(staticStocks);
+    }
+
+    @Override
+    public boolean clearStock(Enterprise enterprise) {
+        /*List<StockInfo>stocks = selectEnterpriseAllStock(enterprise);
+
+        stocks.forEach(item->{
+            item.setRemark();
+            item.setOwner("");
+            item.setModifieddate(date);
+        });*/
+        Date date = new Date();
+
+        String remark = "系统管理员清空,清空前归属:"+enterprise.getId()+",清空时间:"+new DateTime(date).toString("yyyy-MM-dd HH:mm:ss");
+
+        for (int i = 1; i<=20; i++){
+            int flag = stockInfoMapper.clearStock(enterprise.getId(),remark,date,"_slice"+i);
+        }
+
+        /*for (StockInfo stockInfo : stocks){
+            updateStockInfo(stockInfo);
+        }*/
+        StaticStock staticStock = staticStockService.getByOwner(enterprise.getId());
+        staticStock.setStockNum(new BigDecimal("0"));
+        staticStock.setFirecracker(new BigDecimal("0"));
+        staticStock.setSpray(new BigDecimal("0"));
+        staticStock.setRotation(new BigDecimal("0"));
+        staticStock.setBead(new BigDecimal("0"));
+        staticStock.setToy(new BigDecimal("0"));
+        staticStock.setCombined(new BigDecimal("0"));
+        staticStock.setUpdateat(date);
+        staticStockService.updateById(staticStock);
+        return true;
+    }
+
+    @Override
+    public boolean clearStockByItems(Enterprise enterprise, List<String> list) {
+        Date date = new Date();
+
+        String remark = "系统管理员清空,清空前归属:"+enterprise.getId()+",清空时间:"+new DateTime(date).toString("yyyy-MM-dd HH:mm:ss");
+
+        for (int i = 1; i<=20; i++){
+            int flag = stockInfoMapper.clearStockByItem(enterprise.getId(),list,remark,date,"_slice"+i);
+        }
+
+        /*StaticStock staticStock = staticStockService.getByOwner(enterprise.getId());
+        staticStock.setStockNum(new BigDecimal("0"));
+        staticStock.setFirecracker(new BigDecimal("0"));
+        staticStock.setSpray(new BigDecimal("0"));
+        staticStock.setRotation(new BigDecimal("0"));
+        staticStock.setBead(new BigDecimal("0"));
+        staticStock.setToy(new BigDecimal("0"));
+        staticStock.setCombined(new BigDecimal("0"));
+        staticStock.setUpdateat(date);
+        staticStockService.updateById(staticStock);*/
+        return true;
+    }
+
+    @Override
+    public StockInfo selectStockByDirectionAndSlice(String directionCodeStr, String slice) {
+        if (slice == null || StringUtils.isBlank(directionCodeStr)) {
+            throw new BusinessException("系统入参为空");
+        }
+        return stockInfoMapper.selectStockByDirection(directionCodeStr,slice);
+    }
+
+    @Override
+    public int insertStockInfoBySlice(StockInfo stockInfo, String slice) {
+        if (stockInfo == null || StringUtils.isBlank(slice)) {
+            throw new BusinessException("系统入参为空");
+        }
+        return stockInfoMapper.insertStockInfo(stockInfo, slice);
+    }
+
+    @Override
+    public int updateStockInfoBySlice(StockInfo stockInfo, String slice) {
+        if (stockInfo == null || StringUtils.isBlank(slice)) {
+            throw new BusinessException("系统入参为空");
+        }
+        return stockInfoMapper.updateStockInfo(stockInfo, slice);
+    }
+
+
+    private List<StockInfo> selectEnterpriseAllStock(Enterprise enterprise) {
+        List<Integer>list = new ArrayList<>();
+        for (int i = 1; i<=20; i++){
+            list.add(i);
+        }
+        return stockInfoMapper.selectEnterpriseAllStock(enterprise.getId(),list);
+    }
+
+    @Override
+    public List<StockInfo> selectEarlyWarn(Integer min, Integer max, String enterprisetype,List<Integer> slices) {
+        return stockInfoMapper.selectEarlyWarn(min, max, enterprisetype,slices);
+    }
+
+    @Override
+    public List<StockInfo> selectAlarm(Integer max, String enterprisetype, List<Integer> slices) {
+        return stockInfoMapper.selectAlarm(max, enterprisetype, slices);
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCarrierServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCarrierServiceImpl.java
new file mode 100644
index 0000000..26b6820
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCarrierServiceImpl.java
@@ -0,0 +1,112 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.TransportCarrier;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.FilterObject;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Mapper.TransportCarrierMapper;
+import com.gk.firework.Service.TransportCarrierService;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.Map;
+
+@Service("transportCarrierService")
+public class TransportCarrierServiceImpl extends ServiceImpl<TransportCarrierMapper, TransportCarrier> implements TransportCarrierService {
+
+    /**
+    * @Description: 分页查询承运人
+    * @date 2021/3/30 10:05
+    */
+    @Override
+    public IPage selectPage(Page<TransportCarrier> page, Map filter) {
+        //负责人
+        String name = (String) filter.get("name");
+        //单位名称
+        String companyName = (String) filter.get("companyname");
+        LambdaQueryWrapper<TransportCarrier> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.like(TransportCarrier::getName, name)
+                .like(TransportCarrier::getCompanyname, companyName)
+                .eq(TransportCarrier::getValidflag,true)
+                .orderByDesc(TransportCarrier::getCreatetime);
+        return this.page(page, queryWrapper);
+    }
+
+    /**
+    * @Description: 新增承运人
+    * @date 2021/3/30 10:05
+    */
+    @Override
+    public void addCarrier(TransportCarrier transportCarrier, UserInfo user) {
+        transportCarrier.setCreateby(user.getId());
+        transportCarrier.setCreatetime(new Date());
+        transportCarrier.setCreatebyname(user.getUsername());
+        transportCarrier.setValidflag(true);
+        this.save(transportCarrier);
+    }
+
+
+    /**
+    * @Description: 修改承运人
+    * @date 2021/3/30 10:08
+    */
+    @Override
+    public void modCarrier(TransportCarrier transportCarrier, UserInfo user) {
+        transportCarrier.setUpdateby(user.getId());
+        transportCarrier.setUpdatebyname(user.getUsername());
+        transportCarrier.setUpdatetime(new Date());
+        this.updateById(transportCarrier);
+    }
+
+    @Override
+    public void delCarrier(Long id, UserInfo user) {
+        TransportCarrier transportCarrier = new TransportCarrier();
+        transportCarrier.setId(id);
+        transportCarrier.setUpdateby(user.getId());
+        transportCarrier.setUpdatebyname(user.getUsername());
+        transportCarrier.setUpdatetime(new Date());
+        transportCarrier.setValidflag(false);
+        this.updateById(transportCarrier);
+    }
+
+    /**
+    * @Description: 承运人 校验
+    * @date 2021/4/6 16:10
+    */
+
+    @Override
+    public void checkCarrier(TransportCarrier transportCarrier) {
+
+        if (StringUtils.isBlank(transportCarrier.getCompanyname())) {
+            throw new BusinessException("单位名称不能为空");
+        }
+
+        if (StringUtils.isBlank(transportCarrier.getNumber())) {
+            throw new BusinessException("危险货物道路运输资质证号不能为空");
+        }
+
+        if (StringUtils.isBlank(transportCarrier.getAddress())) {
+            throw new BusinessException("地址不能为空");
+        }
+
+        if (StringUtils.isBlank(transportCarrier.getName())) {
+            throw new BusinessException("负责人姓名不能为空");
+        }
+
+        if (StringUtils.isBlank(transportCarrier.getPhone())) {
+            throw new BusinessException("负责人联系电话不能为空");
+        }
+
+        if (transportCarrier.getValidtime() == null) {
+            throw new BusinessException("证件有效期不能为空");
+        }
+
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertFileServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertFileServiceImpl.java
new file mode 100644
index 0000000..295b357
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertFileServiceImpl.java
@@ -0,0 +1,32 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.TransportCertFile;
+import com.gk.firework.Domain.TransportCertificate;
+import com.gk.firework.Mapper.TransportCertFileMapper;
+import com.gk.firework.Service.TransportCertFileService;
+import org.springframework.stereotype.Service;
+
+@Service("transportCertFileService")
+public class TransportCertFileServiceImpl extends ServiceImpl<TransportCertFileMapper, TransportCertFile> implements TransportCertFileService {
+
+    /**
+     * @Description: 根据运输证单号删除所有文件
+     * @date 2021/4/26 10:12
+     */
+    @Override
+    public void deleteByCode(String code) {
+        LambdaUpdateWrapper<TransportCertFile> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(TransportCertFile::getValidflag, false)
+                .eq(TransportCertFile::getValidflag, true)
+                .eq(TransportCertFile::getCertificatecode, code);
+        this.update(updateWrapper);
+    }
+
+    @Override
+    public TransportCertificate selectByCode(String code) {
+        return null;
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertProductServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertProductServiceImpl.java
new file mode 100644
index 0000000..3483518
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertProductServiceImpl.java
@@ -0,0 +1,39 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.TransportCertProduct;
+import com.gk.firework.Mapper.TransportCertProductMapper;
+import com.gk.firework.Service.TransportCertProductService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service("transportCertProductService")
+public class TransportCertProductServiceImpl extends ServiceImpl<TransportCertProductMapper, TransportCertProduct> implements TransportCertProductService {
+
+    @Autowired
+    private TransportCertProductMapper transportCertProductMapper;
+    /**
+    * @Description: 获取运输证下所有产品
+    * @date 2021/4/25 15:43
+    */
+    @Override
+    public List<TransportCertProduct> selectProduct(String code) {
+        LambdaQueryWrapper<TransportCertProduct> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(TransportCertProduct::getValidflag, true)
+                .eq(TransportCertProduct::getCertificatecode, code);
+        return transportCertProductMapper.selectList(queryWrapper);
+    }
+
+    @Override
+    public void deleteProductByCode(String code) {
+        LambdaUpdateWrapper<TransportCertProduct> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(TransportCertProduct::getValidflag,false)
+                .eq(TransportCertProduct::getCertificatecode,code)
+                .eq(TransportCertProduct::getValidflag,true);
+        this.update(updateWrapper);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertServiceImpl.java
new file mode 100644
index 0000000..568cb43
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertServiceImpl.java
@@ -0,0 +1,373 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.Enum.CertificateStatus;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.Utils.Properties;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Utils.UploadUtil;
+import com.gk.firework.Domain.Vo.TransportCertVo;
+import com.gk.firework.Mapper.TransportCertMapper;
+import com.gk.firework.Service.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+import sun.rmi.transport.Transport;
+
+import java.util.*;
+
+@Service("transportCertService")
+public class TransportCertServiceImpl extends ServiceImpl<TransportCertMapper, TransportCert> implements TransportCertService {
+
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private TransportCertProductService transportCertProductService;
+    @Autowired
+    private TransportCertificatePersonService transportCertificatePersonService;
+    @Autowired
+    private TransportCertMapper transportCertMapper;
+    @Autowired
+    private TransportCertFileService transportCertFileService;
+
+    @Override
+    @Transactional
+    public void addCert(TransportCertVo transportCertVo, UserInfo user) throws Exception {
+
+        if (StringUtils.isBlank(transportCertVo.getCode())) {
+            throw new BusinessException("运输证编号不能为空");
+        }
+        //判断重复
+        if (this.countByCode(transportCertVo.getCode()) > 0) {
+            throw new BusinessException("运输证编号已经重复");
+        }
+        JSONArray personJson = JSONArray.parseArray(transportCertVo.getTransportPerson());
+        JSONArray productJson = JSONArray.parseArray(transportCertVo.getTransportProduct());
+
+        if (personJson == null) {
+            throw new BusinessException("产品信息不能不填");
+        }
+        if (productJson == null) {
+            throw new BusinessException("驾驶员|押运员不能不填");
+        }
+
+
+        UserInfo userInfo = userService.getById(user.getId());
+        if (StringUtils.isBlank(userInfo.getCompanynumber())){
+            throw new BusinessException("没有权限创建运输证");
+        }
+        //新增运输证基本信息
+        TransportCert transportCert = new TransportCert();
+        {
+//            String code = "TC-" + System.currentTimeMillis();
+            //运输证上传改手动上传-》编号已存在(手填)
+            transportCert.setCode(transportCertVo.getCode());
+            transportCert.setCreateby(user.getId());
+            transportCert.setCreatebyname(user.getUsername());
+            transportCert.setEnterprisenumber(userInfo.getCompanynumber());
+            transportCert.setCreatetime(new Date());
+            transportCert.setValidflag(true);
+            transportCert.setStatus(CertificateStatus.PENDING);
+            transportCert.setCarnumber(transportCertVo.getCarnumber());
+            transportCert.setContractcode(transportCertVo.getContractcode());
+            transportCert.setReceiveraddress(transportCertVo.getReceiveraddress());
+            transportCert.setReceivercompanyname(transportCertVo.getReceivercompanyname());
+            transportCert.setReceiverprincipalname(transportCertVo.getReceiverprincipalname());
+            transportCert.setReceiveraddress(transportCertVo.getReceiveraddress());
+            transportCert.setReceiverprincipalphone(transportCertVo.getReceiverprincipalphone());
+            transportCert.setTransportPerson(personJson.toJavaList(TransportCertificatePerson.class));
+            transportCert.setTransportProduct(productJson.toJavaList(TransportCertProduct.class));
+            transportCert.setprocesstime(transportCertVo.getProcesstime());
+
+            this.save(transportCert);
+        }
+
+        //新增产品
+        {
+            List<TransportCertProduct> products = transportCert.getTransportProduct();
+            if (products != null && products.size() > 0) {
+                for (TransportCertProduct product : products) {
+                    product.setCertificatecode(transportCert.getCode());
+                    product.setValidflag(true);
+                }
+                transportCertProductService.saveBatch(products);
+            }
+        }
+
+        //新增 驾驶员|押运员
+        {
+            List<TransportCertificatePerson> persons = transportCert.getTransportPerson();
+            if (persons != null && persons.size() > 0) {
+                for (TransportCertificatePerson person : persons) {
+                    person.setCertificatecode(transportCert.getCode());
+                    person.setValidflag(true);
+                }
+                transportCertificatePersonService.saveBatch(persons);
+            }
+        }
+
+        //新增文件信息
+        {
+            MultipartFile[] files = transportCertVo.getFile();
+            List<TransportCertFile> adds;
+            if (files != null && files.length > 0) {
+                adds = new ArrayList<>();
+                for (MultipartFile file : files) {
+                    String name = UploadUtil.uploadFile(file, com.gk.firework.Domain.Utils.Properties.transportCertificatePath);
+                    TransportCertFile certFile = new TransportCertFile();
+                    certFile.setCertificatecode(transportCert.getCode());
+                    certFile.setFilename(file.getOriginalFilename());
+                    certFile.setType(file.getContentType());
+                    certFile.setUrl(Properties.transportCertificate + name);
+                    certFile.setValidflag(true);
+                    adds.add(certFile);
+                }
+                transportCertFileService.saveBatch(adds);
+
+            }
+
+        }
+    }
+
+
+    /**
+    * @Description: 分页查询运输证
+    * @date 2021/4/25 15:11
+    */
+    @Override
+    public IPage selectPages(Page<TransportCert> page, Map filter, UserInfo userInfo) {
+
+        UserInfo user = userService.getById(userInfo.getId());
+        Map<String, Object> params = new HashMap<>();
+        //可见权限
+        {
+            params.put("enterprisenumber", user.getCompanynumber());
+            params.put("province", user.getProvince());
+            params.put("city", user.getCity());
+            params.put("district", user.getArea());
+            params.put("street", user.getTown());
+            params.put("committee", user.getCommunity());
+        }
+        //基本
+        params.put("filterProvince", filter.get("province"));
+        params.put("filterCity", filter.get("city"));
+        params.put("filterDistrict",filter.get("district"));
+        params.put("filterStreet", filter.get("street"));
+        params.put("filterCommittee", filter.get("committee"));
+        params.put("code", filter.get("code"));
+        List<TransportCert> list = transportCertMapper.selectPages(page, params);
+        return page.setRecords(list);
+    }
+
+
+    /**
+     * @Description: 修改运输证
+     * @date 2021/4/25 15:29
+     */
+    @Override
+    @Transactional
+    public void modCert(TransportCertVo transportCertVo, UserInfo userInfo) throws Exception {
+
+        if (StringUtils.isBlank(transportCertVo.getCode())) {
+            throw new BusinessException("运输证编号不能为空");
+        }
+        JSONArray personJson = JSONArray.parseArray(transportCertVo.getTransportPerson());
+        JSONArray productJson = JSONArray.parseArray(transportCertVo.getTransportProduct());
+
+        if (personJson == null) {
+            throw new BusinessException("产品信息不能不填");
+        }
+        if (productJson == null) {
+            throw new BusinessException("驾驶员|押运员不能不填");
+        }
+        //修改运输证基本信息
+        TransportCert transportCert = new TransportCert();
+        UserInfo user = userService.getById(userInfo.getId());
+        {
+            transportCert.setCode(transportCertVo.getCode());
+            transportCert.setId(transportCertVo.getId());
+            transportCert.setCarnumber(transportCertVo.getCarnumber());
+            transportCert.setContractcode(transportCertVo.getContractcode());
+            transportCert.setReceiveraddress(transportCertVo.getReceiveraddress());
+            transportCert.setReceivercompanyname(transportCertVo.getReceivercompanyname());
+            transportCert.setReceiverprincipalname(transportCertVo.getReceiverprincipalname());
+            transportCert.setReceiveraddress(transportCertVo.getReceiveraddress());
+            transportCert.setReceiverprincipalphone(transportCertVo.getReceiverprincipalphone());
+            transportCert.setUpdateby(user.getId());
+            transportCert.setUpdatebyname(user.getUsername());
+            transportCert.setUpdatetime(new Date());
+            transportCert.setTransportPerson(personJson.toJavaList(TransportCertificatePerson.class));
+            transportCert.setTransportProduct(productJson.toJavaList(TransportCertProduct.class));
+            transportCert.setprocesstime(transportCertVo.getProcesstime());
+
+            this.updateById(transportCert);
+        }
+        //修改产品
+        {
+            List<TransportCertProduct> adds = new ArrayList<>();
+            List<TransportCertProduct> dels = new ArrayList<>();
+            List<TransportCertProduct> upds = new ArrayList<>();
+            List<TransportCertProduct> products = transportCert.getTransportProduct();
+            List<TransportCertProduct> productList = transportCertProductService.selectProduct(transportCert.getCode());
+            if (products.size() > 0) {
+                for (TransportCertProduct product : products) {
+                    if (product.getId() == null) {
+                        product.setValidflag(true);
+                        product.setCertificatecode(transportCert.getCode());
+                        adds.add(product);
+                    }
+                }
+            }
+            //B-A
+            if (productList.size() > 0) {
+                for (int i = 0; i < productList.size(); i++) {
+                    boolean flag = true;
+                    for (int j = 0; j < products.size(); j++) {
+                        if (productList.get(i).getId().equals(products.get(j).getId())) {
+                            upds.add(products.get(j));
+                            flag = false;
+                        }
+                    }
+                    if (flag) {
+                        productList.get(i).setValidflag(false);
+                        dels.add(productList.get(i));
+                    }
+
+
+                }
+            }
+
+            if (adds.size() > 0) {
+                transportCertProductService.saveBatch(adds);
+            }
+            if (dels.size() > 0) {
+                transportCertProductService.updateBatchById(dels);
+            }
+            if (upds.size() > 0) {
+                transportCertProductService.updateBatchById(upds);
+            }
+        }
+
+        //修改人员
+        {
+
+            List<TransportCertificatePerson> adds = new ArrayList<>();
+            List<TransportCertificatePerson> dels = new ArrayList<>();
+            List<TransportCertificatePerson> upds = new ArrayList<>();
+            List<TransportCertificatePerson> persons = transportCert.getTransportPerson();
+            List<TransportCertificatePerson> personList = transportCertificatePersonService.selectProduct(transportCert.getCode());
+            if (persons.size() > 0) {
+                for (TransportCertificatePerson person : persons) {
+                    if (person.getId() == null) {
+                        person.setValidflag(true);
+                        person.setCertificatecode(transportCert.getCode());
+                        adds.add(person);
+                    }
+                }
+            }
+            //B-A
+            if (personList.size() > 0) {
+                for (int i = 0; i < personList.size(); i++) {
+                    boolean flag = true;
+                    for (int j = 0; j < persons.size(); j++) {
+                        if (personList.get(i).getId().equals(persons.get(j).getId())) {
+                            upds.add(persons.get(j));
+                            flag = false;
+                        }
+                    }
+                    if (flag) {
+                        personList.get(i).setValidflag(false);
+                        dels.add(personList.get(i));
+                    }
+
+
+                }
+            }
+
+            if (adds.size() > 0) {
+                transportCertificatePersonService.saveBatch(adds);
+            }
+            if (dels.size() > 0) {
+                transportCertificatePersonService.updateBatchById(dels);
+            }
+            if (upds.size() > 0) {
+                transportCertificatePersonService.updateBatchById(upds);
+            }
+        }
+
+
+        //修改文件(每次上传都是覆盖)
+        {
+
+            MultipartFile[] files = transportCertVo.getFile();
+            List<TransportCertFile> adds;
+            if (files != null && files.length > 0) {
+                //1.删除所有文件
+                transportCertFileService.deleteByCode(transportCert.getCode());
+
+                //2.新增新上传文件
+                adds = new ArrayList<>();
+                for (MultipartFile file : files) {
+                    String name = UploadUtil.uploadFile(file, com.gk.firework.Domain.Utils.Properties.transportCertificatePath);
+                    TransportCertFile certFile = new TransportCertFile();
+                    certFile.setCertificatecode(transportCert.getCode());
+                    certFile.setFilename(file.getOriginalFilename());
+                    certFile.setType(file.getContentType());
+                    certFile.setUrl(Properties.transportCertificate + name);
+                    certFile.setValidflag(true);
+                    adds.add(certFile);
+                }
+                transportCertFileService.saveBatch(adds);
+
+            }
+        }
+    }
+
+
+    /**
+    * @Description: 删除单子
+    * @date 2021/4/28 8:33
+    */
+    @Override
+    public void delCert(Long id, UserInfo user) {
+        TransportCert cert = new TransportCert();
+        cert.setId(id);
+        cert.setUpdatetime(new Date());
+        cert.setUpdateby(user.getId());
+        cert.setUpdatebyname(user.getUsername());
+        cert.setValidflag(false);
+        this.updateById(cert);
+
+        TransportCert transport = this.getById(cert);
+        //删除产品
+        transportCertProductService.deleteProductByCode(transport.getCode());
+        //删除人员
+        transportCertificatePersonService.deleteByCertificateCode(transport.getCode());
+        //删除文件
+        transportCertFileService.deleteByCode(transport.getCode());
+    }
+
+    @Override
+    public int countByCode(String code) {
+        if (StringUtils.isBlank(code)) {
+            throw new BusinessException("运输证编号不能为空");
+        }
+        LambdaQueryWrapper<TransportCert> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(TransportCert::getValidflag, true)
+                .eq(TransportCert::getCode, code);
+        return transportCertMapper.selectCount(queryWrapper);
+    }
+
+    @Override
+    public List<TransportCert> selectWarnList(Date start, Date end) {
+        return transportCertMapper.selectWarnList(start,end);
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertificateApproachServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertificateApproachServiceImpl.java
new file mode 100644
index 0000000..7cb0cd4
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertificateApproachServiceImpl.java
@@ -0,0 +1,23 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.TransportCertificateApproach;
+import com.gk.firework.Mapper.TransportCertificateApproachMapper;
+import com.gk.firework.Service.TransportCertificateApproachService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service("transportCertificateApproachService")
+public class TransportCertificateApproachServiceImpl extends ServiceImpl<TransportCertificateApproachMapper, TransportCertificateApproach> implements TransportCertificateApproachService {
+
+    @Autowired
+    private TransportCertificateApproachMapper transportCertificateApproachMapper;
+    /**
+    * @Description: 根据{运输证编码}删除途径地
+    * @date 2021/4/2 15:28
+    */
+    @Override
+    public void deleteByCertificateCode(String code) {
+        transportCertificateApproachMapper.deleteByCertificateCode(code);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertificateArrivalRecordServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertificateArrivalRecordServiceImpl.java
new file mode 100644
index 0000000..915886b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertificateArrivalRecordServiceImpl.java
@@ -0,0 +1,54 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.TransportCertificateArrivalRecord;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Vo.TransportArrivalSum;
+import com.gk.firework.Mapper.TransportCertificateArrivalRecordMapper;
+import com.gk.firework.Service.TransportCertificateArrivalRecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import redis.clients.jedis.ZParams;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service("transportCertificateArrivalRecordService")
+public class TransportCertificateArrivalRecordServiceImpl extends ServiceImpl<TransportCertificateArrivalRecordMapper, TransportCertificateArrivalRecord> implements TransportCertificateArrivalRecordService {
+
+    @Autowired
+    TransportCertificateArrivalRecordMapper transportCertificateArrivalRecordMapper;
+    @Override
+    public IPage selectTransportArrivalPages(Page<TransportArrivalSum> page, UserInfo user) {
+
+        Map<String, Object> params = new HashMap<>();
+        params.put("enterprisenumber", user.getUsername());
+        List<TransportArrivalSum> sums = transportCertificateArrivalRecordMapper.selectTransportArrivalPages(page, params);
+        return page.setRecords(sums);
+    }
+
+
+    /**
+    * @Description: 获取企业单位 在特定运输单的 到货记录
+    * @date 2021/5/14 22:14
+    */
+    @Override
+    public List<TransportCertificateArrivalRecord> getTransportArrivalDetail(String certificateCode, UserInfo user) {
+
+        if (StringUtils.isBlank(certificateCode)) {
+            throw new BusinessException("运输证单号不能为空");
+        }
+        LambdaQueryWrapper<TransportCertificateArrivalRecord> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(TransportCertificateArrivalRecord::getValidflag, true)
+                .eq(TransportCertificateArrivalRecord::getCertificatecode, certificateCode)
+                .eq(TransportCertificateArrivalRecord::getCreatebyname,user.getUsername())
+                .orderByDesc(TransportCertificateArrivalRecord::getCreatetime);
+        return transportCertificateArrivalRecordMapper.selectList(queryWrapper);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertificateFileServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertificateFileServiceImpl.java
new file mode 100644
index 0000000..bf6b4ed
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertificateFileServiceImpl.java
@@ -0,0 +1,46 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.TransportCertificateFile;
+import com.gk.firework.Domain.Utils.Properties;
+import com.gk.firework.Domain.Utils.UploadUtil;
+import com.gk.firework.Mapper.TransportCertificateFileMapper;
+import com.gk.firework.Service.TransportCertificateFileService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service("transportCertificateFileService")
+public class TransportCertificateFileServiceImpl extends ServiceImpl<TransportCertificateFileMapper, TransportCertificateFile> implements TransportCertificateFileService {
+
+    @Autowired
+    private TransportCertificateFileMapper transportCertificateFileMapper;
+
+    /**
+    * @Description: 运输证10个Url单独上传返回地址
+    * @date 2021/4/2 14:30
+    */
+        @Override
+    public List<String> uploadFiles(MultipartFile[] files) throws Exception {
+
+        List<String> urls = new ArrayList<>();
+        for (MultipartFile file : files) {
+                String name = UploadUtil.uploadFile(file, Properties.transportCertificatePath);
+                urls.add(Properties.transportCertificate + name);
+        }
+        return urls;
+    }
+
+    /**
+    * @Description: 根据{运输证编码}删除文件
+    * @date 2021/4/2 15:51
+    */
+    @Override
+    public void deleteByCertificateCode(String code) {
+        transportCertificateFileMapper.deleteByCertificateCode(code);
+    }
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertificatePersonServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertificatePersonServiceImpl.java
new file mode 100644
index 0000000..32efdcc
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertificatePersonServiceImpl.java
@@ -0,0 +1,43 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.TransportCertProduct;
+import com.gk.firework.Domain.TransportCertificatePerson;
+import com.gk.firework.Mapper.TransportCertificatePersonMapper;
+import com.gk.firework.Service.TransportCertificatePersonService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service("transportCertificatePersonService")
+public class TransportCertificatePersonServiceImpl extends ServiceImpl<TransportCertificatePersonMapper, TransportCertificatePerson> implements TransportCertificatePersonService {
+
+    @Autowired
+    private TransportCertificatePersonMapper transportCertificatePersonMapper;
+
+    /**
+    * @Description: 根据{运输证编码}删除押运人|驾驶人
+    * @date 2021/4/2 15:07
+    */
+    @Override
+    public void deleteByCertificateCode(String code) {
+        transportCertificatePersonMapper.deleteByCertificateCode(code);
+    }
+
+
+    /**
+    * @Description: 根据运输证号 查找押运人|驾驶人
+    * @date 2021/4/25 17:27
+    */
+    @Override
+    public List<TransportCertificatePerson> selectProduct(String code) {
+
+        LambdaQueryWrapper<TransportCertificatePerson> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(TransportCertificatePerson::getCertificatecode, code)
+                .eq(TransportCertificatePerson::getValidflag,true);
+
+        return transportCertificatePersonMapper.selectList(queryWrapper);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertificateProductSeriveImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertificateProductSeriveImpl.java
new file mode 100644
index 0000000..b39c0d0
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertificateProductSeriveImpl.java
@@ -0,0 +1,37 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.TransportCertificateProduct;
+import com.gk.firework.Mapper.TransportCertificateProductMapper;
+import com.gk.firework.Service.TransportCertificateProductService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service("transportCertificateProductService")
+public class TransportCertificateProductSeriveImpl extends ServiceImpl<TransportCertificateProductMapper, TransportCertificateProduct> implements TransportCertificateProductService {
+
+    @Autowired
+    private TransportCertificateProductMapper transportCertificateProductMapper;
+
+    /**
+    * @Description: 根据{运输证编号} 删除产品
+    * @date 2021/4/2 15:15
+    */
+    @Override
+    public void deleteByCertificateCode(String code) {
+        transportCertificateProductMapper.deleteByCertificateCode(code);
+    }
+
+    @Override
+    public List<TransportCertificateProduct> getListByTransportCode(String code) {
+        LambdaQueryWrapper<TransportCertificateProduct> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(TransportCertificateProduct::getCertificatecode, code)
+                .eq(TransportCertificateProduct::getValidflag,true);
+        return transportCertificateProductMapper.selectList(queryWrapper);
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertificateServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertificateServiceImpl.java
new file mode 100644
index 0000000..36abcf4
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/TransportCertificateServiceImpl.java
@@ -0,0 +1,838 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.Enum.CertificatePersonType;
+import com.gk.firework.Domain.Enum.CertificateStatus;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.Utils.*;
+import com.gk.firework.Domain.Utils.Properties;
+import com.gk.firework.Domain.Vo.TransportArrivalVo;
+import com.gk.firework.Mapper.TransportCertificateMapper;
+import com.gk.firework.Service.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.ResourceUtils;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+
+@Service("transportCertificateService")
+public class TransportCertificateServiceImpl extends ServiceImpl<TransportCertificateMapper, TransportCertificate> implements TransportCertificateService {
+
+    //最少行数限制
+    private final static Integer rowMinSizeLimit = 12;
+    private final static SimpleDateFormat  TransportDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
+
+    @Autowired
+    private TransportCertificateMapper transportCertificateMapper;
+    @Autowired
+    private TransportCertificatePersonService transportCertificatePersonService;
+    @Autowired
+    private TransportCertificateProductService transportCertificateProductService;
+    @Autowired
+    private TransportCertificateApproachService transportCertificateApproachService;
+    @Autowired
+    private TransportCertificateFileService transportCertificateFileService;
+    @Autowired
+    private TransportCertificateArrivalRecordService transportCertificateArrivalRecordService;
+    @Autowired
+    private UserService userService;
+    @Autowired
+    private EnterpriseService enterpriseService;
+
+    @Override
+    public IPage selectPages(Page<TransportCertificate> page, Map filter, UserInfo userInfo) {
+        UserInfo user = userService.getById(userInfo.getId());
+        Map<String, Object> params = new HashMap<>();
+        //可见权限
+        {
+            params.put("enterprisenumber", user.getCompanynumber());
+            params.put("province", user.getProvince());
+            params.put("city", user.getCity());
+            params.put("district", user.getArea());
+            params.put("street", user.getTown());
+            params.put("committee", user.getCommunity());
+        }
+        //基本
+        params.put("filterProvince", filter.get("province"));
+        params.put("filterCity", filter.get("city"));
+        params.put("filterDistrict",filter.get("district"));
+        params.put("filterStreet", filter.get("street"));
+        params.put("filterCommittee", filter.get("committee"));
+        params.put("code", filter.get("code"));
+        params.put("enterprisename", filter.get("enterprisename"));
+        params.put("page", filter.get("page"));
+        params.put("tosubmmit", CertificateStatus.TOSUBMIT);
+        List<TransportCertificate> list = transportCertificateMapper.selectPages(page, params);
+        return page.setRecords(list);
+    }
+
+    /**
+    * @Description: 新增运输证
+    * @date 2021/4/1 13:02
+    */
+    @Override
+    @Transactional
+    public void addCertificateApply(TransportCertificate transportCertificate, UserInfo user) {
+
+        UserInfo userInfo = userService.getById(user.getId());
+        if (StringUtils.isBlank(userInfo.getCompanynumber())){
+            throw new BusinessException("没有权限创建运输证");
+        }
+        //新增运输证基本信息
+        {
+            String code = "TC-" + System.currentTimeMillis();
+            transportCertificate.setCode(code);
+            transportCertificate.setCertstatus("未入库");
+            transportCertificate.setCreateby(user.getId());
+            transportCertificate.setCreatebyname(user.getUsername());
+            transportCertificate.setEnterprisenumber(userInfo.getCompanynumber());
+            transportCertificate.setCreatetime(new Date());
+            transportCertificate.setValidflag(true);
+            transportCertificate.setStatus(CertificateStatus.TOSUBMIT);
+            this.save(transportCertificate);
+        }
+        //新增驾驶员和押运人
+        {
+
+            List<TransportCertificatePerson> person = transportCertificate.getTransportPerson();
+            if (person != null && person.size() > 0) {
+                for (TransportCertificatePerson p : person) {
+                    p.setCertificatecode(transportCertificate.getCode());
+                    p.setValidflag(true);
+                }
+                transportCertificatePersonService.saveBatch(person);
+            }
+        }
+
+        //新建产品信息
+        {
+            List<TransportCertificateProduct> products = transportCertificate.getTransportProduct();
+            if (products != null && products.size() > 0) {
+                for (TransportCertificateProduct p : products) {
+                    p.setCertificatecode(transportCertificate.getCode());
+                    p.setArrivalnum(0);
+                    p.setValidflag(true);
+                }
+                transportCertificateProductService.saveBatch(products);
+            }
+        }
+        //新增途径地
+
+        {
+            List<TransportCertificateApproach> approach = transportCertificate.getTransportApproach();
+            if (approach != null && approach.size() > 0) {
+                for (TransportCertificateApproach a : approach) {
+                    a.setCertificatecode(transportCertificate.getCode());
+                    a.setValidflag(true);
+                }
+                transportCertificateApproachService.saveBatch(approach);
+
+            }
+        }
+        //新增图片
+        {
+            TransportCertificateFile files = transportCertificate.getTransportFile();
+            if (files != null) {
+                files.setId(null);
+                files.setCertificatecode(transportCertificate.getCode());
+                files.setValidflag(true);
+                transportCertificateFileService.save(files);
+            }
+        }
+
+    }
+
+    /**
+    * @Description: 修改运输证
+    * @date 2021/4/2 14:49
+    */
+    @Override
+    @Transactional
+    public void modCertificateApply(TransportCertificate transportCertificate, UserInfo user) {
+
+
+        //1.判断单子状态
+        TransportCertificate certificate = this.getById(transportCertificate.getId());
+        if (certificate.getStatus() != CertificateStatus.TOSUBMIT){
+            throw new BusinessException("非待提交状态不能修改");
+        }
+        //修改运输证基本信息
+        {
+            transportCertificate.setUpdateby(user.getId());
+            transportCertificate.setUpdatebyname(user.getUsername());
+            transportCertificate.setUpdatetime(new Date());
+            this.updateById(transportCertificate);
+        }
+
+        //修改驾驶员和押运人
+        {
+            //1.删除所有已关联驾驶员和押运人
+            transportCertificatePersonService.deleteByCertificateCode(transportCertificate.getCode());
+            //2.新增关联驾驶员和押运人
+            List<TransportCertificatePerson> person = transportCertificate.getTransportPerson();
+            if (person != null && person.size() > 0) {
+                for (TransportCertificatePerson p : person) {
+                    p.setId(null);
+                    p.setCertificatecode(transportCertificate.getCode());
+                    p.setValidflag(true);
+                }
+                transportCertificatePersonService.saveBatch(person);
+            }
+        }
+
+        //修改产品信息
+        {
+
+            //1.删除所有关联产品信息
+            transportCertificateProductService.deleteByCertificateCode(transportCertificate.getCode());
+            //2.新增关联驾驶员和押运人
+            List<TransportCertificateProduct> products = transportCertificate.getTransportProduct();
+            if (products != null && products.size() > 0) {
+                for (TransportCertificateProduct p : products) {
+                    p.setId(null);
+                    p.setCertificatecode(transportCertificate.getCode());
+                    p.setValidflag(true);
+                }
+                transportCertificateProductService.saveBatch(products);
+            }
+        }
+
+        //修改产品信息
+        {
+
+            //1.删除所有关联产品信息
+            transportCertificateProductService.deleteByCertificateCode(transportCertificate.getCode());
+            //2.新增关联产品信息
+            List<TransportCertificateProduct> products = transportCertificate.getTransportProduct();
+            if (products != null && products.size() > 0) {
+                for (TransportCertificateProduct p : products) {
+                    p.setCertificatecode(transportCertificate.getCode());
+                    p.setValidflag(true);
+                }
+                transportCertificateProductService.saveBatch(products);
+            }
+        }
+
+        //修改途径地
+        {
+            //1.删除所有途径地
+            transportCertificateApproachService.deleteByCertificateCode(transportCertificate.getCode());
+            //2.新增关联途径地
+            List<TransportCertificateApproach> approach = transportCertificate.getTransportApproach();
+            if (approach != null && approach.size() > 0) {
+                for (TransportCertificateApproach a : approach) {
+                    a.setId(null);
+                    a.setCertificatecode(transportCertificate.getCode());
+                    a.setValidflag(true);
+                }
+                transportCertificateApproachService.saveBatch(approach);
+            }
+        }
+
+        //修改途径地
+        {
+            //1.删除所有途径地
+            transportCertificateApproachService.deleteByCertificateCode(transportCertificate.getCode());
+            //2.新增关联途径地
+            List<TransportCertificateApproach> approach = transportCertificate.getTransportApproach();
+            if (approach != null && approach.size() > 0) {
+                for (TransportCertificateApproach a : approach) {
+                    a.setId(null);
+                    a.setCertificatecode(transportCertificate.getCode());
+                    a.setValidflag(true);
+                }
+                transportCertificateApproachService.saveBatch(approach);
+
+            }
+        }
+
+
+        //修改图片
+        {
+            //1.删除所有图片
+            transportCertificateFileService.deleteByCertificateCode(transportCertificate.getCode());
+            //2.新增关联图片
+            TransportCertificateFile files = transportCertificate.getTransportFile();
+            if (files != null) {
+                files.setId(null);
+                files.setCertificatecode(transportCertificate.getCode());
+                files.setValidflag(true);
+                transportCertificateFileService.save(files);
+            }
+
+        }
+
+    }
+
+    /**
+    * @Description: 删除运输证
+    * @date 2021/4/2 16:16
+    */
+    @Override
+    public void delCertificate(Long id, UserInfo user) {
+        TransportCertificate certificate = new TransportCertificate();
+        certificate.setId(id);
+        certificate.setUpdatetime(new Date());
+        certificate.setUpdatebyname(user.getUsername());
+        certificate.setUpdateby(user.getId());
+        certificate.setValidflag(false);
+        this.updateById(certificate);
+    }
+
+
+    /**
+    * @Description: 根据id获取运输证信息
+    * @date 2021/5/11 17:48
+    */
+    @Override
+    public TransportCertificate getOneById(Long id) {
+        return transportCertificateMapper.getOneById(id);
+    }
+
+
+    /**
+    * @Description: 提交单子
+    * @date 2021/5/11 16:05
+    */
+    @Override
+    public void summitApply(Long id, UserInfo user) {
+        TransportCertificate certificate = new TransportCertificate();
+        certificate.setId(id);
+        certificate.setUpdatetime(new Date());
+        certificate.setUpdatebyname(user.getUsername());
+        certificate.setUpdateby(user.getId());
+        certificate.setValidflag(true);
+        certificate.setStatus(CertificateStatus.PENDING);
+        this.updateById(certificate);
+    }
+
+
+    /**
+    * @Description: 监管部门审批
+    * @date 2021/5/11 16:10
+    */
+    @Override
+    public void approveApply(JSONObject params, UserInfo user) {
+        Long id = params.getLong("id");
+        String signperson = params.getString("signperson");
+        String issueperson = params.getString("issueperson");
+        String issuepersonphone = params.getString("issuepersonphone");
+        Date deadline = params.getDate("deadline");
+        //简单校验
+        {
+            if (id == null) {
+                throw new BusinessException("审批错误,请联系管理员");
+            }
+
+            if (StringUtils.isBlank(signperson)) {
+                throw new BusinessException("请填写签发人员");
+            }
+
+            if (StringUtils.isBlank(issueperson)) {
+                throw new BusinessException("请填写填发人员");
+            }
+
+            if (StringUtils.isBlank(issuepersonphone)) {
+                throw new BusinessException("请填写填发人员联系电话");
+            }
+
+            if (deadline == null) {
+                throw new BusinessException("请填写填发预期到达日期");
+            }
+        }
+
+        //判断托运人和收货人的许可证是否过期
+        TransportCertificate transportCertificate = this.getOneById(id);
+        Enterprise shipper = enterpriseService.selectEnterpriseByName(transportCertificate.getShippercompanyname());
+        Enterprise receiver = enterpriseService.selectEnterpriseByName(transportCertificate.getReceivercompanyname());
+        Date date = new Date();
+        if (shipper == null){
+            throw new BusinessException("托运单位不存在");
+        }
+        if (receiver == null){
+            throw new BusinessException("收货单位不存在");
+        }
+        if (shipper.getValidendtime().getTime() < date.getTime()){
+            throw new BusinessException("托运单位运输证已过期");
+        }
+        if (receiver.getValidendtime().getTime() < date.getTime()){
+            throw new BusinessException("收货单位运输证已过期");
+        }
+
+
+        //修改信息
+        TransportCertificate certificate = new TransportCertificate();
+        certificate.setId(id);
+        certificate.setUpdatetime(new Date());
+        certificate.setUpdatebyname(user.getUsername());
+        certificate.setUpdateby(user.getId());
+        certificate.setValidflag(true);
+        certificate.setStatus(CertificateStatus.APPROVED);
+        certificate.setSignperson(signperson);
+        certificate.setIssueperson(issueperson);
+        certificate.setIssuepersonphone(issuepersonphone);
+        certificate.setDeadline(deadline);
+        this.updateById(certificate);
+    }
+
+    /**
+    * @Description: 监管部门回拒单子-》待提交状态
+    * @date 2021/5/11 16:14
+    */
+    @Override
+    public void refuseApply(Long id, UserInfo user) {
+        TransportCertificate certificate = new TransportCertificate();
+        certificate.setId(id);
+        certificate.setUpdatetime(new Date());
+        certificate.setUpdatebyname(user.getUsername());
+        certificate.setUpdateby(user.getId());
+        certificate.setValidflag(true);
+        certificate.setStatus(CertificateStatus.TOSUBMIT);
+        this.updateById(certificate);
+    }
+
+    /**
+     * @Description: 导出运输许可证 三联
+     * @date 2021/5/11 17:14
+     */
+    @Override
+    public String exportCertificate(Long id) {
+
+        TransportCertificate certificate = this.getOneById(id);
+        if (certificate.getStatus() != CertificateStatus.APPROVED) {
+            throw new BusinessException("未审批不能导出相关许可证");
+        }
+        //如果已经生成旧不需要生成了
+        String fileUrl = Properties.transportCertificatePath + certificate.getCode()+".docx";
+        String fileUrlReturn = Properties.transportCertificate+ certificate.getCode()+".docx";
+        if (new File(fileUrl).exists()) {
+            return fileUrlReturn;
+        }
+
+        try {
+//            File file = ResourceUtils.getFile("classpath:printTemplate/certificatelicense.docx");
+            ClassPathResource classPathResource = new ClassPathResource("printTemplate/certificatelicense.docx");
+            InputStream inputStream = classPathResource.getInputStream();
+            WordTemplate wordTemplate = new WordTemplate();
+            wordTemplate.loadTemplate(null,inputStream);
+            //参数
+            Map<String, String> params = new HashMap<>();
+            //编号
+            params.put("ordercode",certificate.getCode());
+            //托运人:单位名称
+            params.put("shippercompanyname",certificate.getShippercompanyname());
+            //收货人:单位名称
+            params.put("receivercompanyname",certificate.getReceivercompanyname());
+            //承运人:单位名称
+            params.put("carriercompanyname",certificate.getCarriercompanyname());
+            //承运人:联系电话
+            params.put("carrierprincipalphone",certificate.getCarrierprincipalphone());
+            //截止日期
+            Date deadline = certificate.getDeadline();
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(deadline);
+            //年
+            params.put("endyear", calendar.get(Calendar.YEAR) + "");
+            //月
+            params.put("endmonth", calendar.get(Calendar.MONTH) + "");
+            //日
+            params.put("endday", calendar.get(Calendar.DATE) + "");
+            //运输车辆牌号
+            params.put("carriercarnumber",certificate.getCarriercarnumber());
+            //运输起始地
+            params.put("startplace", certificate.getOtherdeparture());
+            //运输目的地
+            params.put("endplace", certificate.getOtherdestination());
+            //运输途径地  任意一处
+            params.put("byway", certificate.getOtherdeparture());
+            List<TransportCertificateApproach> approachList = certificate.getTransportApproach();
+            if (approachList != null && approachList.size() > 0) {
+                params.put("byway", approachList.get(0).getCity());
+            }
+            //签发人
+            params.put("signperson", certificate.getSignperson());
+            //填发人
+            params.put("issueperson", certificate.getIssueperson());
+            //填发人联系方式
+            params.put("issuepersonphone", certificate.getIssuepersonphone());
+            params.put("first", "第一联 公安局存查联");
+            params.put("second", "第二联 托运人存查联");
+            params.put("third", "第三联 承运人存查联");
+
+            //产品信息
+            List<String[]> productPrintList= new ArrayList<>();
+            List<TransportCertificateProduct> productList = certificate.getTransportProduct();
+            assert productList.size() > 0;
+
+            for (TransportCertificateProduct product : productList) {
+                productPrintList.add(new String[]
+                        {
+                        //种类
+                        product.getType(),
+                        //规格
+                        product.getSpecification(),
+                        //数量
+                        product.getNum()+"(箱)",
+                        //备注 暂无字段,默认为空
+                        ""
+                        });
+            }
+            //至少10行
+            int size = productList.size();
+            if (size < rowMinSizeLimit) {
+                for (int i = 0; i < rowMinSizeLimit - size; i++) {
+                    productPrintList.add(new String[]{"","","",""});
+                }
+            }
+            String[] rowParams = {"type", "specification", "num", "memo"};
+            HashMap<String,WordTemplate.Table> tables = new HashMap<>();
+            WordTemplate.Table t1 = new WordTemplate.Table(rowParams,productPrintList);
+            tables.put("mainTable", t1);
+            wordTemplate.replaceDocument(tables, params);
+            //存一份到本地
+            wordTemplate.saveFileAndQRCode(fileUrl,certificate.getCode());
+            return fileUrlReturn;
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+            throw new BusinessException("找不到模板文件路径");
+        } catch (IOException e) {
+            e.printStackTrace();
+            throw new BusinessException("发生错误,请联系管理员");
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return fileUrlReturn;
+    }
+
+    /**
+    * @Description: 校验运输证信息
+    * @date 2021/5/12 14:09
+    */
+    @Override
+    public void checkAddApply(TransportCertificate transportCertificate) {
+
+        if (transportCertificate.getTransportProduct() == null || transportCertificate.getTransportProduct().size() < 1) {
+            throw new BusinessException("产品不能为空");
+        }
+
+        if (StringUtils.isBlank(transportCertificate.getOtherdeparture())) {
+            throw new BusinessException("运输起始地不能为空");
+        }
+
+        if (StringUtils.isBlank(transportCertificate.getOtherdestination())) {
+            throw new BusinessException("运输到达地不能为空");
+        }
+
+        if (StringUtils.isBlank(transportCertificate.getReceivercompanyname())) {
+            throw new BusinessException("收货单位不能为空");
+        }
+
+        if (StringUtils.isBlank(transportCertificate.getShippercompanyname())) {
+            throw new BusinessException("托运单位不能为空");
+        }
+
+        //承运人负责人电话
+        if (StringUtils.isBlank(transportCertificate.getCarrierprincipalname())) {
+            throw new BusinessException("承运单位负责联系电话不能为空");
+        }
+
+        if (StringUtils.isBlank(transportCertificate.getCarriercarnumber())) {
+            throw new BusinessException("承运单位运输车牌号不能为空");
+        }
+
+        if (StringUtils.isBlank(transportCertificate.getCarriernumber())) {
+            throw new BusinessException("承运单位资格证编号不能为空");
+        }
+
+        if (StringUtils.isBlank(transportCertificate.getCarrierroadnumber())) {
+            throw new BusinessException("承运单位道路运输证编号不能为空");
+        }
+
+
+
+    }
+
+    @Override
+    public String exportCertificateApply(Long id) {
+
+        TransportCertificate certificate = this.getOneById(id);
+        if (certificate.getStatus() == CertificateStatus.PENDING) {
+            throw new BusinessException("未提交单子不能导出");
+        }
+        //如果已经生成旧不需要生成了
+        String fileUrl = Properties.transportCertificatePath + certificate.getCode()+"-apply.docx";
+        String fileUrlReturn =  Properties.transportCertificate+certificate.getCode()+"-apply.docx";
+        if (new File(fileUrl).exists()) {
+            return fileUrlReturn;
+        }
+
+        try {
+//            File file = ResourceUtils.getFile("classpath:printTemplate/certificatelicenseApply.docx");
+            ClassPathResource classPathResource = new ClassPathResource("printTemplate/certificatelicenseapply.docx");
+            InputStream inputStream =classPathResource.getInputStream();;
+            WordTemplate wordTemplate = new WordTemplate();
+            wordTemplate.loadTemplate(null,inputStream);
+            //参数
+            Map<String, String> params = new HashMap<>();
+            //编号
+            params.put("ordercode",certificate.getCode());
+            //托运人
+            {
+                //托运人:单位名称
+                params.put("shippercompanyname",certificate.getShippercompanyname());
+                //托运人:单位地址
+                params.put("shipperaddress",certificate.getShipperaddress());
+                //托运人:负责人姓名
+                params.put("shipperprincipalname",certificate.getShipperprincipalname());
+                //托运人:负责人联系电话
+                params.put("shipperprincipalphone",certificate.getShipperprincipalphone());
+                //托运人:经办人姓名
+                params.put("shippermanagername",certificate.getShippermanagername());
+                //托运人:经办人身份证号
+                params.put("shippermanageridentify",certificate.getShippermanageridentify());
+                //托运人:经办人联系电话
+                params.put("shippermanagerphone",certificate.getShippermanagerphone());
+            }
+
+            //销售单位
+            params.put("salecompanyname",certificate.getSalecompanyname());
+            //收货人
+            {
+                //收货人:单位名称
+                params.put("receivercompanyname",certificate.getReceivercompanyname());
+                //收货人:地址
+                params.put("receiveraddress",certificate.getReceiveraddress());
+                //收货人:负责人姓名
+                params.put("receiverprincipalname",certificate.getReceiverprincipalname());
+                //收货人:负责人联系电话
+                params.put("receiverprincipalphone",certificate.getReceiverprincipalphone());
+            }
+            //承运人
+            {
+                //承运人:单位名称
+                params.put("carriercompanyname",certificate.getCarriercompanyname());
+                //承运人:单位地址
+                params.put("carrieraddress",certificate.getCarrieraddress());
+                //承运人:单位地址
+                params.put("carriernumber",certificate.getCarriernumber());
+                //承运人:负责人
+                params.put("carrierprincipalname",certificate.getCarrierprincipalname());
+                //承运人:负责人联系电话
+                params.put("carrierprincipalphone",certificate.getCarrierprincipalphone());
+                //承运人:负责人联系电话
+                params.put("carriercarnumber",certificate.getCarriercarnumber());
+            }
+            //运输
+            {
+                //运输起始地
+                params.put("startplace", certificate.getOtherdeparture());
+                //运输目的地
+                params.put("endplace", certificate.getOtherdestination());
+                //运输开始时间
+                params.put("othershipstarttime", TransportDateFormat.format(certificate.getOthershipstarttime()));
+                //运输结束时间
+                params.put("othershipendtime", TransportDateFormat.format(certificate.getOthershipendtime()));
+                //承运人:资质证明编号没有这个字段
+                params.put("carrierroadnumber", certificate.getCarrierroadnumber());
+                //运输途径地  任意一处
+                params.put("byway", certificate.getOtherdeparture());
+                List<TransportCertificateApproach> approachList = certificate.getTransportApproach();
+                if (approachList != null && approachList.size() > 0) {
+                    params.put("byway", approachList.get(0).getCity());
+                }
+                //
+            }
+            //驾驶员和押运员
+            {
+                List<TransportCertificatePerson> transportPersons = certificate.getTransportPerson();
+                params.put("driver1", "");
+                params.put("driver1id", "");
+                params.put("driver1license", "");
+                params.put("driver2", "");
+                params.put("driver2id", "");
+                params.put("driver2license", "");
+                params.put("escort1", "");
+                params.put("escort1id", "");
+                params.put("escort1license", "");
+                params.put("escort2", "");
+                params.put("escort2id", "");
+                params.put("escort2license", "");
+                List<TransportCertificatePerson> drivers = new ArrayList<>();
+                List<TransportCertificatePerson> escorts = new ArrayList<>();
+                if (transportPersons != null && transportPersons.size() > 0) {
+                    for (TransportCertificatePerson person : transportPersons) {
+                        if (person.getType().equals(CertificatePersonType.DRIVER.getMsg())) {
+                            drivers.add(person);
+                        }
+                        if (person.getType().equals(CertificatePersonType.ESCORT.getMsg())) {
+                            escorts.add(person);
+                        }
+
+                    }
+                }
+                if (drivers.size() == 1) {
+                    params.put("driver1", drivers.get(0).getPersonname());
+                    params.put("driver1id", drivers.get(0).getPersonidentify());
+                    params.put("driver1license", drivers.get(0).getNumber());
+                }
+                if (drivers.size() > 1) {
+                    params.put("driver2", drivers.get(1).getPersonname());
+                    params.put("driver2id", drivers.get(1).getPersonidentify());
+                    params.put("driver2license", drivers.get(1).getNumber());
+                }
+                if (escorts.size() == 1) {
+                    params.put("escort1", escorts.get(0).getPersonname());
+                    params.put("escort2id", escorts.get(0).getPersonidentify());
+                    params.put("escort2license", escorts.get(0).getNumber());
+                }
+                if (escorts.size() > 1) {
+                    params.put("escort1", escorts.get(1).getPersonname());
+                    params.put("escort2id", escorts.get(1).getPersonidentify());
+                    params.put("escort2license", escorts.get(1).getNumber());
+                }
+            }
+            //产品信息
+            {
+                List<String[]> productPrintList= new ArrayList<>();
+                List<TransportCertificateProduct> productList = certificate.getTransportProduct();
+                assert productList.size() > 0;
+
+                for (TransportCertificateProduct product : productList) {
+                    productPrintList.add(new String[]
+                            {
+                                    //种类
+                                    product.getType(),
+                                    //规格
+                                    product.getSpecification(),
+                                    //数量
+                                    product.getNum()+"(箱)",
+                            });
+                }
+
+                String[] rowParams = {"type", "specification", "num"};
+                HashMap<String,WordTemplate.Table> tables = new HashMap<>();
+                WordTemplate.Table t1 = new WordTemplate.Table(rowParams,productPrintList);
+                tables.put("mainTable", t1);
+                wordTemplate.replaceDocument2(tables, params);
+            }
+            //存一份到本地
+            wordTemplate.saveFile(fileUrl);
+
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+            throw new BusinessException("找不到模板文件路径");
+        } catch (IOException e) {
+            e.printStackTrace();
+            throw new BusinessException("发生错误,请联系管理员");
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return fileUrlReturn;
+    }
+
+
+    /**
+     * @Description: 获取运输证信息
+     * @date 2021/5/14 19:04
+     */
+    @Override
+    public TransportCertificate getByCode(String code) {
+        if (StringUtils.isBlank(code)) {
+            throw new BusinessException("运输证编号不能为空");
+        }
+        return transportCertificateMapper.selectByCode(code);
+    }
+
+    /**
+    * @Description: 修改运输证产品的到货数量
+    * @date 2021/5/14 19:54
+    */
+    @Override
+    @Transactional
+    public synchronized  void modTransportProductArrivalNum(TransportArrivalVo transportArrivalVo, UserInfo userInfo) {
+
+        if (StringUtils.isBlank(transportArrivalVo.getCode())) {
+            throw new BusinessException("运输证的单位编号不能为空");
+        }
+        List<TransportCertificateProduct> productList = transportArrivalVo.getProductList();
+        if (productList == null || productList.size() < 1) {
+            throw new BusinessException("产品信息不能为空");
+        }
+
+        for (TransportCertificateProduct product : productList) {
+            //更新产品到货量信息
+            TransportCertificateProduct oldProduct = transportCertificateProductService.getById(product.getId());
+            Integer oldArrivalNum = oldProduct.getArrivalnum();
+            Integer newArrivalNum = oldArrivalNum + product.getArrivalnum();
+            oldProduct.setArrivalnum(newArrivalNum);
+            if (oldProduct.getNum() < newArrivalNum) {
+                throw new BusinessException("该次操作使得总到货量超过产品预计到货量,操作失败。");
+            }
+            transportCertificateProductService.updateById(oldProduct);
+            //插入发送到货数的记录信息
+            TransportCertificateArrivalRecord record = new TransportCertificateArrivalRecord();
+            record.setCertificatecode(transportArrivalVo.getCode());
+            record.setProductcode(oldProduct.getProductcode());
+            record.setProductname(oldProduct.getName());
+            record.setCreateby(userInfo.getId());
+            record.setCreatebyname(userInfo.getUsername());
+            record.setCreatetime(new Date());
+            record.setArrivalnum(product.getArrivalnum());
+            record.setValidflag(true);
+            transportCertificateArrivalRecordService.save(record);
+        }
+
+        //获取单子所有产品
+       List<TransportCertificateProduct> list = transportCertificateProductService.getListByTransportCode(transportArrivalVo.getCode());
+        boolean flag = true;
+        if (list.size() > 0) {
+            for (TransportCertificateProduct product : list) {
+                if (!product.getNum().equals(product.getArrivalnum())) {
+                    flag = false;
+                }
+            }
+        }
+
+        //数量全相等
+        if (flag) {
+            this.updateByCode(transportArrivalVo.getCode(),"全部入库");
+        }else{
+            this.updateByCode(transportArrivalVo.getCode(),"部分入库");
+        }
+    }
+
+    @Override
+    public void updateByCode(String code,String certstatus) {
+        LambdaUpdateWrapper<TransportCertificate> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(TransportCertificate::getCertstatus, certstatus).eq(TransportCertificate::getCode,code);
+        this.update(updateWrapper);
+    }
+
+    @Override
+    public List<TransportCertificate> selectWarnList(Date start, Date end) {
+        return transportCertificateMapper.selectWarnList(start,end);
+    }
+
+
+//    @Override
+//    public IPage selectTransportArrivalPages(Page<Object> page, UserInfo user) {
+//        return null;
+//    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/TransportPersonServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/TransportPersonServiceImpl.java
new file mode 100644
index 0000000..0851e76
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/TransportPersonServiceImpl.java
@@ -0,0 +1,118 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.TransportPerson;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Mapper.TransportPersonMapper;
+import com.gk.firework.Service.TransportPersonService;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.Map;
+
+@Service("transportPersonService")
+public class TransportPersonServiceImpl extends ServiceImpl<TransportPersonMapper, TransportPerson> implements TransportPersonService {
+
+    /**
+    * @Description: 分页查询人员信息
+    * @date 2021/3/30 11:16
+    */
+    @Override
+    public IPage selectPage(Page<TransportPerson> page, Map filter) {
+        //人员姓名
+        String name = (String) filter.get("name");
+        //隶属承运人
+        String belongName = (String) filter.get("belongname");
+        LambdaQueryWrapper<TransportPerson> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.like(TransportPerson::getName, name)
+                .like(TransportPerson::getBelongname, belongName)
+                .eq(TransportPerson::getValidflag,true)
+                .orderByDesc(TransportPerson::getCreatetime);
+        return this.page(page, queryWrapper);
+    }
+
+    /**
+    * @Description: 新增人员
+    * @date 2021/3/30 11:16
+    */
+    @Override
+    public void addPerson(TransportPerson transportPerson, UserInfo user) {
+        transportPerson.setCreateby(user.getId());
+        transportPerson.setCreatebyname(user.getUsername());
+        transportPerson.setCreatetime(new Date());
+        transportPerson.setValidflag(true);
+        this.save(transportPerson);
+    }
+
+    /**
+    * @Description: 修改人员
+    * @date 2021/3/30 13:47
+    */
+    @Override
+    public void modPerson(TransportPerson transportPerson, UserInfo user) {
+        transportPerson.setUpdateby(user.getId());
+        transportPerson.setUpdatebyname(user.getUsername());
+        transportPerson.setUpdatetime(new Date());
+        this.updateById(transportPerson);
+    }
+
+    /**
+    * @Description: 删除人员
+    * @date 2021/3/30 13:53
+    */
+    @Override
+    public void delPerson(Long id, UserInfo user) {
+        TransportPerson transportPerson = new TransportPerson();
+        transportPerson.setId(id);
+        transportPerson.setUpdateby(user.getId());
+        transportPerson.setUpdatebyname(user.getUsername());
+        transportPerson.setUpdatetime(new Date());
+        transportPerson.setValidflag(false);
+        this.updateById(transportPerson);
+    }
+
+    /**
+    * @Description: 人员校验
+    * @date 2021/4/6 16:46
+    */
+    @Override
+    public void checkPerson(TransportPerson transportPerson) {
+
+        if (StringUtils.isBlank(transportPerson.getBelongname())) {
+            throw new BusinessException("隶属承运人不能为空");
+        }
+
+        if (StringUtils.isBlank(transportPerson.getType())) {
+            throw new BusinessException("类别不能为空");
+        }
+
+        if (StringUtils.isBlank(transportPerson.getName())) {
+            throw new BusinessException("姓名不能为空");
+        }
+
+        if (StringUtils.isBlank(transportPerson.getIdentify())) {
+            throw new BusinessException("身份证号不能为空");
+        }
+
+        if (StringUtils.isBlank(transportPerson.getPhone())) {
+            throw new BusinessException("联系电话不能为空");
+        }
+
+        if (StringUtils.isBlank(transportPerson.getCertificate())) {
+            throw new BusinessException("资格证号不能为空");
+        }
+        if (transportPerson.getValidtime() == null) {
+            throw new BusinessException("资格证有效期不能为空");
+        }
+
+
+
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/UserDeadlineServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/UserDeadlineServiceImpl.java
new file mode 100644
index 0000000..9112ecb
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/UserDeadlineServiceImpl.java
@@ -0,0 +1,11 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.UserDeadlineOperationLog;
+import com.gk.firework.Mapper.UserDeadlineLogMapper;
+import com.gk.firework.Service.UserDeadlineService;
+import org.springframework.stereotype.Service;
+
+@Service("userDeadlineService")
+public class UserDeadlineServiceImpl extends ServiceImpl<UserDeadlineLogMapper, UserDeadlineOperationLog> implements UserDeadlineService {
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/UserRolesServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/UserRolesServiceImpl.java
new file mode 100644
index 0000000..0fb8e2d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/UserRolesServiceImpl.java
@@ -0,0 +1,20 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.UserRolesInfo;
+import com.gk.firework.Mapper.UserRolesInfoMapper;
+import com.gk.firework.Service.UserRolesService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service("UserRolesService")
+public class UserRolesServiceImpl extends ServiceImpl<UserRolesInfoMapper, UserRolesInfo> implements UserRolesService {
+    @Autowired
+    UserRolesInfoMapper userRolesInfoMapper;
+
+
+    @Override
+    public void deleteByUserId(Long userid) {
+        userRolesInfoMapper.deleteByUserId(userid);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/UserServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/UserServiceImpl.java
new file mode 100644
index 0000000..40566aa
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/UserServiceImpl.java
@@ -0,0 +1,232 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Config.Oauth2.OauthRole;
+import com.gk.firework.Domain.DTO.JiangWaiDeadlineReqDTO;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.RoleInfo;
+import com.gk.firework.Domain.UserDeadlineOperationLog;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Vo.UserVo;
+import com.gk.firework.Mapper.UserInfoMapper;
+import com.gk.firework.Service.RoleService;
+import com.gk.firework.Service.UserDeadlineService;
+import com.gk.firework.Service.UserService;
+import com.spire.xls.BubbleSizeType;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+@Service("UserService")
+public class UserServiceImpl extends ServiceImpl<UserInfoMapper, UserInfo> implements UserService {
+
+    @Autowired
+    private UserInfoMapper userInfoMapper;
+    @Autowired
+    private RoleService roleService;
+    @Autowired
+    private UserDeadlineService userDeadlineService;
+
+
+    @Override
+    public UserVo selectByLoginname(String username) {
+        return userInfoMapper.selectByLoginname(username);
+    }
+
+    @Override
+    public List<OauthRole> selectRoleByUser(Integer userId) {
+        return userInfoMapper.selectRoleByUser(userId);
+    }
+
+    @Override
+    public void selectUserDataGrid(PageInfo pageInfo) {
+        Page<UserVo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+        List<OrderItem> orderItems = new ArrayList<>();
+        OrderItem orderItem = new OrderItem();
+        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+            orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
+            orderItem.setColumn(pageInfo.getSort());
+        }else {
+            orderItem.setAsc(false);
+            orderItem.setColumn("createddate");
+        }
+        orderItems.add(orderItem);
+        page.setOrders(orderItems);
+        List<UserVo> list = userInfoMapper.selectUserDataGrid(page,pageInfo.getCondition());
+        for (UserVo userVo : list) {
+            List<RoleInfo> roleInfoList = roleService.selectRoleByUser(userVo.getId());
+            userVo.setRoles(roleInfoList);
+        }
+        pageInfo.setResult(list);
+        pageInfo.setTotalCount(page.getTotal());
+    }
+
+    @Override
+    public UserInfo selectByUser(String username) {
+        UserInfo userInfo = new UserInfo();
+        userInfo.setUsername(username);
+        userInfo.setIsdel((byte)0);
+        QueryWrapper<UserInfo> wrapper = new QueryWrapper<> (userInfo);
+        return userInfoMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<UserInfo> selectUserInfo(Long id, String username) {
+        return userInfoMapper.selectUserInfo(id,username);
+    }
+
+    @Override
+    public void deleteOneByCompanyId(Long companyId) {
+        userInfoMapper.deleteOneByCompanyId(companyId);
+    }
+
+    @Override
+    public UserInfo selectOneByCompanyId(Long companyId) {
+        LambdaQueryWrapper<UserInfo> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(UserInfo::getCompanyid, companyId)
+                .eq(UserInfo::getIsdel,(byte)0);
+        return userInfoMapper.selectOne(queryWrapper);
+    }
+
+    @Override
+    public boolean checkUserById(String userId) {
+        if (StringUtils.isBlank(userId)){
+            return false;
+        }
+        UserInfo userInfo = userInfoMapper.selectById(userId);
+        return userInfo != null;
+    }
+
+    @Override
+    public UserInfo selectSupervise(String province, String city, String district, String street, String committee) {
+        return userInfoMapper.selectSupervise(province, city, district, street, committee);
+    }
+
+    @Override
+    public UserVo selectUserVoByName(String username) {
+        return userInfoMapper.selectUserVoByName(username);
+    }
+
+    /**
+    * @Description: 根据企业id查找用户和终端机用户
+    * @date 2021/5/13 19:03
+    */
+    @Override
+    public List<UserInfo> selectByCompanyId(Long id,int isdel) {
+        LambdaQueryWrapper<UserInfo> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(UserInfo::getCompanyid, id)
+                .eq(UserInfo::getIsdel,(byte)isdel);
+        return userInfoMapper.selectList(queryWrapper);
+    }
+
+    @Override
+    public void deleteById(Long id) {
+        LambdaUpdateWrapper<UserInfo> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(UserInfo::getIsdel, (byte) 1)
+                .eq(UserInfo::getId, id);
+        this.update(updateWrapper);
+    }
+
+    @Override
+    public void recoverOneById(Long id) {
+        LambdaUpdateWrapper<UserInfo> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(UserInfo::getIsdel, (byte) 0)
+                .eq(UserInfo::getId, id);
+        this.update(updateWrapper);
+    }
+
+    @Override
+    public List<UserInfo> selectByCompany(String company) {
+        LambdaQueryWrapper<UserInfo> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(UserInfo::getCompany, company).eq(UserInfo::getIsdel,(byte)0);
+        return userInfoMapper.selectList(queryWrapper);
+    }
+
+    @Override
+    public void updateCodeByCompany(String company, String code) {
+        LambdaUpdateWrapper<UserInfo> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(UserInfo::getCode, code)
+                .eq(UserInfo::getCompany, company)
+                .eq(UserInfo::getIsdel,(byte)0);
+        this.update(updateWrapper);
+
+    }
+
+    @Override
+    @Transactional
+    public void updateDeadline(JiangWaiDeadlineReqDTO reqDTO, UserInfo user) {
+        if (reqDTO.getUid() == null || reqDTO.getDeadline() == null) {
+            throw new BusinessException("入参为空");
+        }
+        UserInfo userInfo = this.getById(reqDTO.getUid());
+        if (userInfo == null || userInfo.getIsdel() == 1) {
+            throw new BusinessException("用户不存在");
+        }
+        if (reqDTO.getDeadline().before(new Date())) {
+            throw new BusinessException("选择截止时间需要在今日之后");
+        }
+        if (user.getType() == null || user.getType() != 1) {
+            throw new BusinessException("当前操作人无权操作");
+        }
+
+        // 判断修改企业类型
+        if (userInfo.getIssale() == 1) {
+            throw new BusinessException("操作用户类型错误,需为非销售用户");
+        }
+        // 数据得有companynumber 和 companyid  =>确定他不是监管部门
+        if (StringUtils.isBlank(userInfo.getCompanynumber()) || userInfo.getCompanyid() == null) {
+            throw new BusinessException("用户企业类型非法,只能修改企业信息");
+        }
+        Date deadline = reqDTO.getDeadline();
+        Calendar instance = Calendar.getInstance();
+        instance.setTime(deadline);
+        instance.set(Calendar.HOUR_OF_DAY,23);
+        instance.set(Calendar.MINUTE,59);
+        instance.set(Calendar.SECOND,59);
+
+        //exc
+        // 根据 companyid 修改 会修改 销售端和 非销售端 两条数据
+        int i = userInfoMapper.updateDeadlineByCompanyId(userInfo.getCompanyid(), instance.getTime());
+        if (i == 0) {
+            throw new BusinessException("数据未发生改变");
+        }
+        if (i != 2) {
+            throw new BusinessException("数据修改失败,请联系管理员");
+        }
+        UserDeadlineOperationLog log = new UserDeadlineOperationLog();
+        log.setGmtCreate(new Date());
+        log.setOperator(user.getUsername());
+        log.setOperatorUid(user.getId());
+        log.setToUname(userInfo.getUsername());
+        log.setToUid(userInfo.getId());
+        log.setVal(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(instance.getTime()));
+        boolean save = userDeadlineService.save(log);
+        if (!save) {
+            throw new BusinessException("记录保存失败,请联系管理员");
+        }
+
+    }
+
+    @Override
+    public void updateDeadline2NullByComapnyId(Long companyid) {
+        if (companyid == null) {
+            throw new BusinessException("系统入参为空");
+        }
+        userInfoMapper.updateDeadline2NullByComapnyId(companyid);
+    }
+
+
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/WarnContentServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/WarnContentServiceImpl.java
new file mode 100644
index 0000000..1f42c3a
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/WarnContentServiceImpl.java
@@ -0,0 +1,119 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.Exception.BusinessException;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.Vo.WarnContentVo;
+import com.gk.firework.Domain.WarnContentInfo;
+import com.gk.firework.Domain.WarningInfo;
+import com.gk.firework.Mapper.WarnContentInfoMapper;
+import com.gk.firework.Service.WarnContentService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service("WarnContentService")
+public class WarnContentServiceImpl extends ServiceImpl<WarnContentInfoMapper,WarnContentInfo> implements WarnContentService {
+    @Autowired
+    WarnContentInfoMapper warnContentInfoMapper;
+
+
+    @Override
+    public void selectStockDataGrid(PageInfo pageInfo) {
+        Page<WarnContentVo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+        List<OrderItem> orderItems = new ArrayList<>();
+        OrderItem orderItem = new OrderItem();
+        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+            orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
+            orderItem.setColumn(pageInfo.getSort());
+        }else {
+            orderItem.setAsc(false);
+            orderItem.setColumn("modifieddate");
+        }
+        orderItems.add(orderItem);
+        page.setOrders(orderItems);
+        List<WarnContentVo> list = warnContentInfoMapper.selectStockDataGrid(page,pageInfo.getCondition());
+        pageInfo.setResult(list);
+        pageInfo.setTotalCount(page.getTotal());
+    }
+
+    @Override
+    public void selectPurchaseDataGrid(PageInfo pageInfo) {
+        Page<WarnContentVo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+        List<OrderItem> orderItems = new ArrayList<>();
+        OrderItem orderItem = new OrderItem();
+        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+            orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
+            orderItem.setColumn(pageInfo.getSort());
+        }else {
+            orderItem.setAsc(false);
+            orderItem.setColumn("modifieddate");
+        }
+        orderItems.add(orderItem);
+        page.setOrders(orderItems);
+        List<WarnContentVo> list = warnContentInfoMapper.selectPurchaseDataGrid(page,pageInfo.getCondition());
+        pageInfo.setResult(list);
+        pageInfo.setTotalCount(page.getTotal());
+    }
+
+    @Override
+    public WarnContentInfo selectByWarn(String warntype, String warnlevel, Long customer, String warncontent) {
+        return warnContentInfoMapper.selectByWarn(warntype, warnlevel, customer,warncontent);
+    }
+
+    @Override
+    public WarnContentInfo selectByEnterpriseWarn(String warntype, String warnlevel, Long enterpriseid, String warncontent) {
+        return warnContentInfoMapper.selectByEnterpriseWarn(warntype, warnlevel,enterpriseid, warncontent);
+    }
+
+    @Override
+    public List<WarnContentVo> selectNeedMail(String starttime, String endtime) {
+        return warnContentInfoMapper.selectNeedMail(starttime, endtime);
+    }
+
+    @Override
+    public List<WarnContentVo> selectIsNotMend() {
+        return warnContentInfoMapper.selectIsNotMend();
+    }
+
+    @Override
+    public void selectWarningDataGrid(PageInfo pageInfo) {
+        Page<WarnContentVo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+        List<OrderItem> orderItems = new ArrayList<>();
+        OrderItem orderItem = new OrderItem();
+        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+            orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
+            orderItem.setColumn(pageInfo.getSort());
+        }else {
+            orderItem.setAsc(false);
+            orderItem.setColumn("modifieddate");
+        }
+        orderItems.add(orderItem);
+        page.setOrders(orderItems);
+        List<WarnContentVo> list = warnContentInfoMapper.selectWarningDataGrid(page,pageInfo.getCondition());
+        pageInfo.setResult(list);
+        pageInfo.setTotalCount(page.getTotal());
+    }
+
+    @Override
+    public WarnContentInfo selectByWarnTypeAndContent(String type, String content) {
+        LambdaQueryWrapper<WarnContentInfo>wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(WarnContentInfo::getWarntype,type);
+        wrapper.eq(WarnContentInfo::getWarncontent,content);
+        return this.getOne(wrapper);
+    }
+
+    @Override
+    public void saveBatchInfo(List<WarnContentInfo> warnContentInfos) {
+        if (warnContentInfos == null || warnContentInfos.size() == 0) {
+            throw new BusinessException("系统入参为空");
+        }
+        warnContentInfoMapper.insertBatch(warnContentInfos);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/ServiceImpl/WarningServiceImpl.java b/src/main/java/com/gk/firework/Service/ServiceImpl/WarningServiceImpl.java
new file mode 100644
index 0000000..b2b4d75
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/ServiceImpl/WarningServiceImpl.java
@@ -0,0 +1,46 @@
+package com.gk.firework.Service.ServiceImpl;
+
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Utils.StringUtils;
+import com.gk.firework.Domain.WarningInfo;
+import com.gk.firework.Mapper.WarningInfoMapper;
+import com.gk.firework.Service.WarningService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service("WarningService")
+public class WarningServiceImpl extends ServiceImpl<WarningInfoMapper, WarningInfo> implements WarningService {
+    @Autowired
+    WarningInfoMapper warningInfoMapper;
+
+
+    @Override
+    public void selectDataGrid(PageInfo pageInfo) {
+        Page<WarningInfo> page = new Page<>(pageInfo.getPageIndex(), pageInfo.getPageSize());
+        List<OrderItem> orderItems = new ArrayList<>();
+        OrderItem orderItem = new OrderItem();
+        if (StringUtils.isNotBlank(pageInfo.getSort()) && StringUtils.isNotBlank(pageInfo.getOrder())) {
+            orderItem.setAsc(pageInfo.getOrder().equalsIgnoreCase("ascending"));
+            orderItem.setColumn(pageInfo.getSort());
+        }else {
+            orderItem.setAsc(true);
+            orderItem.setColumn("id");
+        }
+        orderItems.add(orderItem);
+        page.setOrders(orderItems);
+        List<WarningInfo> list = warningInfoMapper.selectDataGrid(page,pageInfo.getCondition());
+        pageInfo.setResult(list);
+        pageInfo.setTotalCount(page.getTotal());
+    }
+
+    @Override
+    public List<WarningInfo> selectByType(String warntype) {
+        return warningInfoMapper.selectByType(warntype);
+    }
+}
diff --git a/src/main/java/com/gk/firework/Service/SmsLogService.java b/src/main/java/com/gk/firework/Service/SmsLogService.java
new file mode 100644
index 0000000..b2f2563
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/SmsLogService.java
@@ -0,0 +1,11 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.SmsLogInfo;
+
+public interface SmsLogService extends IService<SmsLogInfo> {
+
+    SmsLogInfo selectByTel(String mobile, String starttime, String endtime, Byte type);
+
+    void deleteByTime(String seventime);
+}
diff --git a/src/main/java/com/gk/firework/Service/SoldNoStockService.java b/src/main/java/com/gk/firework/Service/SoldNoStockService.java
new file mode 100644
index 0000000..15d1b4e
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/SoldNoStockService.java
@@ -0,0 +1,27 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.Enterprise;
+import com.gk.firework.Domain.SoldNoStockInfo;
+import com.gk.firework.Domain.StockInfo;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.PageInfo;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author : jingjy
+ * @date : 2021/4/7 15:18
+ */
+public interface SoldNoStockService extends IService<SoldNoStockInfo> {
+    void selectSoldNoStockDataGrid(PageInfo pageInfo);
+
+    SoldNoStockInfo selectSoldNoStockByDire(String directionCode);
+
+    List<SoldNoStockInfo> selectSoldNoStocksUnprocessed(Enterprise enterprise);
+
+    void saveByStock(StockInfo stockInfo, Date salesTime, UserInfo userInfo);
+
+    void saveBatchInfo(List<SoldNoStockInfo> soldNoStockInfos);
+}
diff --git a/src/main/java/com/gk/firework/Service/StandardConferenceRecordService.java b/src/main/java/com/gk/firework/Service/StandardConferenceRecordService.java
new file mode 100644
index 0000000..1f5ad23
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/StandardConferenceRecordService.java
@@ -0,0 +1,21 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.StandardConferenceRecord;
+import com.gk.firework.Domain.UserInfo;
+
+import java.util.Map;
+
+public interface StandardConferenceRecordService extends IService<StandardConferenceRecord> {
+
+
+    IPage selectPage(Page<StandardConferenceRecord> page, Map filter, UserInfo user);
+
+    void addStandardConferenceRecord(StandardConferenceRecord standardConferenceRecord, UserInfo user);
+
+    void modStandardConferenceRecord(StandardConferenceRecord standardConferenceRecord, UserInfo user);
+
+    void delStandardConferenceRecord(Long id, UserInfo user);
+}
diff --git a/src/main/java/com/gk/firework/Service/StandardDeviceToolsLegerService.java b/src/main/java/com/gk/firework/Service/StandardDeviceToolsLegerService.java
new file mode 100644
index 0000000..88378e9
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/StandardDeviceToolsLegerService.java
@@ -0,0 +1,20 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.StandardDeviceToolsLeger;
+import com.gk.firework.Domain.UserInfo;
+
+import java.util.Map;
+
+public interface StandardDeviceToolsLegerService extends IService<StandardDeviceToolsLeger> {
+
+    IPage selectPage(Page<StandardDeviceToolsLeger> page, Map filter, UserInfo user);
+
+    void addDeviceToolsLeger(StandardDeviceToolsLeger standardDeviceToolsLeger, UserInfo user);
+
+    void modDeviceToolsLeger(StandardDeviceToolsLeger standardDeviceToolsLeger, UserInfo user);
+
+    void delDeviceToolsLeger(Long id, UserInfo user);
+}
diff --git a/src/main/java/com/gk/firework/Service/StandardEducationLegerService.java b/src/main/java/com/gk/firework/Service/StandardEducationLegerService.java
new file mode 100644
index 0000000..9947376
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/StandardEducationLegerService.java
@@ -0,0 +1,22 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.StandardEducationLeger;
+import com.gk.firework.Domain.UserInfo;
+
+import java.util.List;
+import java.util.Map;
+
+public interface StandardEducationLegerService extends IService<StandardEducationLeger> {
+
+    IPage selectPage(Page<StandardEducationLeger> page, Map filter, UserInfo user);
+
+    void addStandardEducationLeger(StandardEducationLeger standardEducationLeger, UserInfo user);
+
+    void modStandardEducationLeger(StandardEducationLeger standardEducationLeger, UserInfo user);
+
+    void delStandardEducationLeger(Long id, UserInfo user);
+
+}
diff --git a/src/main/java/com/gk/firework/Service/StandardGuardRollService.java b/src/main/java/com/gk/firework/Service/StandardGuardRollService.java
new file mode 100644
index 0000000..920110b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/StandardGuardRollService.java
@@ -0,0 +1,20 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.StandardGuardRoll;
+import com.gk.firework.Domain.UserInfo;
+
+import java.util.Map;
+
+public interface StandardGuardRollService extends IService<StandardGuardRoll> {
+
+    IPage selectPage(Page<StandardGuardRoll> page, Map filter, UserInfo user);
+
+    void addStandardGuardRoll(StandardGuardRoll standardGuardRoll, UserInfo user);
+
+    void modStandardGuardRoll(StandardGuardRoll standardGuardRoll, UserInfo user);
+
+    void delStandardGuardRoll(Long id, UserInfo user);
+}
diff --git a/src/main/java/com/gk/firework/Service/StandardHiddenDangerLegerService.java b/src/main/java/com/gk/firework/Service/StandardHiddenDangerLegerService.java
new file mode 100644
index 0000000..f68670d
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/StandardHiddenDangerLegerService.java
@@ -0,0 +1,21 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.StandardHiddenDangerLeger;
+import com.gk.firework.Domain.UserInfo;
+
+import java.util.Map;
+
+public interface StandardHiddenDangerLegerService extends IService<StandardHiddenDangerLeger> {
+
+
+    IPage selectPage(Page<StandardHiddenDangerLeger> page, Map  filter, UserInfo user);
+
+    void addHiddenDangerLeger(StandardHiddenDangerLeger standardHiddenDangerLeger, UserInfo user);
+
+    void modHiddenDangerLeger(StandardHiddenDangerLeger standardHiddenDangerLeger, UserInfo userInfo);
+
+    void delHiddenDangerLeger(Long id, UserInfo user);
+}
diff --git a/src/main/java/com/gk/firework/Service/StandardLawListService.java b/src/main/java/com/gk/firework/Service/StandardLawListService.java
new file mode 100644
index 0000000..4523559
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/StandardLawListService.java
@@ -0,0 +1,21 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.StandardLawList;
+import com.gk.firework.Domain.UserInfo;
+
+import java.util.Map;
+
+public interface StandardLawListService extends IService<StandardLawList> {
+
+    IPage selectPage(Page<StandardLawList> page, Map filter, UserInfo user);
+
+    void addStandardLawList(StandardLawList standardLawList, UserInfo user);
+
+    void modStandardLawList(StandardLawList standardLawList, UserInfo user);
+
+    void delStandardLawList(Long id, UserInfo user);
+
+}
diff --git a/src/main/java/com/gk/firework/Service/StandardProductLegerService.java b/src/main/java/com/gk/firework/Service/StandardProductLegerService.java
new file mode 100644
index 0000000..82cf111
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/StandardProductLegerService.java
@@ -0,0 +1,21 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.StandardProductLeger;
+import com.gk.firework.Domain.UserInfo;
+
+import java.util.Map;
+
+public interface StandardProductLegerService extends IService<StandardProductLeger> {
+
+
+    IPage selectPage(Page<StandardProductLeger> page, Map<String, Object> filter, UserInfo user);
+
+    void addProductLeger(StandardProductLeger standardProductLeger, UserInfo user);
+
+    void modProductLeger(StandardProductLeger standardProductLeger, UserInfo user);
+
+    void delProductLeger(Long id, UserInfo user);
+}
diff --git a/src/main/java/com/gk/firework/Service/StandardRewardRecordService.java b/src/main/java/com/gk/firework/Service/StandardRewardRecordService.java
new file mode 100644
index 0000000..5cf4942
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/StandardRewardRecordService.java
@@ -0,0 +1,19 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.StandardRewardRecord;
+import com.gk.firework.Domain.UserInfo;
+
+import java.util.Map;
+
+public interface StandardRewardRecordService extends IService<StandardRewardRecord> {
+    IPage selectPage(Page<StandardRewardRecord> page, Map filter, UserInfo user);
+
+    void addRecordAndPunishmentRecord(StandardRewardRecord standardRewardRecord, UserInfo user);
+
+    void modRecordAndPunishmentRecord(StandardRewardRecord standardRewardRecord, UserInfo user);
+
+    void delRecordAndPunishmentRecord(Long id, UserInfo user);
+}
diff --git a/src/main/java/com/gk/firework/Service/StandardSupplyMarketObjectService.java b/src/main/java/com/gk/firework/Service/StandardSupplyMarketObjectService.java
new file mode 100644
index 0000000..dd6200c
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/StandardSupplyMarketObjectService.java
@@ -0,0 +1,20 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.StandardSupplyMarketObject;
+import com.gk.firework.Domain.UserInfo;
+
+import java.util.Map;
+
+public interface StandardSupplyMarketObjectService extends IService<StandardSupplyMarketObject> {
+
+    IPage selectPage(Page<StandardSupplyMarketObject> page, Map filter, UserInfo user);
+
+    void addSupplyMarketObject(StandardSupplyMarketObject standardSupplyMarketObject, UserInfo user);
+
+    void modSupplyMarketObject(StandardSupplyMarketObject standardSupplyMarketObject, UserInfo user);
+
+    void delSupplyMarketObject(Long id, UserInfo user);
+}
diff --git a/src/main/java/com/gk/firework/Service/StandardTemplate1Service.java b/src/main/java/com/gk/firework/Service/StandardTemplate1Service.java
new file mode 100644
index 0000000..4c2ea8e
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/StandardTemplate1Service.java
@@ -0,0 +1,22 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.StandardTemplate1;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Vo.StandardTemplate1Vo;
+
+import java.util.Map;
+
+public interface StandardTemplate1Service extends IService<StandardTemplate1> {
+
+    IPage selectPage(Page<StandardTemplate1> page, Map filter, UserInfo userInfo);
+
+    void addStandard(StandardTemplate1Vo standardTemplate1Vo, UserInfo user);
+
+    void modStandard(StandardTemplate1Vo standardTemplate1Vo, UserInfo user);
+
+    void delStandard(Long id, UserInfo user);
+
+}
diff --git a/src/main/java/com/gk/firework/Service/StaticStockService.java b/src/main/java/com/gk/firework/Service/StaticStockService.java
new file mode 100644
index 0000000..ce6bb12
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/StaticStockService.java
@@ -0,0 +1,18 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.StaticStock;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author : jingjy
+ * @date : 2022/1/29 16:05
+ */
+public interface StaticStockService extends IService<StaticStock> {
+
+    StaticStock getByOwner(long owner);
+
+    List<StaticStock> selectStaticStocks(Map<String, Object> condition);
+}
diff --git a/src/main/java/com/gk/firework/Service/StockService.java b/src/main/java/com/gk/firework/Service/StockService.java
new file mode 100644
index 0000000..293bac8
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/StockService.java
@@ -0,0 +1,80 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.*;
+import com.gk.firework.Domain.BO.DirectionProductBO;
+import com.gk.firework.Domain.BO.SaleOrderDetailInfoBO;
+import com.gk.firework.Domain.Extension.StockTotal;
+import com.gk.firework.Domain.Utils.Msg;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Vo.NoEntryVo;
+import com.gk.firework.Domain.Vo.PageInfoExtension;
+import com.gk.firework.Domain.Vo.ProductVo;
+import com.gk.firework.Domain.Vo.StockVo;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author : jingjy
+ * @date : 2021/3/24 14:03
+ */
+public interface StockService extends IService<StockInfo> {
+    boolean putInStorage(UserInfo userInfo, List<ProductVo> productVos, Date datetime, String type);
+
+    void setProductEntryStatus(List<ProductVo> productVos, UserInfo userInfo);
+
+    void deliveryByDetail(Date datetime, List<DeliveryDetailInfo> deliveryDetailInfos, UserInfo userInfo);
+
+    Msg changeStockBySale(CustomerInfo customerInfo, List<SaleOrderDetailInfoBO> detailInfoList, UserInfo userInfo, Date salesTime);
+
+    StockInfo selectStockByDirection(String directionCode);
+
+    int doReturn(StockInfo stockInfo, UserInfo userInfo, CustomerInfo customerInfo, Date date);
+
+    StockInfo selectStockByDireAndUser(Long companyId, String directionCode);
+
+    void updateStocks(List<StockInfo> stockInfos, UserInfo user);
+
+    void selectDataGrid(PageInfo pageInfo);
+
+    List<StockInfo> selectEarlyWarn(Integer min, Integer max,String enterprisetype, List<Integer> slices);
+
+    List<StockInfo> selectAlarm(Integer max, String enterprisetype, List<Integer> slices);
+
+    void selectEnterpriseStockDataGrid(PageInfo pageInfo);
+
+    List<NoEntryVo> selectNoEntryCount(Date time, Integer warnPeriod);
+
+    void selectNoEntryDetail(PageInfo pageInfo);
+
+    void doReturnBatch(UserInfo userInfo, List<EntryDetailInfo> entryDetailInfos, Date date);
+
+    List<StockInfo> selectStockByProductId(Long id);
+
+    PageInfoExtension<Map> selectEnterpriseSaleDataGrid(PageInfo pageInfo);
+
+    void selectStockDetailByItemCode(PageInfo pageInfo);
+
+    void selectSaleDetailDataGrid(PageInfo pageInfo);
+
+    PageInfoExtension<StockTotal> selectDataGridExtensions(PageInfo pageInfo);
+
+    PageInfoExtension<ProductVo> selectCurrentFireStatus(Integer pageIndex,Integer pageSize, Map filter, UserInfo user);
+
+    List<StockVo> selectEnterpriseStocks(Map<String, Object> condition);
+
+    void saveOrUpdateCurrentStock(String updateBy);
+
+    boolean clearStock(Enterprise enterprise);
+
+    boolean clearStockByItems(Enterprise enterprise, List<String> list);
+
+    StockInfo selectStockByDirectionAndSlice(String directionCodeStr, String slice);
+
+    int insertStockInfoBySlice(StockInfo stockInfo, String slice);
+
+    int updateStockInfoBySlice(StockInfo stockInfo, String slice);
+
+}
diff --git a/src/main/java/com/gk/firework/Service/TransportCarrierService.java b/src/main/java/com/gk/firework/Service/TransportCarrierService.java
new file mode 100644
index 0000000..89e476a
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/TransportCarrierService.java
@@ -0,0 +1,24 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.TransportCarrier;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.FilterObject;
+
+import java.util.Map;
+
+public interface TransportCarrierService extends IService<TransportCarrier> {
+
+    IPage selectPage(Page<TransportCarrier> page, Map filter);
+
+    void addCarrier(TransportCarrier transportCarrier, UserInfo user);
+
+    void modCarrier(TransportCarrier transportCarrier, UserInfo user);
+
+    void delCarrier(Long id, UserInfo user);
+
+    void checkCarrier(TransportCarrier transportCarrier);
+
+}
diff --git a/src/main/java/com/gk/firework/Service/TransportCertFileService.java b/src/main/java/com/gk/firework/Service/TransportCertFileService.java
new file mode 100644
index 0000000..5cd2a73
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/TransportCertFileService.java
@@ -0,0 +1,17 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.TransportCertFile;
+import com.gk.firework.Domain.TransportCertificate;
+import org.apache.ibatis.annotations.Param;
+
+public interface TransportCertFileService extends IService<TransportCertFile> {
+
+    /**
+    * @Description: 根据运输证单号删除所有文件
+    * @date 2021/4/26 10:12
+    */
+    void deleteByCode(String code);
+
+    TransportCertificate selectByCode(@Param("code") String code);
+}
diff --git a/src/main/java/com/gk/firework/Service/TransportCertProductService.java b/src/main/java/com/gk/firework/Service/TransportCertProductService.java
new file mode 100644
index 0000000..ab08f60
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/TransportCertProductService.java
@@ -0,0 +1,14 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.TransportCertProduct;
+
+import java.util.List;
+
+public interface TransportCertProductService extends IService<TransportCertProduct> {
+
+
+    List<TransportCertProduct> selectProduct(String code);
+
+    void deleteProductByCode(String code);
+}
diff --git a/src/main/java/com/gk/firework/Service/TransportCertService.java b/src/main/java/com/gk/firework/Service/TransportCertService.java
new file mode 100644
index 0000000..3a03f81
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/TransportCertService.java
@@ -0,0 +1,28 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.TransportCert;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Vo.TransportCertVo;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+public interface TransportCertService extends IService<TransportCert> {
+
+    void addCert(TransportCertVo transportCertVo, UserInfo user) throws Exception;
+
+    IPage selectPages(Page<TransportCert> page, Map filter, UserInfo user);
+
+
+    void modCert(TransportCertVo transportCertVo, UserInfo user) throws Exception;
+
+    void delCert(Long id, UserInfo user);
+
+    int countByCode(String code);
+
+    List<TransportCert> selectWarnList(Date start, Date end);
+}
diff --git a/src/main/java/com/gk/firework/Service/TransportCertificateApproachService.java b/src/main/java/com/gk/firework/Service/TransportCertificateApproachService.java
new file mode 100644
index 0000000..e5b92cc
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/TransportCertificateApproachService.java
@@ -0,0 +1,9 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.TransportCertificateApproach;
+
+public interface TransportCertificateApproachService extends IService<TransportCertificateApproach> {
+
+    void deleteByCertificateCode(String code);
+}
diff --git a/src/main/java/com/gk/firework/Service/TransportCertificateArrivalRecordService.java b/src/main/java/com/gk/firework/Service/TransportCertificateArrivalRecordService.java
new file mode 100644
index 0000000..5ce1e99
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/TransportCertificateArrivalRecordService.java
@@ -0,0 +1,17 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.TransportCertificateArrivalRecord;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Vo.TransportArrivalSum;
+
+import java.util.List;
+
+public interface TransportCertificateArrivalRecordService extends IService<TransportCertificateArrivalRecord> {
+
+    IPage selectTransportArrivalPages(Page<TransportArrivalSum> page, UserInfo user);
+
+    List<TransportCertificateArrivalRecord> getTransportArrivalDetail(String certificateCode, UserInfo user);
+}
diff --git a/src/main/java/com/gk/firework/Service/TransportCertificateFileService.java b/src/main/java/com/gk/firework/Service/TransportCertificateFileService.java
new file mode 100644
index 0000000..646a024
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/TransportCertificateFileService.java
@@ -0,0 +1,14 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.TransportCertificateFile;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+public interface TransportCertificateFileService extends IService<TransportCertificateFile> {
+
+     List<String> uploadFiles(MultipartFile[] files) throws Exception;
+
+    void deleteByCertificateCode(String code);
+}
diff --git a/src/main/java/com/gk/firework/Service/TransportCertificatePersonService.java b/src/main/java/com/gk/firework/Service/TransportCertificatePersonService.java
new file mode 100644
index 0000000..ec450bf
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/TransportCertificatePersonService.java
@@ -0,0 +1,14 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.TransportCertProduct;
+import com.gk.firework.Domain.TransportCertificatePerson;
+
+import java.util.List;
+
+public interface TransportCertificatePersonService extends IService<TransportCertificatePerson> {
+
+    void deleteByCertificateCode(String code);
+
+    List<TransportCertificatePerson> selectProduct(String code);
+}
diff --git a/src/main/java/com/gk/firework/Service/TransportCertificateProductService.java b/src/main/java/com/gk/firework/Service/TransportCertificateProductService.java
new file mode 100644
index 0000000..bdb6568
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/TransportCertificateProductService.java
@@ -0,0 +1,15 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.TransportCertificateProduct;
+
+import java.util.List;
+
+public interface TransportCertificateProductService extends IService<TransportCertificateProduct> {
+
+    void deleteByCertificateCode(String code);
+
+    List<TransportCertificateProduct> getListByTransportCode(String code);
+
+
+}
diff --git a/src/main/java/com/gk/firework/Service/TransportCertificateService.java b/src/main/java/com/gk/firework/Service/TransportCertificateService.java
new file mode 100644
index 0000000..62cca57
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/TransportCertificateService.java
@@ -0,0 +1,48 @@
+package com.gk.firework.Service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.Enum.CertificateStatus;
+import com.gk.firework.Domain.TransportCertificate;
+import com.gk.firework.Domain.TransportCertificateArrivalRecord;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Vo.TransportArrivalVo;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+public interface TransportCertificateService extends IService<TransportCertificate> {
+
+    IPage selectPages(Page<TransportCertificate> page, Map filter, UserInfo userInfo);
+
+    void addCertificateApply(TransportCertificate transportCertificate, UserInfo user);
+
+    void modCertificateApply(TransportCertificate transportCertificate, UserInfo user);
+
+    void delCertificate(Long id, UserInfo user);
+
+    TransportCertificate getOneById(Long id);
+
+    void summitApply(Long id, UserInfo user);
+
+    void approveApply(JSONObject params, UserInfo user);
+
+    void refuseApply(Long id, UserInfo user);
+
+    String exportCertificate(Long id);
+
+    void checkAddApply(TransportCertificate transportCertificate);
+
+    String exportCertificateApply(Long id);
+
+    TransportCertificate getByCode(String code);
+
+    void modTransportProductArrivalNum(TransportArrivalVo transportArrivalVo,UserInfo userInfo);
+
+    void updateByCode(String code,String certstatus);
+
+    List<TransportCertificate> selectWarnList(Date start, Date end);
+}
diff --git a/src/main/java/com/gk/firework/Service/TransportPersonService.java b/src/main/java/com/gk/firework/Service/TransportPersonService.java
new file mode 100644
index 0000000..5ebc3d2
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/TransportPersonService.java
@@ -0,0 +1,21 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.TransportPerson;
+import com.gk.firework.Domain.UserInfo;
+
+import java.util.Map;
+
+public interface TransportPersonService extends IService<TransportPerson> {
+    IPage selectPage(Page<TransportPerson> page, Map filter);
+
+    void addPerson(TransportPerson transportPerson, UserInfo user);
+
+    void modPerson(TransportPerson transportPerson, UserInfo user);
+
+    void delPerson(Long id, UserInfo user);
+
+    void checkPerson(TransportPerson transportPerson);
+}
diff --git a/src/main/java/com/gk/firework/Service/UserDeadlineService.java b/src/main/java/com/gk/firework/Service/UserDeadlineService.java
new file mode 100644
index 0000000..7b7481b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/UserDeadlineService.java
@@ -0,0 +1,7 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.UserDeadlineOperationLog;
+
+public interface UserDeadlineService extends IService<UserDeadlineOperationLog> {
+}
diff --git a/src/main/java/com/gk/firework/Service/UserRolesService.java b/src/main/java/com/gk/firework/Service/UserRolesService.java
new file mode 100644
index 0000000..20d6ad9
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/UserRolesService.java
@@ -0,0 +1,9 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.UserRolesInfo;
+
+public interface UserRolesService extends IService<UserRolesInfo> {
+
+    void deleteByUserId(Long userid);
+}
diff --git a/src/main/java/com/gk/firework/Service/UserService.java b/src/main/java/com/gk/firework/Service/UserService.java
new file mode 100644
index 0000000..b1f1e34
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/UserService.java
@@ -0,0 +1,47 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Config.Oauth2.OauthRole;
+import com.gk.firework.Domain.DTO.JiangWaiDeadlineReqDTO;
+import com.gk.firework.Domain.UserInfo;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Vo.UserVo;
+
+import java.util.List;
+
+public interface UserService extends IService<UserInfo> {
+
+    UserVo selectByLoginname(String username);
+
+    List<OauthRole> selectRoleByUser(Integer userId);
+
+    void selectUserDataGrid(PageInfo pageInfo);
+
+    UserInfo selectByUser(String username);
+
+    List<UserInfo> selectUserInfo(Long id, String username);
+
+    void deleteOneByCompanyId(Long companyId);
+
+    UserInfo selectOneByCompanyId(Long companyId);
+
+    boolean checkUserById(String userId);
+
+    UserInfo selectSupervise(String province, String city, String district, String street, String committee);
+
+    UserVo selectUserVoByName(String username);
+
+    List<UserInfo> selectByCompanyId(Long id,int isdel);
+
+    void deleteById(Long id);
+
+    void recoverOneById(Long id);
+
+    List<UserInfo> selectByCompany(String company);
+
+    void updateCodeByCompany(String company, String code);
+
+    void updateDeadline(JiangWaiDeadlineReqDTO reqDTO, UserInfo user);
+
+    void updateDeadline2NullByComapnyId(Long companyid);
+}
diff --git a/src/main/java/com/gk/firework/Service/WarnContentService.java b/src/main/java/com/gk/firework/Service/WarnContentService.java
new file mode 100644
index 0000000..99a8f59
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/WarnContentService.java
@@ -0,0 +1,30 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.Vo.WarnContentVo;
+import com.gk.firework.Domain.WarnContentInfo;
+
+import java.util.List;
+
+public interface WarnContentService extends IService<WarnContentInfo> {
+
+    void selectStockDataGrid(PageInfo pageInfo);
+
+    void selectPurchaseDataGrid(PageInfo pageInfo);
+
+    WarnContentInfo selectByWarn(String warntype, String warnlevel, Long customer, String warncontent);
+
+    WarnContentInfo selectByEnterpriseWarn(String warntype, String warnlevel, Long enterpriseid, String warncontent);
+
+    List<WarnContentVo> selectNeedMail(String starttime, String endtime);
+
+    List<WarnContentVo> selectIsNotMend();
+
+    void selectWarningDataGrid(PageInfo pageInfo);
+
+    WarnContentInfo selectByWarnTypeAndContent(String type, String content);
+
+    void saveBatchInfo(List<WarnContentInfo> warnContentInfos);
+
+}
diff --git a/src/main/java/com/gk/firework/Service/WarningService.java b/src/main/java/com/gk/firework/Service/WarningService.java
new file mode 100644
index 0000000..ce9516b
--- /dev/null
+++ b/src/main/java/com/gk/firework/Service/WarningService.java
@@ -0,0 +1,14 @@
+package com.gk.firework.Service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gk.firework.Domain.Utils.PageInfo;
+import com.gk.firework.Domain.WarningInfo;
+
+import java.util.List;
+
+public interface WarningService extends IService<WarningInfo> {
+
+    void selectDataGrid(PageInfo pageInfo);
+
+    List<WarningInfo> selectByType(String warntype);
+}
diff --git a/src/main/resources/application-aliyun-prod.yml b/src/main/resources/application-aliyun-prod.yml
new file mode 100644
index 0000000..6f0effa
--- /dev/null
+++ b/src/main/resources/application-aliyun-prod.yml
@@ -0,0 +1,91 @@
+# server
+# 4105端口处理全部后端请求
+server:
+  tomcat:
+    uri-encoding: UTF-8
+    basedir: /tmp/tomcat
+  port: 4105
+  servlet:
+    context-path: /
+
+# mysql 多数据源
+spring:
+  datasource:
+    one:
+      url: jdbc:mysql://39.104.85.193:39231/yanhua_prod?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+      username: yanhua_prod
+      password: WiXyD8KXPTa6cy3L
+      type: com.alibaba.druid.pool.DruidDataSource
+  #redis
+  redis:
+    database: 0
+    host: 127.0.0.1
+    port: 6379
+    password: wioowr23923sd3*&
+    jedis:
+      pool:
+        max-idle: 8
+        max-active: 8
+        max-wait: -1ms
+        min-idle: 0
+
+host: http://localhost:4105
+
+filePath: /data/uploadfire/
+fileurl: http://39.104.85.193:4105/upload/
+socketport: 504
+
+sqlPath: /data/dbback/
+sqlurl: http://39.104.85.193:4105/dbback/
+
+enterprisePath: /data/uploadfire/enterprise/
+enterpriseUrl: http://39.104.85.193:4105/upload/enterprise/
+
+contractPath: /data/uploadfire/contract/
+contractUrl: http://39.104.85.193:4105/upload/contract/
+
+transportCertificatePath: /data/uploadfire/transportCertificate/
+transportCertificateUrl: http://39.104.85.193:4105/upload/transportCertificate/
+
+hiddenDangerPath: /data/uploadfire/hiddenDanger/
+hiddenDangerUrl: http://39.104.85.193:4105/upload/hiddenDanger/
+
+standardPath:  /data/uploadfire/standard/
+standardUrl: http://39.104.85.193:4105/upload/standard/
+
+
+enterprise: enterprise/
+transportCertificate: transportCertificate/
+hiddenDanger: hiddenDanger/
+standard: standard/
+contract: contract/
+assessApply: assessApply/
+customer: customer/
+
+
+patrolPath: /data/uploadfire/patrol/
+patrolUrl: http://39.104.85.193:4105/upload/patrol/
+
+appPath: /data/uploadfire/app/
+appUrl: http://39.104.85.193:4105/upload/app/
+
+productPath: /data/uploadfire/product/
+productUrl: http://39.104.85.193:4105/upload/product/
+
+assessApplyPath: /data/uploadfire/assessApply/
+assessApplyUrl: http://39.104.85.193:4105/upload/assessApply/
+
+customerPath: /data/uploadfire/customer/
+customerUrl: http://39.104.85.193:4105/upload/customer/
+
+#控制线程是否执行 true:执行;false:不执行
+scheduling:
+  enabled: true
+historystock.robot:
+  enabled: false
+
+com.gk.firework.schedules.all.switch: true
+
+com.gk.firework.schedules.single.switch: false
+
+hostId: 01
diff --git a/src/main/resources/application-aliyun-test.yml b/src/main/resources/application-aliyun-test.yml
new file mode 100644
index 0000000..7f59465
--- /dev/null
+++ b/src/main/resources/application-aliyun-test.yml
@@ -0,0 +1,91 @@
+# server
+# 4105端口处理全部后端请求
+server:
+  tomcat:
+    uri-encoding: UTF-8
+    basedir: /tmp/tomcat
+  port: 4105
+  servlet:
+    context-path: /
+
+# mysql 多数据源
+spring:
+  datasource:
+    one:
+      url: jdbc:mysql://39.104.85.193:39231/yanhbaz?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+      username: yanhbaz
+      password: SF46btL4dZttdCEL
+      type: com.alibaba.druid.pool.DruidDataSource
+  #redis
+  redis:
+    database: 0
+    host: 127.0.0.1
+    port: 6379
+    password: wioowr23923sd3*&
+    jedis:
+      pool:
+        max-idle: 8
+        max-active: 8
+        max-wait: -1ms
+        min-idle: 0
+
+host: http://localhost:4105
+
+filePath: /data/uploadfire/
+fileurl: http://39.104.85.193:4105/upload/
+socketport: 504
+
+sqlPath: /data/dbback/
+sqlurl: http://39.104.85.193:4105/dbback/
+
+enterprisePath: /data/uploadfire/enterprise/
+enterpriseUrl: http://39.104.85.193:4105/upload/enterprise/
+
+contractPath: /data/uploadfire/contract/
+contractUrl: http://39.104.85.193:4105/upload/contract/
+
+transportCertificatePath: /data/uploadfire/transportCertificate/
+transportCertificateUrl: http://39.104.85.193:4105/upload/transportCertificate/
+
+hiddenDangerPath: /data/uploadfire/hiddenDanger/
+hiddenDangerUrl: http://39.104.85.193:4105/upload/hiddenDanger/
+
+standardPath:  /data/uploadfire/standard/
+standardUrl: http://39.104.85.193:4105/upload/standard/
+
+
+enterprise: enterprise/
+transportCertificate: transportCertificate/
+hiddenDanger: hiddenDanger/
+standard: standard/
+contract: contract/
+assessApply: assessApply/
+customer: customer/
+
+
+patrolPath: /data/uploadfire/patrol/
+patrolUrl: http://39.104.85.193:4105/upload/patrol/
+
+appPath: /data/uploadfire/app/
+appUrl: http://39.104.85.193:4105/upload/app/
+
+productPath: /data/uploadfire/product/
+productUrl: http://39.104.85.193:4105/upload/product/
+
+assessApplyPath: /data/uploadfire/assessApply/
+assessApplyUrl: http://39.104.85.193:4105/upload/assessApply/
+
+customerPath: /data/uploadfire/customer/
+customerUrl: http://39.104.85.193:4105/upload/customer/
+
+#控制线程是否执行 true:执行;false:不执行
+scheduling:
+  enabled: true
+historystock.robot:
+  enabled: false
+
+com.gk.firework.schedules.all.switch: true
+
+com.gk.firework.schedules.single.switch: false
+
+hostId: 01
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
new file mode 100644
index 0000000..2295a7f
--- /dev/null
+++ b/src/main/resources/application-dev.yml
@@ -0,0 +1,86 @@
+# server
+server:
+  tomcat:
+    uri-encoding: UTF-8
+    basedir: /tmp/tomcat
+  port: 8100
+  servlet:
+    context-path: /
+# mysql
+spring:
+  datasource:
+    one:
+      url: jdbc:mysql://sinanoaq.com:23306/firework?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+      username: root
+      password: NMS@uss20201!
+      type: com.alibaba.druid.pool.DruidDataSource
+  #redis
+  redis:
+    database: 0
+    host: 127.0.0.1
+    port: 6379
+    password: root
+    jedis:
+      pool:
+        max-idle: 8
+        max-active: 8
+        max-wait: -1ms
+        min-idle: 0
+
+host: http://localhost:8100
+
+filePath: f:/uploads/
+fileurl: http://localhost:8100/upload/
+socketport: 504
+
+sqlPath: f:/dbback/
+sqlurl: http://localhost:8100/dbback/
+
+enterprisePath: f:/uploads/enterprise/
+enterpriseUrl: http://localhost:8100/upload/enterprise/
+enterprise: enterprise/
+
+transportCertificatePath: f:/uploads/transportCertificate/
+transportCertificateUrl: http://localhost:8100/upload/transportCertificate/
+transportCertificate: transportCertificate/
+
+hiddenDangerPath: f:/uploads/hiddenDanger/
+hiddenDangerUrl: http://localhost:8100/upload/hiddenDanger/
+hiddenDanger: hiddenDanger/
+
+standardPath: f:/uploads/standard/
+standardUrl: http://localhost:8100/upload/standard/
+standard: standard/
+
+contractPath: f:/uploads/contract/
+contractUrl: http://localhost:8100/upload/contract/
+contract: contract/
+
+patrolPath: f:/uploads/patrol/
+patrolUrl: http://localhost:8100/upload/patrol/
+
+appPath: f:/uploads/app/
+appUrl: http://localhost:8100/upload/app/
+
+productPath: f:/uploads/product/
+productUrl: http://localhost:8100/upload/product/
+
+customerPath: f:/uploads/customer/
+customerUrl: http://localhost:8100/upload/customer/
+customer: customer/
+
+assessApplyPath: f:/uploads/assessApply/
+assessApplytUrl: http://localhost:8100/upload/assessApply/
+assessApply: assessApply/
+
+com.gk.firework.schedules.all.switch: false
+
+scheduling:
+  enabled: false
+historystock.robot:
+  enabled: false
+
+
+com.gk.firework.schedules.single.switch: false
+
+hostId: 01
diff --git a/src/main/resources/application-gkhyprov.yml b/src/main/resources/application-gkhyprov.yml
new file mode 100644
index 0000000..4af24a6
--- /dev/null
+++ b/src/main/resources/application-gkhyprov.yml
@@ -0,0 +1,94 @@
+# ssl
+server:
+  ssl:
+    key-store: classpath:cert/sinanoaq.cn.jks
+    key-store-password: 57ye4qbbowk4x3
+    key-password: 57ye4qbbowk4x3
+    key-store-type: JKS
+  tomcat:
+    uri-encoding: UTF-8
+    basedir: /tmp/tomcat
+  port: 8100
+  servlet:
+    context-path: /
+# mysql 多数据源
+spring:
+  datasource:
+    one:
+      url: jdbc:mysql://220.171.99.118:4103/firework?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+      username: root
+      password: NMS@uss20201!
+  #redis
+  redis:
+    database: 0
+    host: 127.0.0.1
+    port: 6379
+    password: GKHY@uss20211!
+    jedis:
+      pool:
+        max-idle: 8
+        max-active: 8
+        max-wait: -1ms
+        min-idle: 0
+
+host: https://localhost:8100
+
+filePath: /home/uploadfire/
+fileurl: https://sinanoaq.cn:8100/upload/
+socketport: 504
+
+sqlPath: /opt/dbback/
+sqlurl: https://sinanoaq.cn:8100/dbback/
+
+enterprisePath: /home/uploadfire/enterprise/
+enterpriseUrl: https://sinanoaq.cn:8100/upload/enterprise/
+
+contractPath: /home/uploadfire/contract/
+contractUrl: https://sinanoaq.cn:8100/upload/contract/
+
+transportCertificatePath: /home/uploadfire/transportCertificate/
+transportCertificateUrl: https://sinanoaq.cn:8100/upload/transportCertificate/
+
+hiddenDangerPath: /home/uploadfire/hiddenDanger/
+hiddenDangerUrl: https://sinanoaq.cn:8100/upload/hiddenDanger/
+
+standardPath:  /home/uploadfire/standard/
+standardUrl: https://sinanoaq.cn:8100/upload/standard/
+
+
+enterprise: enterprise/
+transportCertificate: transportCertificate/
+hiddenDanger: hiddenDanger/
+standard: standard/
+contract: contract/
+assessApply: assessApply/
+customer: customer/
+
+patrolPath: /home/uploadfire/patrol/
+patrolUrl: https://sinanoaq.cn:8100/upload/patrol/
+
+appPath: /home/uploadfire/app/
+appUrl: https://sinanoaq.cn:8100/upload/app/
+
+productPath: /home/uploadfire/product/
+productUrl: https://sinanoaq.cn:8100/upload/product/
+
+customerPath: /home/uploadfire/customer/
+customerUrl: https://sinanoaq.cn:8100/upload/customer/
+
+assessApplyPath: f:/uploads/assessApply/
+assessApplyUrl: http://localhost:8100/upload/assessApply/
+
+#控制线程是否执行 true:执行;false:不执行
+scheduling:
+  enabled: false
+historystock.robot:
+  enabled: true
+
+
+com.gk.firework.schedules.all.switch: false
+
+#上传数据到全国烟花爆竹
+com.gk.firework.schedules.single.switch: false
+
+hostId: 03
diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml
new file mode 100644
index 0000000..d7a3c9f
--- /dev/null
+++ b/src/main/resources/application-prod.yml
@@ -0,0 +1,91 @@
+# server
+server:
+  tomcat:
+    uri-encoding: UTF-8
+    basedir: /tmp/tomcat
+  port: 8103
+  servlet:
+    context-path: /
+
+# mysql 多数据源
+spring:
+  datasource:
+    one:
+      url: jdbc:mysql://sinanoaq.com:23306/firework?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+      username: root
+      password: NMS@uss20201!
+      type: com.alibaba.druid.pool.DruidDataSource
+  #redis
+  redis:
+    database: 0
+    host: 127.0.0.1
+    port: 6379
+    password: root
+    jedis:
+      pool:
+        max-idle: 8
+        max-active: 8
+        max-wait: -1ms
+        min-idle: 0
+
+host: http://localhost:8103
+
+filePath: /home/uploadfire/
+fileurl: https://sinanoaq.com:8100/upload/
+socketport: 504
+
+sqlPath: /opt/dbback/
+sqlurl: https://sinanoaq.com:8100/dbback/
+
+enterprisePath: /home/uploadfire/enterprise/
+enterpriseUrl: https://sinanoaq.com:8100/upload/enterprise/
+
+contractPath: /home/uploadfire/contract/
+contractUrl: https://sinanoaq.com:8100/upload/contract/
+
+transportCertificatePath: /home/uploadfire/transportCertificate/
+transportCertificateUrl: https://sinanoaq.com:8100/upload/transportCertificate/
+
+hiddenDangerPath: /home/uploadfire/hiddenDanger/
+hiddenDangerUrl: https://sinanoaq.com:8100/upload/hiddenDanger/
+
+standardPath:  /home/uploadfire/standard/
+standardUrl: https://sinanoaq.com:8100/upload/standard/
+
+
+enterprise: enterprise/
+transportCertificate: transportCertificate/
+hiddenDanger: hiddenDanger/
+standard: standard/
+contract: contract/
+assessApply: assessApply/
+customer: customer/
+
+
+
+patrolPath: /home/uploadfire/patrol/
+patrolUrl: https://sinanoaq.com:8100/upload/patrol/
+
+appPath: /home/uploadfire/app/
+appUrl: https://sinanoaq.com:8100/upload/app/
+
+productPath: /home/uploadfire/product/
+productUrl: https://sinanoaq.com:8100/upload/product/
+
+customerPath: /home/uploadfire/customer/
+customerUrl: https://sinanoaq.cn:8100/upload/customer/
+
+#控制线程是否执行 true:执行;false:不执行
+scheduling:
+  enabled: true
+historystock.robot:
+  enabled: true
+
+assessApplyPath: /home/uploadfire/assessApply/
+assessApplyUrl: https://sinanoaq.com:8100/upload/assessApply/
+
+com.gk.firework.schedules.all.switch: true
+
+com.gk.firework.schedules.single.switch: false
+
+hostId: 01
diff --git a/src/main/resources/application-sznmsprov.yml b/src/main/resources/application-sznmsprov.yml
new file mode 100644
index 0000000..cbf39f1
--- /dev/null
+++ b/src/main/resources/application-sznmsprov.yml
@@ -0,0 +1,96 @@
+# ssl
+server:
+  ssl:
+    key-store: classpath:cert/sinanoaq.com.jks
+    key-store-password: 986569
+    key-password: 986569
+    key-store-type: JKS
+  tomcat:
+    uri-encoding: UTF-8
+    basedir: /tmp/tomcat
+  port: 8100
+  servlet:
+    context-path: /
+# mysql 多数据源
+spring:
+  datasource:
+    one:
+      url: jdbc:mysql://sinanoaq.com:23306/firework?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+      username: root
+      password: NMS@uss20201!
+      type: com.alibaba.druid.pool.DruidDataSource
+  #redis
+  redis:
+    database: 0
+    host: 127.0.0.1
+    port: 6379
+    password: root
+    jedis:
+      pool:
+        max-idle: 8
+        max-active: 8
+        max-wait: -1ms
+        min-idle: 0
+
+host: https://localhost:8100
+
+filePath: /home/uploadfire/
+fileurl: https://sinanoaq.com:8100/upload/
+socketport: 504
+
+sqlPath: /opt/dbback/
+sqlurl: https://sinanoaq.com:8100/dbback/
+
+enterprisePath: /home/uploadfire/enterprise/
+enterpriseUrl: https://sinanoaq.com:8100/upload/enterprise/
+
+contractPath: /home/uploadfire/contract/
+contractUrl: https://sinanoaq.com:8100/upload/contract/
+
+transportCertificatePath: /home/uploadfire/transportCertificate/
+transportCertificateUrl: https://sinanoaq.com:8100/upload/transportCertificate/
+
+hiddenDangerPath: /home/uploadfire/hiddenDanger/
+hiddenDangerUrl: https://sinanoaq.com:8100/upload/hiddenDanger/
+
+standardPath:  /home/uploadfire/standard/
+standardUrl: https://sinanoaq.com:8100/upload/standard/
+
+
+enterprise: enterprise/
+transportCertificate: transportCertificate/
+hiddenDanger: hiddenDanger/
+standard: standard/
+contract: contract/
+assessApply: assessApply/
+customer: customer/
+
+
+patrolPath: /home/uploadfire/patrol/
+patrolUrl: https://sinanoaq.com:8100/upload/patrol/
+
+appPath: /home/uploadfire/app/
+appUrl: https://sinanoaq.com:8100/upload/app/
+
+productPath: /home/uploadfire/product/
+productUrl: https://sinanoaq.com:8100/upload/product/
+
+customerPath: /home/uploadfire/customer/
+customerUrl: https://sinanoaq.com:8100/upload/customer/
+
+
+#控制线程是否执行 true:执行;false:不执行
+scheduling:
+  enabled: true
+historystock.robot:
+  enabled: true
+
+assessApplyPath: /home/uploadfire/assessApply/
+assessApplyUrl: https://sinanoaq.com:8100/upload/assessApply/
+
+
+com.gk.firework.schedules.all.switch: true
+
+com.gk.firework.schedules.single.switch: false
+
+hostId: 01
diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml
new file mode 100644
index 0000000..29efae9
--- /dev/null
+++ b/src/main/resources/application-test.yml
@@ -0,0 +1,91 @@
+# server
+server:
+  tomcat:
+    uri-encoding: UTF-8
+    basedir: /tmp/tomcat
+  port: 8103
+  servlet:
+    context-path: /
+
+# mysql 多数据源
+spring:
+  datasource:
+    one:
+      url: jdbc:mysql://222.92.213.22:13306/firework?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+      username: root
+      password: Sinanoaq#415
+      type: com.alibaba.druid.pool.DruidDataSource
+  #redis
+  redis:
+    database: 0
+    host: 127.0.0.1
+    port: 6379
+    password: root
+    jedis:
+      pool:
+        max-idle: 8
+        max-active: 8
+        max-wait: -1ms
+        min-idle: 0
+
+host: http://localhost:8100
+
+filePath: /home/uploadfire/
+fileurl: http://222.92.213.22:8100/upload/
+socketport: 504
+
+sqlPath: /opt/dbback/
+sqlurl: http://222.92.213.22:8100/dbback/
+
+enterprisePath: /home/uploadfire/enterprise/
+enterpriseUrl: http://222.92.213.22:8100/upload/enterprise/
+
+contractPath: /home/uploadfire/contract/
+contractUrl: http://222.92.213.22:8100/upload/contract/
+
+transportCertificatePath: /home/uploadfire/transportCertificate/
+transportCertificateUrl: http://222.92.213.22:8100/upload/transportCertificate/
+
+hiddenDangerPath: /home/uploadfire/hiddenDanger/
+hiddenDangerUrl: http://222.92.213.22:8100/upload/hiddenDanger/
+
+standardPath:  /home/uploadfire/standard/
+standardUrl: http://222.92.213.22:8100/upload/standard/
+
+
+enterprise: enterprise/
+transportCertificate: transportCertificate/
+hiddenDanger: hiddenDanger/
+standard: standard/
+contract: contract/
+assessApply: assessApply/
+customer: customer/
+
+
+
+patrolPath: /home/uploadfire/patrol/
+patrolUrl: http://222.92.213.22:8100/upload/patrol/
+
+appPath: /home/uploadfire/app/
+appUrl: http://222.92.213.22:8100/upload/app/
+
+productPath: /home/uploadfire/product/
+productUrl: http://222.92.213.22:8100/upload/product/
+
+customerPath: /home/uploadfire/customer/
+customerUrl: http://222.92.213.22:8100/upload/customer/
+
+#控制线程是否执行 true:执行;false:不执行
+scheduling:
+  enabled: true
+historystock.robot:
+  enabled: true
+
+assessApplyPath: /home/uploadfire/assessApply/
+assessApplyUrl: http://222.92.213.22:8100/upload/assessApply/
+
+com.gk.firework.schedules.all.switch: true
+
+com.gk.firework.schedules.single.switch: false
+
+hostId: 01
diff --git a/src/main/resources/application-testOnline.yml b/src/main/resources/application-testOnline.yml
new file mode 100644
index 0000000..eb1c76e
--- /dev/null
+++ b/src/main/resources/application-testOnline.yml
@@ -0,0 +1,91 @@
+# server
+server:
+  tomcat:
+    uri-encoding: UTF-8
+    basedir: /tmp/tomcat
+  port: 8100
+  servlet:
+    context-path: /
+
+# mysql 多数据源
+spring:
+  datasource:
+    one:
+      url: jdbc:mysql://222.92.213.22:13306/firework?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+      username: root
+      password: Sinanoaq#415
+      type: com.alibaba.druid.pool.DruidDataSource
+  #redis
+  redis:
+    database: 0
+    host: 192.168.0.52
+    port: 6379
+    password: SEF98uvs98dUAUEF90Udssa
+    jedis:
+      pool:
+        max-idle: 8
+        max-active: 8
+        max-wait: -1ms
+        min-idle: 0
+
+host: http://localhost:8100
+
+filePath: /home/uploadfire/
+fileurl: http://121.239.169.27:8100/upload/
+socketport: 504
+
+sqlPath: /opt/dbback/
+sqlurl: http://121.239.169.27:8100/dbback/
+
+enterprisePath: /home/uploadfire/enterprise/
+enterpriseUrl: http://121.239.169.27:8100/upload/enterprise/
+
+contractPath: /home/uploadfire/contract/
+contractUrl: http://121.239.169.27:8100/upload/contract/
+
+transportCertificatePath: /home/uploadfire/transportCertificate/
+transportCertificateUrl: http://121.239.169.27:8100/upload/transportCertificate/
+
+hiddenDangerPath: /home/uploadfire/hiddenDanger/
+hiddenDangerUrl: http://121.239.169.27:8100/upload/hiddenDanger/
+
+standardPath:  /home/uploadfire/standard/
+standardUrl: http://121.239.169.27:8100/upload/standard/
+
+
+enterprise: enterprise/
+transportCertificate: transportCertificate/
+hiddenDanger: hiddenDanger/
+standard: standard/
+contract: contract/
+assessApply: assessApply/
+customer: customer/
+
+
+
+patrolPath: /home/uploadfire/patrol/
+patrolUrl: http://121.239.169.27:8100/upload/patrol/
+
+appPath: /home/uploadfire/app/
+appUrl: http://121.239.169.27:8100/upload/app/
+
+productPath: /home/uploadfire/product/
+productUrl: http://121.239.169.27:8100/upload/product/
+
+customerPath: /home/uploadfire/customer/
+customerUrl: http://121.239.169.27:8100/upload/customer/
+
+#控制线程是否执行 true:执行;false:不执行
+scheduling:
+  enabled: false
+historystock.robot:
+  enabled: false
+
+assessApplyPath: /home/uploadfire/assessApply/
+assessApplyUrl: http://121.239.169.27:8100/upload/assessApply/
+
+com.gk.firework.schedules.all.switch: false
+
+com.gk.firework.schedules.single.switch: false
+
+hostId: 01
diff --git a/src/main/resources/application-xj8103prov.yml b/src/main/resources/application-xj8103prov.yml
new file mode 100644
index 0000000..78dbfa1
--- /dev/null
+++ b/src/main/resources/application-xj8103prov.yml
@@ -0,0 +1,91 @@
+# server
+# 8103 负责业务接口
+server:
+  tomcat:
+    uri-encoding: UTF-8
+    basedir: /tmp/tomcat
+  port: 8103
+  servlet:
+    context-path: /
+
+# mysql 多数据源
+spring:
+  datasource:
+    one:
+      url: jdbc:mysql://10.142.119.233:3306/firework?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+      username: root
+      password: NMS@uss20201!
+      type: com.alibaba.druid.pool.DruidDataSource
+  #redis
+  redis:
+    database: 0
+    host: 127.0.0.1
+    port: 6379
+    password: root
+    jedis:
+      pool:
+        max-idle: 8
+        max-active: 8
+        max-wait: -1ms
+        min-idle: 0
+
+host: http://localhost:8103
+
+filePath: /data/uploadfire/
+fileurl: http://220.171.99.118:3100/upload/
+socketport: 504
+
+sqlPath: /data/dbback/
+sqlurl: http://220.171.99.118:3100/dbback/
+
+enterprisePath: /data/uploadfire/enterprise/
+enterpriseUrl: http://220.171.99.118:3100/upload/enterprise/
+
+contractPath: /data/uploadfire/contract/
+contractUrl: http://220.171.99.118:3100/upload/contract/
+
+transportCertificatePath: /data/uploadfire/transportCertificate/
+transportCertificateUrl: http://220.171.99.118:3100/upload/transportCertificate/
+
+hiddenDangerPath: /data/uploadfire/hiddenDanger/
+hiddenDangerUrl: http://220.171.99.118:3100/upload/hiddenDanger/
+
+standardPath:  /data/uploadfire/standard/
+standardUrl: http://220.171.99.118:3100/upload/standard/
+
+
+enterprise: enterprise/
+transportCertificate: transportCertificate/
+hiddenDanger: hiddenDanger/
+standard: standard/
+contract: contract/
+assessApply: assessApply/
+customer: customer/
+
+
+patrolPath: /data/uploadfire/patrol/
+patrolUrl: http://220.171.99.118:3100/upload/patrol/
+
+appPath: /data/uploadfire/app/
+appUrl: http://220.171.99.118:3100/upload/app/
+
+productPath: /data/uploadfire/product/
+productUrl: http://220.171.99.118:3100/upload/product/
+
+assessApplyPath: /data/uploadfire/assessApply/
+assessApplyUrl: http://220.171.99.118:3100/upload/assessApply/
+
+customerPath: /data/uploadfire/customer/
+customerUrl: http://220.171.99.118:3100/upload/customer/
+
+#控制线程是否执行 true:执行;false:不执行
+scheduling:
+  enabled: false
+historystock.robot:
+  enabled: false
+
+com.gk.firework.schedules.all.switch: false
+
+com.gk.firework.schedules.single.switch: false
+
+hostId: 01
diff --git a/src/main/resources/application-xj8104prov.yml b/src/main/resources/application-xj8104prov.yml
new file mode 100644
index 0000000..f55ef3c
--- /dev/null
+++ b/src/main/resources/application-xj8104prov.yml
@@ -0,0 +1,91 @@
+# server
+# 8104 负责登录接口
+server:
+  tomcat:
+    uri-encoding: UTF-8
+    basedir: /tmp/tomcat
+  port: 8104
+  servlet:
+    context-path: /
+
+# mysql 多数据源
+spring:
+  datasource:
+    one:
+      url: jdbc:mysql://10.142.119.233:3306/firework?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+      username: root
+      password: NMS@uss20201!
+      type: com.alibaba.druid.pool.DruidDataSource
+  #redis
+  redis:
+    database: 0
+    host: 127.0.0.1
+    port: 6379
+    password: root
+    jedis:
+      pool:
+        max-idle: 8
+        max-active: 8
+        max-wait: -1ms
+        min-idle: 0
+
+host: http://localhost:8104
+
+filePath: /data/uploadfire/
+fileurl: http://220.171.99.118:3100/upload/
+socketport: 504
+
+sqlPath: /data/dbback/
+sqlurl: http://220.171.99.118:3100/dbback/
+
+enterprisePath: /data/uploadfire/enterprise/
+enterpriseUrl: http://220.171.99.118:3100/upload/enterprise/
+
+contractPath: /data/uploadfire/contract/
+contractUrl: http://220.171.99.118:3100/upload/contract/
+
+transportCertificatePath: /data/uploadfire/transportCertificate/
+transportCertificateUrl: http://220.171.99.118:3100/upload/transportCertificate/
+
+hiddenDangerPath: /data/uploadfire/hiddenDanger/
+hiddenDangerUrl: http://220.171.99.118:3100/upload/hiddenDanger/
+
+standardPath:  /data/uploadfire/standard/
+standardUrl: http://220.171.99.118:3100/upload/standard/
+
+
+enterprise: enterprise/
+transportCertificate: transportCertificate/
+hiddenDanger: hiddenDanger/
+standard: standard/
+contract: contract/
+assessApply: assessApply/
+customer: customer/
+
+
+patrolPath: /data/uploadfire/patrol/
+patrolUrl: http://220.171.99.118:3100/upload/patrol/
+
+appPath: /data/uploadfire/app/
+appUrl: http://220.171.99.118:3100/upload/app/
+
+productPath: /data/uploadfire/product/
+productUrl: http://220.171.99.118:3100/upload/product/
+
+assessApplyPath: /data/uploadfire/assessApply/
+assessApplyUrl: http://220.171.99.118:3100/upload/assessApply/
+
+customerPath: /data/uploadfire/customer/
+customerUrl: http://220.171.99.118:3100/upload/customer/
+
+#控制线程是否执行 true:执行;false:不执行
+scheduling:
+  enabled: false
+historystock.robot:
+  enabled: false
+
+com.gk.firework.schedules.all.switch: false
+
+com.gk.firework.schedules.single.switch: false
+
+hostId: 01
diff --git a/src/main/resources/application-xj8105prov.yml b/src/main/resources/application-xj8105prov.yml
new file mode 100644
index 0000000..c66350f
--- /dev/null
+++ b/src/main/resources/application-xj8105prov.yml
@@ -0,0 +1,90 @@
+# server
+server:
+  tomcat:
+    uri-encoding: UTF-8
+    basedir: /tmp/tomcat
+  port: 8105
+  servlet:
+    context-path: /
+
+# mysql 多数据源
+spring:
+  datasource:
+    one:
+      url: jdbc:mysql://10.142.119.233:3306/firework?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+      username: root
+      password: NMS@uss20201!
+      type: com.alibaba.druid.pool.DruidDataSource
+  #redis
+  redis:
+    database: 0
+    host: 127.0.0.1
+    port: 6379
+    password: root
+    jedis:
+      pool:
+        max-idle: 8
+        max-active: 8
+        max-wait: -1ms
+        min-idle: 0
+
+host: http://localhost:8105
+
+filePath: /data/uploadfire/
+fileurl: http://220.171.99.118:3100/upload/
+socketport: 504
+
+sqlPath: /data/dbback/
+sqlurl: http://220.171.99.118:3100/dbback/
+
+enterprisePath: /data/uploadfire/enterprise/
+enterpriseUrl: http://220.171.99.118:3100/upload/enterprise/
+
+contractPath: /data/uploadfire/contract/
+contractUrl: http://220.171.99.118:3100/upload/contract/
+
+transportCertificatePath: /data/uploadfire/transportCertificate/
+transportCertificateUrl: http://220.171.99.118:3100/upload/transportCertificate/
+
+hiddenDangerPath: /data/uploadfire/hiddenDanger/
+hiddenDangerUrl: http://220.171.99.118:3100/upload/hiddenDanger/
+
+standardPath:  /data/uploadfire/standard/
+standardUrl: http://220.171.99.118:3100/upload/standard/
+
+
+enterprise: enterprise/
+transportCertificate: transportCertificate/
+hiddenDanger: hiddenDanger/
+standard: standard/
+contract: contract/
+assessApply: assessApply/
+customer: customer/
+
+
+patrolPath: /data/uploadfire/patrol/
+patrolUrl: http://220.171.99.118:3100/upload/patrol/
+
+appPath: /data/uploadfire/app/
+appUrl: http://220.171.99.118:3100/upload/app/
+
+productPath: /data/uploadfire/product/
+productUrl: http://220.171.99.118:3100/upload/product/
+
+assessApplyPath: /data/uploadfire/assessApply/
+assessApplyUrl: http://220.171.99.118:3100/upload/assessApply/
+
+customerPath: /data/uploadfire/customer/
+customerUrl: http://220.171.99.118:3100/upload/customer/
+
+#控制线程是否执行 true:执行;false:不执行
+scheduling:
+  enabled: true
+historystock.robot:
+  enabled: false
+
+com.gk.firework.schedules.all.switch: true
+
+com.gk.firework.schedules.single.switch: false
+
+hostId: 01
diff --git a/src/main/resources/application-xjbackprov.yml b/src/main/resources/application-xjbackprov.yml
new file mode 100644
index 0000000..d5b98ff
--- /dev/null
+++ b/src/main/resources/application-xjbackprov.yml
@@ -0,0 +1,90 @@
+# server
+server:
+  tomcat:
+    uri-encoding: UTF-8
+    basedir: /tmp/tomcat
+  port: 8100
+  servlet:
+    context-path: /
+
+# mysql 多数据源
+spring:
+  datasource:
+    one:
+      url: jdbc:mysql://10.142.119.233:3306/firework?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+      username: root
+      password: NMS@uss20201!
+      type: com.alibaba.druid.pool.DruidDataSource
+  #redis
+  redis:
+    database: 0
+    host: 10.142.119.232
+    port: 6379
+    password: root
+    jedis:
+      pool:
+        max-idle: 8
+        max-active: 8
+        max-wait: -1ms
+        min-idle: 0
+
+host: http://localhost:8100
+
+filePath: /data/uploadfire/
+fileurl: http://220.171.99.118:4100/upload/
+socketport: 504
+
+sqlPath: /data/dbback/
+sqlurl: http://220.171.99.118:4100/dbback/
+
+enterprisePath: /data/uploadfire/enterprise/
+enterpriseUrl: http://220.171.99.118:4100/upload/enterprise/
+
+contractPath: /data/uploadfire/contract/
+contractUrl: http://220.171.99.118:4100/upload/contract/
+
+transportCertificatePath: /data/uploadfire/transportCertificate/
+transportCertificateUrl: http://220.171.99.118:4100/upload/transportCertificate/
+
+hiddenDangerPath: /data/uploadfire/hiddenDanger/
+hiddenDangerUrl: http://220.171.99.118:4100/upload/hiddenDanger/
+
+standardPath:  /data/uploadfire/standard/
+standardUrl: http://220.171.99.118:4100/upload/standard/
+
+
+enterprise: enterprise/
+transportCertificate: transportCertificate/
+hiddenDanger: hiddenDanger/
+standard: standard/
+contract: contract/
+assessApply: assessApply/
+customer: customer/
+
+
+patrolPath: /data/uploadfire/patrol/
+patrolUrl: http://220.171.99.118:4100/upload/patrol/
+
+appPath: /data/uploadfire/app/
+appUrl: http://220.171.99.118:4100/upload/app/
+
+productPath: /data/uploadfire/product/
+productUrl: http://220.171.99.118:4100/upload/product/
+
+assessApplyPath: /data/uploadfire/assessApply/
+assessApplyUrl: http://220.171.99.118:4100/upload/assessApply/
+
+customerPath: /data/uploadfire/customer/
+customerUrl: http://220.171.99.118:4100/upload/customer/
+
+#控制线程是否执行 true:执行;false:不执行
+scheduling:
+  enabled: false
+historystock.robot:
+  enabled: false
+
+com.gk.firework.schedules.all.switch: false
+
+com.gk.firework.schedules.single.switch: false
+
+hostId: 05
diff --git a/src/main/resources/application-xjprov.yml b/src/main/resources/application-xjprov.yml
new file mode 100644
index 0000000..7d1c32e
--- /dev/null
+++ b/src/main/resources/application-xjprov.yml
@@ -0,0 +1,90 @@
+# server
+server:
+  tomcat:
+    uri-encoding: UTF-8
+    basedir: /tmp/tomcat
+  port: 8100
+  servlet:
+    context-path: /
+
+# mysql 多数据源
+spring:
+  datasource:
+    one:
+      url: jdbc:mysql://10.142.119.233:3306/firework?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+      username: root
+      password: NMS@uss20201!
+      type: com.alibaba.druid.pool.DruidDataSource
+  #redis
+  redis:
+    database: 0
+    host: 127.0.0.1
+    port: 6379
+    password: root
+    jedis:
+      pool:
+        max-idle: 8
+        max-active: 8
+        max-wait: -1ms
+        min-idle: 0
+
+host: http://localhost:8100
+
+filePath: /data/uploadfire/
+fileurl: http://220.171.99.118:4100/upload/
+socketport: 504
+
+sqlPath: /data/dbback/
+sqlurl: http://220.171.99.118:4100/dbback/
+
+enterprisePath: /data/uploadfire/enterprise/
+enterpriseUrl: http://220.171.99.118:4100/upload/enterprise/
+
+contractPath: /data/uploadfire/contract/
+contractUrl: http://220.171.99.118:4100/upload/contract/
+
+transportCertificatePath: /data/uploadfire/transportCertificate/
+transportCertificateUrl: http://220.171.99.118:4100/upload/transportCertificate/
+
+hiddenDangerPath: /data/uploadfire/hiddenDanger/
+hiddenDangerUrl: http://220.171.99.118:4100/upload/hiddenDanger/
+
+standardPath:  /data/uploadfire/standard/
+standardUrl: http://220.171.99.118:4100/upload/standard/
+
+
+enterprise: enterprise/
+transportCertificate: transportCertificate/
+hiddenDanger: hiddenDanger/
+standard: standard/
+contract: contract/
+assessApply: assessApply/
+customer: customer/
+
+
+patrolPath: /data/uploadfire/patrol/
+patrolUrl: http://220.171.99.118:4100/upload/patrol/
+
+appPath: /data/uploadfire/app/
+appUrl: http://220.171.99.118:4100/upload/app/
+
+productPath: /data/uploadfire/product/
+productUrl: http://220.171.99.118:4100/upload/product/
+
+assessApplyPath: /data/uploadfire/assessApply/
+assessApplyUrl: http://220.171.99.118:4100/upload/assessApply/
+
+customerPath: /data/uploadfire/customer/
+customerUrl: http://220.171.99.118:4100/upload/customer/
+
+#控制线程是否执行 true:执行;false:不执行
+scheduling:
+  enabled: true
+historystock.robot:
+  enabled: true
+
+com.gk.firework.schedules.all.switch: true
+
+com.gk.firework.schedules.single.switch: false
+
+hostId: 01
diff --git a/src/main/resources/application-xjzwprov.yml b/src/main/resources/application-xjzwprov.yml
new file mode 100644
index 0000000..70babbd
--- /dev/null
+++ b/src/main/resources/application-xjzwprov.yml
@@ -0,0 +1,90 @@
+# server
+server:
+  tomcat:
+    uri-encoding: UTF-8
+    basedir: /tmp/tomcat
+  port: 8100
+  servlet:
+    context-path: /
+
+# mysql 多数据源
+spring:
+  datasource:
+    one:
+      url: jdbc:mysql://10.142.100.131:3306/firework?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+      username: root
+      password: NMS@uss20201!
+      type: com.alibaba.druid.pool.DruidDataSource
+  #redis
+  redis:
+    database: 0
+    host: 127.0.0.1
+    port: 6379
+    password: root
+    jedis:
+      pool:
+        max-idle: 8
+        max-active: 8
+        max-wait: -1ms
+        min-idle: 0
+
+host: http://localhost:8100
+
+filePath: /data/uploadfire/
+fileurl: http://10.142.100.131:8100/upload/
+socketport: 504
+
+sqlPath: /data/dbback/
+sqlurl: http://10.142.100.131:8100/dbback/
+
+enterprisePath: /data/uploadfire/enterprise/
+enterpriseUrl: http://10.142.100.131:8100/upload/enterprise/
+
+contractPath: /data/uploadfire/contract/
+contractUrl: http://10.142.100.131:8100/upload/contract/
+
+transportCertificatePath: /data/uploadfire/transportCertificate/
+transportCertificateUrl: http://10.142.100.131:8100/upload/transportCertificate/
+
+hiddenDangerPath: /data/uploadfire/hiddenDanger/
+hiddenDangerUrl: http://10.142.100.131:8100/upload/hiddenDanger/
+
+standardPath:  /data/uploadfire/standard/
+standardUrl: http://10.142.100.131:8100/upload/standard/
+
+
+enterprise: enterprise/
+transportCertificate: transportCertificate/
+hiddenDanger: hiddenDanger/
+standard: standard/
+contract: contract/
+assessApply: assessApply/
+customer: customer/
+
+
+patrolPath: /data/uploadfire/patrol/
+patrolUrl: http://10.142.100.131:8100/upload/patrol/
+
+appPath: /data/uploadfire/app/
+appUrl: http://10.142.100.131:8100/upload/app/
+
+productPath: /data/uploadfire/product/
+productUrl: http://10.142.100.131:8100/upload/product/
+
+assessApplyPath: /data/uploadfire/product/
+assessApplyUrl: http://10.142.100.131:8100/upload/product/
+
+customerPath: /data/uploadfire/customer/
+customerUrl: http://10.142.100.131:8100/upload/customer/
+
+#控制线程是否执行 true:执行;false:不执行
+scheduling:
+  enabled: false
+historystock.robot:
+  enabled: false
+
+com.gk.firework.schedules.all.switch: false
+
+com.gk.firework.schedules.single.switch: false
+
+hostId: 01
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
new file mode 100644
index 0000000..5ba3df1
--- /dev/null
+++ b/src/main/resources/application.yml
@@ -0,0 +1,60 @@
+# mysql 多数据源
+spring:
+  # 环境 dev|sznmsprov|gkhyprov|prod|xjprov|xjzwprov
+  profiles:
+#    active: aliyun-prod
+    active: testOnline
+  #redis
+  redis:
+    database: 0
+    host: 127.0.0.1
+    port: 6379
+    password: wioowr23923sd3*&
+    jedis:
+      pool:
+        max-idle: 8
+        max-active: 8
+        max-wait: -1ms
+        min-idle: 0
+  #security
+  security:
+    user:
+      name: user
+      password: 123
+      roles: admin
+  # jackson config
+  jackson:
+    date-format: yyyy-MM-dd HH:mm:ss
+    time-zone: GMT+8
+    default-property-inclusion: NON_NULL
+  #上传文件大小
+  servlet:
+    multipart:
+      max-file-size: 500MB
+      max-request-size: 500MB
+  thymeleaf:
+      cache:  false
+#mybatis:
+#  mapper-locations: classpath*:com/gk/firework/Mapper/mybatis/*.xml
+#  type-aliases-package: com.gk.firework.Domain
+
+#mybatis 多数据源
+mybatis-plus:
+  mapper-locations: classpath*:com/gk/firework/Mapper/mybatis/*.xml
+  type-aliases-package: com.gk.firework.Domain
+  type-enums-package: com.gk.firework.Domain.Enum
+
+#线程池配置
+threadPool:
+  corePoolSize: 20
+  maxPoolSize: 20
+  queueCapacity: 10000
+
+logging:
+  level:
+    com.gk.firework.Mapper : debug
+
+#sendwarnurl-nms: http://sinanoaq.com/daping/sendWarnInfo.json
+
+#定义入库、出库、销售分表
+slice: _slice1
diff --git a/src/main/resources/cert/keystorePass-cn.txt b/src/main/resources/cert/keystorePass-cn.txt
new file mode 100644
index 0000000..bbef065
--- /dev/null
+++ b/src/main/resources/cert/keystorePass-cn.txt
@@ -0,0 +1 @@
+57ye4qbbowk4x3
\ No newline at end of file
diff --git a/src/main/resources/cert/keystorePass.txt b/src/main/resources/cert/keystorePass.txt
new file mode 100644
index 0000000..e0b8f1e
--- /dev/null
+++ b/src/main/resources/cert/keystorePass.txt
@@ -0,0 +1 @@
+986569
diff --git a/src/main/resources/cert/sinanoaq.cn.jks b/src/main/resources/cert/sinanoaq.cn.jks
new file mode 100644
index 0000000..bcae856
--- /dev/null
+++ b/src/main/resources/cert/sinanoaq.cn.jks
Binary files differ
diff --git a/src/main/resources/cert/sinanoaq.com.jks b/src/main/resources/cert/sinanoaq.com.jks
new file mode 100644
index 0000000..694d5aa
--- /dev/null
+++ b/src/main/resources/cert/sinanoaq.com.jks
Binary files differ
diff --git a/src/main/resources/error.setting b/src/main/resources/error.setting
new file mode 100644
index 0000000..98d2f1e
--- /dev/null
+++ b/src/main/resources/error.setting
@@ -0,0 +1,34 @@
+# -------------------------------------------------------------
+# ----- Setting File with UTF8 -----
+# ----- 错误信息code码 -----
+# -------------------------------------------------------------
+
+# 错误代码
+#code_999为自定义异常
+
+code_999={}
+code_998=登录超时
+code_997=系统异常请稍后重试
+code_996=非ip白名单,没有权限
+
+code_401=非授权访问,无效的token
+code_402=token 已过期
+code_403=权限不足,访问失败
+code_404=权限不足,非白名单用户
+
+code_100=用户不存在
+code_101=验证码错误
+code_102=登录失败请稍后重试
+code_103=密码不正确
+code_104=参数不能为空:[{}]
+code_105=参数异常:[{}]
+code_106=修改提交记录失败,状态异常
+code_107=操作失败,记录不存在
+code_108=用户名已存在
+code_109=当前账号已停用
+code_110=操作失败,{}
+code_112=角色英文名已存在
+
+
+
+
diff --git a/src/main/resources/log4j.properties b/src/main/resources/log4j.properties
new file mode 100644
index 0000000..a462529
--- /dev/null
+++ b/src/main/resources/log4j.properties
@@ -0,0 +1,14 @@
+# LOG4J
+log4j.rootCategory=INFO,stdout,file
+
+# print console
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
+log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n
+
+# print file
+log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
+log4j.appender.file.DatePattern='-'yyyy-MM-dd'.log'
+log4j.appender.file.File=./logs/serial
+log4j.appender.file.layout=org.apache.log4j.PatternLayout 
+log4j.appender.file.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} %p [%c]: %m%n
diff --git a/src/main/resources/printTemplate/certificatelicense.docx b/src/main/resources/printTemplate/certificatelicense.docx
new file mode 100644
index 0000000..734a93f
--- /dev/null
+++ b/src/main/resources/printTemplate/certificatelicense.docx
Binary files differ
diff --git a/src/main/resources/printTemplate/certificatelicenseapply.docx b/src/main/resources/printTemplate/certificatelicenseapply.docx
new file mode 100644
index 0000000..c6cab18
--- /dev/null
+++ b/src/main/resources/printTemplate/certificatelicenseapply.docx
Binary files differ

--
Gitblit v1.9.2