zouyu
8 天以前 09394848ce262aff81897503d32ec334fd3f2b6f
Merge branch 'dev_tide' into dev_tide_zlglxt_xinlan

# Conflicts:
# src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java
# src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordOutController.java
# src/main/java/com/ruoyi/procurementrecord/dto/Details.java
# src/main/java/com/ruoyi/procurementrecord/dto/ProcurementAddDto.java
# src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDto.java
# src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDtoCopy.java
# src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutPageDto.java
# src/main/java/com/ruoyi/procurementrecord/mapper/CustomStorageMapper.java
# src/main/java/com/ruoyi/procurementrecord/mapper/ProcurementRecordMapper.java
# src/main/java/com/ruoyi/procurementrecord/mapper/ProcurementRecordOutMapper.java
# src/main/java/com/ruoyi/procurementrecord/pojo/CustomStorage.java
# src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordOut.java
# src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordOutService.java
# src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java
# src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordOutServiceImpl.java
# src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
# src/main/java/com/ruoyi/production/controller/SalesLedgerSchedulingController.java
# src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingProcessDto.java
# src/main/java/com/ruoyi/production/dto/SalesLedgerWorkDto.java
# src/main/java/com/ruoyi/production/pojo/SalesLedgerWork.java
# src/main/java/com/ruoyi/production/service/impl/SalesLedgerSchedulingServiceImpl.java
# src/main/java/com/ruoyi/production/service/impl/SalesLedgerWorkServiceImpl.java
# src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
# src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java
# src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
# src/main/resources/application-bdsm.yml
# src/main/resources/application-bhmy.yml
# src/main/resources/application-ccwlxt.yml
# src/main/resources/application-cgglxt.yml
# src/main/resources/application-cmny.yml
# src/main/resources/application-cwglxt.yml
# src/main/resources/application-demo.yml
# src/main/resources/application-hbkj.yml
# src/main/resources/application-hbmjxt.yml
# src/main/resources/application-hbxm.yml
# src/main/resources/application-hckx.yml
# src/main/resources/application-hcmy.yml
# src/main/resources/application-hsmy.yml
# src/main/resources/application-hsxny.yml
# src/main/resources/application-hxgy.yml
# src/main/resources/application-jjxm.yml
# src/main/resources/application-jlsn.yml
# src/main/resources/application-jsyny.yml
# src/main/resources/application-mkzs.yml
# src/main/resources/application-mqsp.yml
# src/main/resources/application-phmk.yml
# src/main/resources/application-rlzyxt.yml
# src/main/resources/application-rzny.yml
# src/main/resources/application-tjxm.yml
# src/main/resources/application-tymk.yml
# src/main/resources/application-xyhb.yml
# src/main/resources/application-yxglxt.yml
# src/main/resources/application-zyrqCopy.yml
# src/main/resources/application.yml
# src/main/resources/mapper/procurementrecord/CustomStorageMapper.xml
# src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
# src/main/resources/mapper/procurementrecord/ProcurementRecordOutMapper.xml
# src/main/resources/mapper/production/SalesLedgerSchedulingMapper.xml
# src/main/resources/mapper/production/SalesLedgerWorkMapper.xml
# src/main/resources/mapper/purchase/ProductRecordMapper.xml
已复制7个文件
已添加36个文件
已重命名2个文件
已修改58个文件
已删除37个文件
10704 ■■■■ 文件已修改
pom.xml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/account/controller/AccountController.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/account/controller/AccountReconciliationController.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/account/mapper/AccountMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/account/mapper/AccountReconciliationMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/account/pojo/Account.java 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/account/pojo/AccountReconciliation.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/account/service/AccountReconciliationService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/account/service/AccountService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/account/service/impl/AccountReconciliationServiceImpl.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/account/service/impl/AccountServiceImpl.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/common/QueryWrappers.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/common/config/IgnoreTableConfig.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/framework/aspectj/lang/annotation/DataScope.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/aspect/CustomStorageWarningAspect.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/controller/CustomStorageWarningRecordController.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordOutController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementDto.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementManagementUpdateDto.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDto.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutAdd.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementUpdateDto.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/mapper/CustomStorageMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/mapper/CustomStorageWarningRecordMapper.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/pojo/CustomStorage.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/pojo/CustomStorageWarningRecord.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/pojo/InboundManagement.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/pojo/ReturnManagement.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/service/CustomStorageWarningRecordService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/service/impl/CustomStorageWarningRecordServiceImpl.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/service/impl/GasTankWarningServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementPlanServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementPriceManagementServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/controller/ProductionOrderController.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/controller/SalesLedgerProductionAccountingController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/controller/SalesLedgerWorkController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/dto/DaiDto.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/dto/ProcessSchedulingDto.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/dto/ProductionDispatchAddDto.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/dto/SalesLedgerProductDto.java 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingDto.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/mapper/ProductionOrderMapper.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/pojo/ProductionOrder.java 139 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/pojo/SalesLedgerScheduling.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/ProductionOrderService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/SalesLedgerSchedulingService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/SalesLedgerWorkService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/project/system/controller/SysDeptController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/project/system/controller/SysPostController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/project/system/controller/SysRoleController.java 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/project/system/controller/SysUserController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/project/system/domain/SysDept.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/project/system/domain/SysPost.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/project/system/domain/SysRole.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/project/system/mapper/SysDeptMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/project/system/mapper/SysPostMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/project/system/service/ISysDeptService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/project/system/service/ISysPostService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/project/system/service/impl/SysDeptServiceImpl.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/project/system/service/impl/SysPostServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/project/system/service/impl/SysRoleServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/project/system/service/impl/SysUserServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/purchase/dto/TicketRegistrationDto.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/purchase/service/impl/PaymentRegistrationServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/purchase/service/impl/ProductRecordServiceImpl.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/tide/controller/TideController.java 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/tide/pojo/TidePojo.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/tide/utils/TideUtils.java 191 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/vehicleInformationCollectionReview/controller/VehicleInformationCollectionController.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/vehicleInformationCollectionReview/dto/VehicleInformationCollectionReviewDTO.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/vehicleInformationCollectionReview/mapper/VehicleInformationCollectionReviewMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/vehicleInformationCollectionReview/pojo/VehicleInformationCollectionReview.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/vehicleInformationCollectionReview/service/VehicleInformationCollectionReviewService.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/vehicleInformationCollectionReview/service/impl/VehicleInformationCollectionReviewServiceImpl.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-bdsm.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-bhmy.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-ccwlxt.yml 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-cgglxt.yml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-cjny.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-cmny.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-cwglxt.yml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-demo.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-dev.yml 245 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-druid.yml 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-hbkj.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-hbmjxt.yml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-hbxm.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-hckx.yml 244 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-hcmy.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-hhkj.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-hsmy.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-hsxny.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-hxgy.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-hxsj.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-hysn.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-jjxm.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-jlsn.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-jsmy.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-jsyny.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-jyhj.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-mkzs.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-mqsp.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-mxsc.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-nydl.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-phmk.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-qlmc.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-rlzyxt.yml 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-rzny.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-sbglxt.yml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-scgkxt.yml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-tjxm.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-tymk.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-wdsy.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-xtbgxt.yml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-xyhb.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-yxglxt.yml 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-zjyj.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-zqhx.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-zyrq.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-zyrqCopy.yml 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/CustomStorageWarningRecordMapper.xml 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/account/AccountMapper.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/account/AccountReconciliationMapper.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/procurementrecord/CustomStorageMapper.xml 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/production/ProductionOrderMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/production/SalesLedgerProductionAccountingMapper.xml 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/purchase/ProductRecordMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/system/SysDeptMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/system/SysPostMapper.xml 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/system/SysRoleMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/system/SysUserMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/vehicleInformationCollectionReview/VehicleInformationCollectionReviewMapper.xml 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mybatis/mybatis-config.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml
@@ -4,7 +4,7 @@
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.ruoyi</groupId>
    <artifactId>ruoyi</artifactId>
    <artifactId>ruoyi-mis</artifactId>
    <version>3.8.9</version>
    <packaging>jar</packaging>
@@ -46,6 +46,11 @@
    </properties>
    <dependencies>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.18</version>
        </dependency>
        <!-- ruoyi-springboot2 / swagger knife4j é…ç½® -->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
src/main/java/com/ruoyi/account/controller/AccountController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,83 @@
package com.ruoyi.account.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.account.pojo.Account;
import com.ruoyi.account.pojo.AccountIncome;
import com.ruoyi.account.service.AccountIncomeService;
import com.ruoyi.account.service.AccountService;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.framework.security.LoginUser;
import com.ruoyi.framework.web.domain.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.List;
/**
 * è´¢åŠ¡ç®¡ç†--资金管理
 */
@RestController
@RequestMapping("/finance/funds")
@Api(tags = "财务管理--资金管理")
public class AccountController {
    @Resource
    private AccountService accountService;
    /**
     * æ–°å¢ž
     * @param account
     * @return
     */
    @PostMapping()
    @ApiOperation("新增")
    public AjaxResult add(@RequestBody Account account) {
        return AjaxResult.success(accountService.save(account));
    }
    /**
     * åˆ é™¤
     * @param ids
     * @return
     */
    @DeleteMapping()
    @ApiOperation("删除")
    public AjaxResult delQualityInspect(@RequestBody List<Integer> ids) {
        if(CollectionUtils.isEmpty(ids)){
            return AjaxResult.error("请选择至少一条数据");
        }
        //删除检验单
        return AjaxResult.success(accountService.removeBatchByIds(ids));
    }
    /**
     * ä¿®æ”¹
     * @param account
     * @return
     */
    @PutMapping()
    @ApiOperation("修改")
    public AjaxResult update(@RequestBody Account account) {
        return AjaxResult.success(accountService.updateById(account));
    }
    /**
     *分页查询
     * @param page
     * @return
     */
    @GetMapping("/page")
    @ApiOperation("分页查询")
    public AjaxResult accountListPage(Page page,Account account) {
        return AjaxResult.success(accountService.accountListPage(page,account));
    }
}
src/main/java/com/ruoyi/account/controller/AccountReconciliationController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,79 @@
package com.ruoyi.account.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.account.pojo.Account;
import com.ruoyi.account.pojo.AccountReconciliation;
import com.ruoyi.account.service.AccountReconciliationService;
import com.ruoyi.account.service.AccountService;
import com.ruoyi.framework.web.domain.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
 * è´¢åŠ¡ç®¡ç†--财务对账
 */
@RestController
@RequestMapping("/finance/reconciliation")
@Api(tags = "财务管理--财务对账")
public class AccountReconciliationController {
    @Resource
    private AccountReconciliationService accountReconciliationService;
    /**
     * æ–°å¢ž
     * @param accountReconciliation
     * @return
     */
    @PostMapping()
    @ApiOperation("新增")
    public AjaxResult add(@RequestBody AccountReconciliation accountReconciliation) {
        return AjaxResult.success(accountReconciliationService.save(accountReconciliation));
    }
    /**
     * åˆ é™¤
     * @param ids
     * @return
     */
    @DeleteMapping()
    @ApiOperation("删除")
    public AjaxResult delQualityInspect(@RequestBody List<Integer> ids) {
        if(CollectionUtils.isEmpty(ids)){
            return AjaxResult.error("请选择至少一条数据");
        }
        //删除检验单
        return AjaxResult.success(accountReconciliationService.removeBatchByIds(ids));
    }
    /**
     * ä¿®æ”¹
     * @param accountReconciliation
     * @return
     */
    @PutMapping()
    @ApiOperation("修改")
    public AjaxResult update(@RequestBody AccountReconciliation accountReconciliation) {
        return AjaxResult.success(accountReconciliationService.updateById(accountReconciliation));
    }
    /**
     *分页查询
     * @param page
     * @return
     */
    @GetMapping("/page")
    @ApiOperation("分页查询")
    public AjaxResult accountReconciliationListPage(Page page,AccountReconciliation accountReconciliation) {
        return AjaxResult.success(accountReconciliationService.accountReconciliationListPage(page, accountReconciliation));
    }
}
src/main/java/com/ruoyi/account/mapper/AccountMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.account.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.ruoyi.account.dto.AccountDto2;
import com.ruoyi.account.pojo.Account;
import com.ruoyi.account.pojo.AccountIncome;
import com.ruoyi.dto.DateQueryDto;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.List;
@Mapper
public interface AccountMapper extends BaseMapper<Account> {
    IPage<Account> accountListPage(Page page, @Param("c") Account account);
}
src/main/java/com/ruoyi/account/mapper/AccountReconciliationMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.ruoyi.account.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.ruoyi.account.pojo.Account;
import com.ruoyi.account.pojo.AccountReconciliation;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface AccountReconciliationMapper extends BaseMapper<AccountReconciliation> {
    IPage<AccountReconciliation> accountReconciliationListPage(Page page, @Param("c") AccountReconciliation accountReconciliation);
}
src/main/java/com/ruoyi/account/pojo/Account.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,94 @@
package com.ruoyi.account.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.dto.DateQueryDto;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
/**
 * è´¢åŠ¡ç®¡ç†--资金管理
 * account
 */
@TableName(value = "account")
@Data
public class Account  implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * åºå·
     */
    @TableId(type = IdType.AUTO)
    private Long id;
    /**
     * æ—¥æœŸ
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date accountDate;
    /**
     * ç±»åž‹
     */
    @Excel(name = "类型",readConverterExp = "0=销售收入,1=服务收入,2=其他收入")
    @NotBlank(message = "类型不能为空!!")
    private String typeText;
    /**
     * é‡‘额
     */
    @Excel(name = "金额")
    private BigDecimal amount;
    /**
     * è´¦æˆ·
     */
    @Excel(name = "账户")
    private String account;
    /**
     * å¾€æ¥å•位
     */
    @Excel(name = "往来单位")
    private String counterparty;
    /**
     * å¤‡æ³¨
     */
    @Excel(name = "备注")
    private String remark;
    @ApiModelProperty(value = "创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty(value = "创建用户")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty(value = "修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty(value = "修改用户")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty(value = "租户ID")
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
}
src/main/java/com/ruoyi/account/pojo/AccountReconciliation.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,88 @@
package com.ruoyi.account.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
/**
 * è´¢åŠ¡ç®¡ç†--财务对账
 * account
 */
@TableName(value = "account_reconciliation")
@Data
public class AccountReconciliation implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * åºå·
     */
    @TableId(type = IdType.AUTO)
    private Long id;
    /**
     * æ—¥æœŸ
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "日期", width = 30, dateFormat = "yyyy-MM-dd")
    private Date accountDate;
    /**
     * ç±»åž‹
     */
    @Excel(name = "类型",readConverterExp = "0=销售收入,1=服务收入,2=其他收入")
    @NotBlank(message = "类型不能为空!!")
    private String status;
    /**
     * é‡‘额
     */
    @Excel(name = "金额")
    private BigDecimal amount;
    /**
     * å¾€æ¥å•位
     */
    @Excel(name = "往来单位")
    private String counterparty;
    /**
     * å¤‡æ³¨
     */
    @Excel(name = "备注")
    private String remark;
    @ApiModelProperty(value = "创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty(value = "创建用户")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty(value = "修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty(value = "修改用户")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty(value = "租户ID")
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
}
src/main/java/com/ruoyi/account/service/AccountReconciliationService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.ruoyi.account.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.ruoyi.account.pojo.Account;
import com.ruoyi.account.pojo.AccountReconciliation;
public interface AccountReconciliationService extends IService<AccountReconciliation> {
    IPage<AccountReconciliation> accountReconciliationListPage(Page page, AccountReconciliation accountReconciliation);
}
src/main/java/com/ruoyi/account/service/AccountService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.ruoyi.account.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.ruoyi.account.dto.AccountDto3;
import com.ruoyi.account.pojo.Account;
import com.ruoyi.account.pojo.AccountIncome;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
public interface AccountService extends IService<Account> {
    IPage<Account> accountListPage(Page page, Account account);
}
src/main/java/com/ruoyi/account/service/impl/AccountReconciliationServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.ruoyi.account.service.impl;
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.ruoyi.account.mapper.AccountMapper;
import com.ruoyi.account.mapper.AccountReconciliationMapper;
import com.ruoyi.account.pojo.Account;
import com.ruoyi.account.pojo.AccountReconciliation;
import com.ruoyi.account.service.AccountReconciliationService;
import com.ruoyi.account.service.AccountService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
@AllArgsConstructor
@Service
public class AccountReconciliationServiceImpl extends ServiceImpl<AccountReconciliationMapper, AccountReconciliation> implements AccountReconciliationService {
    private AccountReconciliationMapper accountReconciliationMapper;
    @Override
    public IPage<AccountReconciliation> accountReconciliationListPage(Page page, AccountReconciliation accountReconciliation) {
        return accountReconciliationMapper.accountReconciliationListPage(page,accountReconciliation);
    }
}
src/main/java/com/ruoyi/account/service/impl/AccountServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
package com.ruoyi.account.service.impl;
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.ruoyi.account.dto.AccountDto3;
import com.ruoyi.account.mapper.AccountIncomeMapper;
import com.ruoyi.account.mapper.AccountMapper;
import com.ruoyi.account.pojo.Account;
import com.ruoyi.account.pojo.AccountIncome;
import com.ruoyi.account.service.AccountIncomeService;
import com.ruoyi.account.service.AccountService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.dto.DateQueryDto;
import com.ruoyi.project.system.domain.SysDictData;
import com.ruoyi.project.system.mapper.SysDictDataMapper;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
@AllArgsConstructor
@Service
public class AccountServiceImpl extends ServiceImpl<AccountMapper, Account> implements AccountService {
    private AccountMapper accountMapper;
    @Override
    public IPage<Account> accountListPage(Page page, Account account) {
        return accountMapper.accountListPage(page,account);
    }
}
src/main/java/com/ruoyi/common/QueryWrappers.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,68 @@
package com.ruoyi.common;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Component;
import java.lang.reflect.Field;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/*
 * æŽæž—
 * ç”ŸæˆSQL语句*/
@Component
@AllArgsConstructor
public class QueryWrappers<T> {
    public static <T> QueryWrapper<T> queryWrappers(T entity) {
        if (ObjectUtil.isEmpty(entity)) return null;
        Class<?> aClass = entity.getClass();
        QueryWrapper<T> wrapper = Wrappers.<T>query();
        List<Field> fieldList = new ArrayList<>();
        while (aClass != null) {
            fieldList.addAll(new ArrayList<>(Arrays.asList(aClass.getDeclaredFields())));
            aClass = aClass.getSuperclass();
        }
        for (Field field : fieldList) {
            field.setAccessible(true);
            Object value;
            try {
                value = field.get(entity);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
                throw new RuntimeException("查询条件生成错误");
            }
            if(value == null || value.equals("")){
                continue;
            }
            /*boolean bool = field.isAnnotationPresent(TableField.class);
            if (bool){
                if(field.getAnnotation(TableField.class).exist()==false)continue;
            }*/
            if (!field.getName().equals("orderBy")) {
                if(value.getClass()== LocalDateTime.class){
                    wrapper.like(StrUtil.toUnderlineCase(field.getName()), ((LocalDateTime) value).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
                }else if(value.getClass()== String.class){
                    wrapper.like(StrUtil.toUnderlineCase(field.getName()), value);
                }else{
                    wrapper.eq(StrUtil.toUnderlineCase(field.getName()), value);
                }
            } else {
                Map<String, String> map = (Map<String, String>) value;
                if(map.get("order")!=null){
                    wrapper.orderBy(true, map.get("order").equals("asc"), StrUtil.toUnderlineCase(map.get("field")));
                }
            }
        }
        return wrapper;
    }
}
src/main/java/com/ruoyi/common/config/IgnoreTableConfig.java
@@ -35,5 +35,6 @@
        IGNORE_TABLES.add("sys_job_log");
        IGNORE_TABLES.add("gen_table");
        IGNORE_TABLES.add("gen_table_column");
        IGNORE_TABLES.add("custom_storage_warning_record");
    }
}
src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
@@ -74,7 +74,7 @@
            if (StringUtils.isNotNull(currentUser) && !currentUser.isAdmin())
            {
                String permission = StringUtils.defaultIfEmpty(controllerDataScope.permission(), PermissionContextHolder.getContext());
                dataScopeFilter(joinPoint, currentUser, controllerDataScope.deptAlias(), controllerDataScope.userAlias(), permission);
                dataScopeFilter(joinPoint, currentUser, controllerDataScope.deptAlias(), controllerDataScope.userAlias(), controllerDataScope.tenantIdFelid(), permission);
            }
        }
    }
@@ -86,9 +86,10 @@
     * @param user ç”¨æˆ·
     * @param deptAlias éƒ¨é—¨åˆ«å
     * @param userAlias ç”¨æˆ·åˆ«å
     * @param tenantIdFelid ç§Ÿæˆ·id字段名
     * @param permission æƒé™å­—符
     */
    public static void dataScopeFilter(JoinPoint joinPoint, SysUser user, String deptAlias, String userAlias, String permission)
    public static void dataScopeFilter(JoinPoint joinPoint, SysUser user, String deptAlias, String userAlias,String tenantIdFelid, String permission)
    {
        StringBuilder sqlString = new StringBuilder();
        List<String> conditions = new ArrayList<String>();
@@ -138,6 +139,8 @@
                if (StringUtils.isNotBlank(userAlias))
                {
                    sqlString.append(StringUtils.format(" OR {}.user_id = {} ", userAlias, user.getUserId()));
                }else if(StringUtils.isNotBlank(tenantIdFelid)){
                    sqlString.append(StringUtils.format(" OR {}.tenant_id = {} ", tenantIdFelid, user.getTenantId()));
                }
                else
                {
src/main/java/com/ruoyi/framework/aspectj/lang/annotation/DataScope.java
@@ -27,6 +27,12 @@
    public String userAlias() default "";
    /**
     * ç§Ÿæˆ·id字段名
     * @return
     */
    public String tenantIdFelid() default "";
    /**
     * æƒé™å­—符(用于多个角色匹配符合要求的权限)默认根据权限注解@ss获取,多个权限用逗号分隔开来
     */
    public String permission() default "";
src/main/java/com/ruoyi/procurementrecord/aspect/CustomStorageWarningAspect.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
package com.ruoyi.procurementrecord.aspect;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.procurementrecord.dto.ProcurementRecordOutAdd;
import com.ruoyi.procurementrecord.mapper.CustomStorageMapper;
import com.ruoyi.procurementrecord.pojo.CustomStorage;
import com.ruoyi.procurementrecord.pojo.CustomStorageWarningRecord;
import com.ruoyi.procurementrecord.service.CustomStorageWarningRecordService;
import com.ruoyi.procurementrecord.service.ProcurementRecordService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Objects;
/**
 * åº“存预警切面
 */
@Aspect
@Slf4j
@Component
public class CustomStorageWarningAspect {
    @Autowired
    private ProcurementRecordService procurementRecordService;
    @Autowired
    private CustomStorageWarningRecordService customStorageWarningRecordService;
    @AfterReturning(value = "execution(* com.ruoyi.procurementrecord.service.impl.ProcurementRecordOutServiceImpl.stockout(*)) || execution(* com.ruoyi.procurementrecord.service.impl.ProcurementRecordServiceImpl.updateManagementByCustom(*))")
    @Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED)
    public void doAfterReturning(JoinPoint joinPoint) {
        Object[] args = joinPoint.getArgs();
        if(Objects.nonNull(args) && args.length>0) {
            ProcurementRecordOutAdd procurementRecordOutAdd = new ProcurementRecordOutAdd();
            BeanUtil.copyProperties(args[0],procurementRecordOutAdd);
            //查询库存数量
            List<CustomStorage> records = procurementRecordService.listPageCopyByCustom(new Page<>(-1, -1), new CustomStorage()).getRecords();
            if(CollUtil.isNotEmpty(records)){
                CustomStorage customStorage = records.stream().filter(f -> Objects.equals(f.getId(), procurementRecordOutAdd.getId())).findFirst().orElse(new CustomStorage());
                //判断库存是否到达预警值
                if(ObjectUtils.anyNotNull(customStorage.getInboundNum0(),customStorage.getWarnNum())&&customStorage.getInboundNum0().compareTo(customStorage.getWarnNum())<0){
                    CustomStorageWarningRecord customStorageWarningRecord = new CustomStorageWarningRecord();
                    customStorageWarningRecord.setCustomStorageId(customStorage.getId());
                    customStorageWarningRecordService.saveRecord(customStorageWarningRecord);
                }
            }
        }
    }
}
src/main/java/com/ruoyi/procurementrecord/controller/CustomStorageWarningRecordController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.ruoyi.procurementrecord.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.procurementrecord.dto.ProcurementPageDto;
import com.ruoyi.procurementrecord.service.CustomStorageWarningRecordService;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/customStorageWarning")
@RestController
@Api(value = "仓储物流-库存预警")
public class CustomStorageWarningRecordController {
    @Autowired
    private CustomStorageWarningRecordService customStorageWarningRecordService;
    @GetMapping("/pageList")
    @Log(title = "仓储物流-库存预警-分页查询", businessType = BusinessType.OTHER)
    public AjaxResult pageList(Page page, ProcurementPageDto dto){
        return AjaxResult.success(customStorageWarningRecordService.listPage(page,dto));
    }
}
src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordOutController.java
@@ -66,6 +66,20 @@
        return AjaxResult.success(result);
    }
    @GetMapping("/listPageByProduct")
    @Log(title = "生产出库-出库台账-出库查询", businessType = BusinessType.OTHER)
    public AjaxResult listPageByProduct(Page page, ProcurementRecordOutPageDto procurementDto) {
        IPage<ProcurementRecordOutPageDto> result = procurementRecordOutService.listPageByProduct(page, procurementDto);
        return AjaxResult.success(result);
    }
    @GetMapping("/listPageByCustom")
    @Log(title = "自定义出库-出库台账-出库查询", businessType = BusinessType.OTHER)
    public AjaxResult listPageByCustom(Page page, ProcurementRecordOutPageDto procurementDto) {
        IPage<ProcurementRecordOutPageDto> result = procurementRecordOutService.listPageByCustom(page, procurementDto);
        return AjaxResult.success(result);
    }
    @PostMapping("/del")
    @Log(title = "采购出库-出库台账-删除出库", businessType = BusinessType.DELETE)
    public AjaxResult deletePro(@RequestBody ProcurementUpdateDto procurementDto) {
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementDto.java
@@ -1,11 +1,9 @@
package com.ruoyi.procurementrecord.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
 * @author :yys
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementManagementUpdateDto.java
@@ -1,11 +1,8 @@
package com.ruoyi.procurementrecord.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
 * @author :yys
@@ -41,4 +38,6 @@
    private Integer id;
    private Integer salesLedgerProductId;
    private BigDecimal warnNum;
}
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDto.java
@@ -23,6 +23,11 @@
    private Long createUser;
    /**
     * true:去掉剩余库存为0
     */
    private Boolean flag;
    /**
     * å…¥åº“类型 1-采购 2-生产
     */
    private Integer type;
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutAdd.java
@@ -26,4 +26,9 @@
    private Long productModelId;// åŸºç¡€äº§å“ID
    /**
     * å‡ºåº“类型 1-采购出库 2-销售出库 3-自定义
     */
    private Integer type;
}
src/main/java/com/ruoyi/procurementrecord/dto/ProcurementUpdateDto.java
@@ -12,6 +12,8 @@
@Data
public class ProcurementUpdateDto {
    private String inboundDate;
    private Integer id;
    private BigDecimal warnNum;
src/main/java/com/ruoyi/procurementrecord/mapper/CustomStorageMapper.java
@@ -13,4 +13,6 @@
 */
public interface CustomStorageMapper extends BaseMapper<CustomStorage> {
    IPage<CustomStorage> listPageCopyByCustom(Page page,@Param("req") CustomStorage customStorageLambdaQueryWrapper);
    IPage<CustomStorage> listPageByCustom(Page page,@Param("req") CustomStorage customStorage);
}
src/main/java/com/ruoyi/procurementrecord/mapper/CustomStorageWarningRecordMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
package com.ruoyi.procurementrecord.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.procurementrecord.dto.ProcurementDto;
import com.ruoyi.procurementrecord.dto.ProcurementPageDto;
import com.ruoyi.procurementrecord.pojo.CustomStorage;
import com.ruoyi.procurementrecord.pojo.CustomStorageWarningRecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author 27233
* @description é’ˆå¯¹è¡¨ã€custom_storage_warning_record(库存预警表)】的数据库操作Mapper
* @createDate 2026-01-19 17:29:31
* @Entity com.ruoyi.procurementrecord.pojo.CustomStorageWarningRecord
*/
public interface CustomStorageWarningRecordMapper extends BaseMapper<CustomStorageWarningRecord> {
    IPage<CustomStorage> selectCustomStorageWarning(@Param("page") Page page, @Param("req") ProcurementPageDto dto);
}
src/main/java/com/ruoyi/procurementrecord/pojo/CustomStorage.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
@@ -17,6 +18,9 @@
@TableName("custom_storage")
@Data
public class CustomStorage {
    @TableField(exist = false)
    private Boolean flag;
    private static final long serialVersionUID = 1L;
@@ -122,4 +126,10 @@
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
    /**
     * é¢„警数量
     */
    @ApiModelProperty("预警数量")
    private BigDecimal warnNum;
}
src/main/java/com/ruoyi/procurementrecord/pojo/CustomStorageWarningRecord.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,52 @@
package com.ruoyi.procurementrecord.pojo;
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.time.LocalDateTime;
import java.util.Date;
import lombok.Data;
/**
 * åº“存预警表
 * @TableName custom_storage_warning_record
 */
@TableName(value ="custom_storage_warning_record")
@Data
public class CustomStorageWarningRecord {
    /**
     * ä¸»é”®id
     */
    @TableId(type = IdType.AUTO)
    private Long id;
    /**
     * åº“存信息关联id
     */
    private Integer customStorageId;
    /**
     * é¢„警级别
     */
    private String warningLevel;
    /**
     * é¢„警状态
     */
    private String warningStatus;
    /**
     * é¢„警时间
     */
    private LocalDateTime warningTime;
    /**
     * é¢„计缺货时间
     */
    private LocalDateTime expectedshortagetime;
    private Long tenantId;
}
src/main/java/com/ruoyi/procurementrecord/pojo/InboundManagement.java
@@ -7,7 +7,6 @@
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Date;
src/main/java/com/ruoyi/procurementrecord/pojo/ReturnManagement.java
@@ -8,7 +8,6 @@
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import java.util.Date;
/**
 * @author :yys
src/main/java/com/ruoyi/procurementrecord/service/CustomStorageWarningRecordService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.procurementrecord.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.ruoyi.procurementrecord.dto.ProcurementPageDto;
import com.ruoyi.procurementrecord.pojo.CustomStorage;
import com.ruoyi.procurementrecord.pojo.CustomStorageWarningRecord;
/**
* @author 27233
* @description é’ˆå¯¹è¡¨ã€custom_storage_warning_record(库存预警表)】的数据库操作Service
* @createDate 2026-01-19 17:29:31
*/
public interface CustomStorageWarningRecordService extends IService<CustomStorageWarningRecord> {
    IPage<CustomStorage> listPage(Page page, ProcurementPageDto dto);
    boolean saveRecord(CustomStorageWarningRecord customStorageWarningRecord);
}
src/main/java/com/ruoyi/procurementrecord/service/impl/CustomStorageWarningRecordServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,92 @@
package com.ruoyi.procurementrecord.service.impl;
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.ruoyi.procurementrecord.dto.ProcurementDto;
import com.ruoyi.procurementrecord.dto.ProcurementPageDto;
import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper;
import com.ruoyi.procurementrecord.pojo.CustomStorage;
import com.ruoyi.procurementrecord.pojo.CustomStorageWarningRecord;
import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut;
import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
import com.ruoyi.procurementrecord.service.CustomStorageWarningRecordService;
import com.ruoyi.procurementrecord.mapper.CustomStorageWarningRecordMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author 27233
* @description é’ˆå¯¹è¡¨ã€custom_storage_warning_record(库存预警表)】的数据库操作Service实现
* @createDate 2026-01-19 17:29:31
*/
@Service
public class CustomStorageWarningRecordServiceImpl extends ServiceImpl<CustomStorageWarningRecordMapper, CustomStorageWarningRecord>
    implements CustomStorageWarningRecordService{
    @Autowired
    private ProcurementRecordOutMapper procurementRecordOutMapper;
    @Override
    public IPage<CustomStorage> listPage(Page page, ProcurementPageDto procurementPageDto) {
        IPage<CustomStorage> pageList = baseMapper.selectCustomStorageWarning(page, procurementPageDto);
        List<CustomStorage> procurementPageDtoCopyList = pageList.getRecords();
        // è®¡ç®—待入库数量
        // æŸ¥è¯¢é‡‡è´­è®°å½•已入库数量
        List<Integer> collect = procurementPageDtoCopyList.stream().map(CustomStorage::getId).collect(Collectors.toList());
        if(CollectionUtils.isEmpty( collect)){
            return pageList;
        }
        LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
        procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect);
        procurementRecordLambdaQueryWrapper.eq(ProcurementRecordOut::getType, 3);
        List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper);
        if(CollectionUtils.isEmpty( procurementRecords)){
            return pageList;
        }
        for (CustomStorage dto : procurementPageDtoCopyList) {
            // æ ¹æ®é‡‡è´­å°è´¦ID筛选对应的出库记录
            List<ProcurementRecordOut> collect1 = procurementRecords.stream()
                    .filter(ProcurementRecordOut -> ProcurementRecordOut.getProcurementRecordStorageId().equals(dto.getId()))
                    .collect(Collectors.toList());
            // å¦‚果没有相关的出库记录,跳过该条数据
            if(CollectionUtils.isEmpty(collect1)){
                dto.setInboundNum0(dto.getInboundNum());
                dto.setTotalInboundNum(BigDecimal.ZERO);
                continue;
            }
            // è®¡ç®—已出库数量总和,并设置待出库数量
            BigDecimal totalInboundNum = collect1.stream()
                    .map(ProcurementRecordOut::getInboundNum)
                    .reduce(BigDecimal.ZERO, BigDecimal::add);
            // å‡ºåº“数量 = æ€»æ•°é‡ - å¾…出库数量
            dto.setTotalInboundNum(totalInboundNum);
            // å¾…出库数量 = æ€»æ•°é‡ - å·²å‡ºåº“数量
            dto.setInboundNum0(dto.getInboundNum().subtract(totalInboundNum));
            // åº“存价值
            if(dto.getTaxInclusiveUnitPrice() != null){
                dto.setTaxInclusiveTotalPrice(dto.getInboundNum0().multiply(dto.getTaxInclusiveUnitPrice()));
            }
        }
        pageList.setRecords(procurementPageDtoCopyList);
        return pageList;
    }
    @Override
    public boolean saveRecord(CustomStorageWarningRecord customStorageWarningRecord) {
        return baseMapper.insert(customStorageWarningRecord)>0;
    }
}
src/main/java/com/ruoyi/procurementrecord/service/impl/GasTankWarningServiceImpl.java
@@ -4,9 +4,7 @@
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.procurementrecord.dto.ProcurementPageDto;
import com.ruoyi.procurementrecord.mapper.GasTankWarningMapper;
import com.ruoyi.procurementrecord.pojo.GasTankWarning;
import com.ruoyi.procurementrecord.service.GasTankWarningService;
src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementPlanServiceImpl.java
@@ -6,7 +6,6 @@
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.procurementrecord.mapper.ProcurementPlanMapper;
import com.ruoyi.procurementrecord.pojo.ProcurementPlan;
import com.ruoyi.procurementrecord.pojo.ProcurementPriceManagement;
import com.ruoyi.procurementrecord.service.ProcurementPlanService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementPriceManagementServiceImpl.java
@@ -3,9 +3,7 @@
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.ruoyi.common.utils.excel.ExcelUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.procurementrecord.dto.ProcurementPageDto;
import com.ruoyi.procurementrecord.mapper.ProcurementPriceManagementMapper;
import com.ruoyi.procurementrecord.pojo.ProcurementPriceManagement;
import com.ruoyi.procurementrecord.service.ProcurementPriceManagementService;
src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
@@ -34,8 +34,12 @@
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
@@ -112,6 +116,7 @@
    @Override
    public int updatePro(ProcurementUpdateDto procurementDto) {
        ProcurementRecordStorage procurementRecordStorageById = getProcurementRecordById(procurementDto.getId());
        procurementRecordStorageById.setCreateTime(LocalDate.parse(procurementDto.getInboundDate(), DateTimeFormatter.ofPattern("yyyy-MM-dd")).atTime(LocalTime.MIDNIGHT));
        procurementRecordStorageById.setInboundNum(procurementDto.getQuantityStock());
        procurementRecordStorageById.setWarnNum(procurementDto.getWarnNum());
        procurementRecordStorageById.setUpdateUser(SecurityUtils.getLoginUser().getUserId());
@@ -323,6 +328,53 @@
    }
    @Override
    public void exportCopyTwo(HttpServletResponse response,Integer type) {
        LambdaQueryWrapper<CustomStorage> customStorageLambdaQueryWrapper = new LambdaQueryWrapper<>();
        customStorageLambdaQueryWrapper.groupBy(CustomStorage::getSupplierName, CustomStorage::getProductCategory, CustomStorage::getSpecificationModel);
        List<CustomStorage> list = customStorageMapper.selectList(customStorageLambdaQueryWrapper);
        // è®¡ç®—待入库数量
        // æŸ¥è¯¢é‡‡è´­è®°å½•已入库数量
        List<Integer> collect = list.stream().map(CustomStorage::getId).collect(Collectors.toList());
        if(CollectionUtils.isEmpty( collect)){
            ExcelUtil<CustomStorage> util = new ExcelUtil<CustomStorage>(CustomStorage.class);
            util.exportExcel(response, list, "库存管理");
            return;
        }
        LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
        procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect);
        procurementRecordLambdaQueryWrapper.eq(ProcurementRecordOut::getType, type);
        procurementRecordLambdaQueryWrapper.eq(ProcurementRecordOut::getType, type);
        List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper);
        if(CollectionUtils.isEmpty( procurementRecords)){
            ExcelUtil<CustomStorage> util = new ExcelUtil<CustomStorage>(CustomStorage.class);
            util.exportExcel(response, list, "库存管理");
            return;
        }
        for (CustomStorage dto : list) {
            // æ ¹æ®é‡‡è´­å°è´¦ID筛选对应的出库记录
            List<ProcurementRecordOut> collect1 = procurementRecords.stream()
                    .filter(ProcurementRecordOut -> ProcurementRecordOut.getProcurementRecordStorageId().equals(dto.getId()))
                    .collect(Collectors.toList());
            // å¦‚果没有相关的出库记录,跳过该条数据
            if(CollectionUtils.isEmpty(collect1)){
                dto.setInboundNum0(dto.getInboundNum());
                continue;
            }
            // è®¡ç®—已出库数量总和,并设置待出库数量
            BigDecimal totalInboundNum = collect1.stream()
                    .map(ProcurementRecordOut::getInboundNum)
                    .reduce(BigDecimal.ZERO, BigDecimal::add);
            // å¾…出库数量 = æ€»æ•°é‡ - å·²å‡ºåº“数量
            dto.setInboundNum0(dto.getInboundNum().subtract(totalInboundNum));
        }
        ExcelUtil<CustomStorage> util = new ExcelUtil<CustomStorage>(CustomStorage.class);
        util.exportExcel(response, list, "库存管理");
    }
    @Override
    public Map<String, Object> getReportList(Page page, ProcurementPageDto procurementDto) {
        // æž„建报表数据结构
        Map<String, Object> reportData = new HashMap<>();
src/main/java/com/ruoyi/production/controller/ProductionOrderController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,90 @@
package com.ruoyi.production.controller;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.utils.OrderUtils;
import com.ruoyi.framework.aspectj.lang.annotation.Log;
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.controller.BaseController;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.production.mapper.ProductionOrderMapper;
import com.ruoyi.production.pojo.ProductionOrder;
import com.ruoyi.production.service.ProductionOrderService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
 * @author :yys
 * @date : 2025/11/26 14:21
 */
@RestController
@Api(tags = "生产订单")
@RequestMapping("/productionOrder")
public class ProductionOrderController extends BaseController {
    @Autowired
    private ProductionOrderService productionOrderService;
    @Autowired
    private ProductionOrderMapper productionOrderMapper;
    @GetMapping("/listPage")
    @Log(title = "生产订单-分页查询", businessType = BusinessType.OTHER)
    @ApiOperation("生产订单-分页查询")
    public AjaxResult listPage(Page page, ProductionOrder productionOrder) {
        return productionOrderService.listPage(page, productionOrder);
    }
    @PostMapping("/addProductionOrder")
    @Log(title = "生产订单-新增", businessType = BusinessType.INSERT)
    @ApiOperation("生产订单-新增")
    public AjaxResult addProductionOrder(@RequestBody ProductionOrder productionOrder) {
        String scdd = OrderUtils.countTodayByCreateTime(productionOrderMapper, "SCDD");
        productionOrder.setOrderNo(scdd);
        return AjaxResult.success(productionOrderService.save(productionOrder));
    }
    @PostMapping("/updateProductionOrder")
    @Log(title = "生产订单-修改", businessType = BusinessType.UPDATE)
    @ApiOperation("生产订单-修改")
    public AjaxResult updateProductionOrder(@RequestBody ProductionOrder productionOrder) {
        return AjaxResult.success(productionOrderService.updateById(productionOrder));
    }
    @DeleteMapping("/deleteProductionOrder")
    @Log(title = "生产订单-删除", businessType = BusinessType.DELETE)
    @ApiOperation("生产订单-删除")
    public AjaxResult deleteProductionOrder(@RequestBody List<Long> ids) {
        if (CollectionUtils.isEmpty(ids)) return AjaxResult.error("请传入要删除的ID");
        return AjaxResult.success(productionOrderService.removeBatchByIds(ids));
    }
    /**
     * å¯¼å‡º
     * @param response
     */
    @PostMapping("/export")
    @ApiOperation("生产管理-生产订单-导出")
    @Log(title = "生产订单-导出", businessType = BusinessType.EXPORT)
    public void export(HttpServletResponse response) {
        productionOrderService.export(response);
    }
    /**
     * å¯¼å‡º
     * @param response
     */
    @PostMapping("/exportOne")
    @ApiOperation("生产管理-生产派工-导出")
    @Log(title = "生产订单-导出", businessType = BusinessType.EXPORT)
    public void exportOne(HttpServletResponse response) {
        productionOrderService.exportOne(response);
    }
}
src/main/java/com/ruoyi/production/controller/SalesLedgerProductionAccountingController.java
@@ -10,7 +10,6 @@
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.production.dto.ProductOrderDto;
import com.ruoyi.production.dto.SalesLedgerProductionAccountingDto;
import com.ruoyi.production.pojo.SalesLedgerProductionAccounting;
import com.ruoyi.production.service.impl.SalesLedgerProductionAccountingServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
src/main/java/com/ruoyi/production/controller/SalesLedgerWorkController.java
@@ -7,12 +7,8 @@
import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
import com.ruoyi.framework.web.controller.BaseController;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.production.dto.ProcessSchedulingDto;
import com.ruoyi.production.dto.ProductionReportDto;
import com.ruoyi.production.dto.SalesLedgerSchedulingProcessDto;
import com.ruoyi.production.dto.SalesLedgerWorkDto;
import com.ruoyi.production.pojo.SalesLedgerWork;
import com.ruoyi.production.service.SalesLedgerWorkService;
import com.ruoyi.production.service.impl.SalesLedgerWorkServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -56,7 +52,7 @@
        SalesLedgerWorkDto salesLedgerSchedulingDto = new SalesLedgerWorkDto();
        IPage<SalesLedgerWorkDto> result = salesLedgerWorkService.listPage(page,salesLedgerSchedulingDto);
        result.getRecords().forEach(item -> {
            item.setDaiNum(item.getFinishedNum().subtract(item.getSchedulingNum()));
            item.setDaiNum(item.getSchedulingNum().subtract(item.getFinishedNum()));
            item.setStatusName(item.getStatus().toString());
        });
        ExcelUtil<SalesLedgerWorkDto> util = new ExcelUtil<>(SalesLedgerWorkDto.class);
src/main/java/com/ruoyi/production/dto/DaiDto.java
@@ -1,13 +1,13 @@
package com.ruoyi.production.dto;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.util.Date;
import java.time.LocalDate;
/**
 * @author :yys
@@ -19,92 +19,59 @@
    @Excel(name = "待排数量")
    private BigDecimal daiNum;
    @ApiModelProperty(value = "销售产品ID")
    private Long salesLedgerProductId;
    @ApiModelProperty(value = "销售台账ID")
    private Long salesLedgerId;
    /**
     * é”€å”®åˆåŒå·
     * ç”Ÿäº§è®¢å•号
     */
    @Excel(name = "销售合同号")
    @ApiModelProperty(value = "销售合同号")
    private String salesContractNo;
    /**
     * å®¢æˆ·åˆåŒå·
     */
    @Excel(name = "客户合同号")
    @ApiModelProperty(value = "客户合同号")
    private String customerContractNo;
    /**
     * é¡¹ç›®åç§°
     */
    @Excel(name = "项目名称")
    @ApiModelProperty(value = "项目名称")
    private String projectName;
    /**
     * å½•入日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "录入日期", width = 30, dateFormat = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty(value = "录入日期")
    private Date entryDate;
    @ApiModelProperty(value = "录入日期开始")
    private String entryDateStart;
    @ApiModelProperty(value = "录入日期结束")
    private String entryDateEnd;
    /**
     * å®¢æˆ·åç§°
     */
    @Excel(name = "客户名称")
    @ApiModelProperty(value = "客户名称")
    private String customerName;
    @Excel(name = "生产订单号")
    private String orderNo;
    /**
     * äº§å“å¤§ç±»
     */
    @Excel(name = "产品大类")
    @ApiModelProperty(value = "产品大类")
    private String productCategory;
    /**
     * è§„格型号
     */
    @Excel(name = "规格型号")
    @ApiModelProperty(value = "规格型号")
    private String specificationModel;
    /**
     * å•位
     */
    @Excel(name = "单位")
    @ApiModelProperty(value = "单位")
    private String unit;
    /**
     * æ•°é‡
     */
    @Excel(name = "数量")
    @ApiModelProperty(value = "数量")
    private BigDecimal quantity;
    /**
     * æŽ’产数量
     * è®¢å•状态
     */
    @Excel(name = "排产数量")
    @ApiModelProperty(value = "排产数量")
    private BigDecimal schedulingNum;
    @Excel(name = "订单状态")
    @TableField(exist = false)
    private String status;
    @ApiModelProperty(value = "租户ID")
    private Long tenantId;
    @ApiModelProperty(value = "完工数量")
    @TableField(exist = false)
    private BigDecimal successNum;
    /**
     * å½•入日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @Excel(name = "录入日期", width = 30, dateFormat = "yyyy-MM-dd")
    private LocalDate registerDate;
    /**
     * å½•入人
     */
    @Excel(name = "录入人")
    private String createBy;
}
src/main/java/com/ruoyi/production/dto/ProcessSchedulingDto.java
@@ -5,7 +5,6 @@
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
 * @author :yys
@@ -15,6 +14,26 @@
@ApiModel
public class ProcessSchedulingDto {
    /**
     * å£å‘³åˆ†ç±»
     */
    private String type;
    /**
     * å¤‡æ³¨
     */
    private String remark;
    /**
     * æŸè€—
     */
    private String loss;
    /**
     * é¢†ç”¨
     */
    private String receive;
    private Long id;
    /**
src/main/java/com/ruoyi/production/dto/ProductionDispatchAddDto.java
@@ -18,7 +18,7 @@
    @ApiModelProperty(value = "销售台账ID")
    private Long salesLedgerId;
    @ApiModelProperty(value = "销售产品ID")
    @ApiModelProperty(value = "生产订单ID")
    private Long salesLedgerProductId;
    /**
src/main/java/com/ruoyi/production/dto/SalesLedgerProductDto.java
@@ -1,13 +1,9 @@
package com.ruoyi.production.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
 * @author :yys
@@ -17,34 +13,34 @@
@ApiModel
public class SalesLedgerProductDto {
    /**
     * é”€å”®åˆåŒå·
     */
    @Excel(name = "销售合同号")
    @ApiModelProperty(value = "销售合同号")
    private String salesContractNo;
    /**
     * å®¢æˆ·åˆåŒå·
     */
    @Excel(name = "客户合同号")
    @ApiModelProperty(value = "客户合同号")
    private String customerContractNo;
    /**
     * é¡¹ç›®åç§°
     */
    @Excel(name = "项目名称")
    @ApiModelProperty(value = "项目名称")
    private String projectName;
//    /**
//     * é”€å”®åˆåŒå·
//     */
//    @Excel(name = "销售合同号")
//    @ApiModelProperty(value = "销售合同号")
//    private String salesContractNo;
//
//    /**
//     * å®¢æˆ·åˆåŒå·
//     */
//    @Excel(name = "客户合同号")
//    @ApiModelProperty(value = "客户合同号")
//    private String customerContractNo;
//
//    /**
//     * é¡¹ç›®åç§°
//     */
//    @Excel(name = "项目名称")
//    @ApiModelProperty(value = "项目名称")
//    private String projectName;
    /**
     * å®¢æˆ·åç§°
     * ç”Ÿäº§è®¢å•号
     */
    @Excel(name = "客户名称")
    @ApiModelProperty(value = "客户名称")
    private String customerName;
    @Excel(name = "生产订单号")
    @ApiModelProperty(value = "生产订单号")
    private String orderNo;
    /**
src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingDto.java
@@ -1,7 +1,5 @@
package com.ruoyi.production.dto;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModel;
@@ -10,7 +8,6 @@
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Date;
/**
src/main/java/com/ruoyi/production/mapper/ProductionOrderMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
package com.ruoyi.production.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.production.pojo.ProductionOrder;
/**
 * @author :yys
 * @date : 2025/11/26 14:18
 */
public interface ProductionOrderMapper extends BaseMapper<ProductionOrder> {
}
src/main/java/com/ruoyi/production/pojo/ProductionOrder.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,139 @@
package com.ruoyi.production.pojo;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
 * @author :yys
 * @date : 2025/11/26 14:15
 */
@Data
@TableName("production_order")
public class ProductionOrder {
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    @ApiModelProperty(value = "录入日期开始")
    @TableField(exist = false)
    private String entryDateStart;
    @ApiModelProperty(value = "录入日期结束")
    @TableField(exist = false)
    private String entryDateEnd;
    /**
     * ç”Ÿäº§è®¢å•号
     */
    @Excel(name = "生产订单号")
    @ApiModelProperty(value = "生产订单号")
    private String orderNo;
    /**
     * äº§å“å¤§ç±»
     */
    @Excel(name = "产品大类")
    @ApiModelProperty(value = "产品大类")
    private String productCategory;
    /**
     * è§„格型号
     */
    @Excel(name = "规格型号")
    @ApiModelProperty(value = "规格型号")
    private String specificationModel;
    /**
     * å•位
     */
    @Excel(name = "单位")
    @ApiModelProperty(value = "单位")
    private String unit;
    /**
     * æ•°é‡
     */
    @Excel(name = "数量")
    @ApiModelProperty(value = "数量")
    private BigDecimal quantity;
    /**
     * è®¢å•状态
     */
    @Excel(name = "订单状态")
    @TableField(exist = false)
    private String status = "未完成";
    /**
     * æŽ’产数量
     */
//    @Excel(name = "排产数量")
    @ApiModelProperty(value = "排产数量")
    @TableField(exist = false)
    private BigDecimal schedulingNum;
    /**
     * å®Œå·¥æ•°é‡
     */
    @Excel(name = "完工数量")
    @ApiModelProperty(value = "完工数量")
    @TableField(exist = false)
    private BigDecimal successNum = BigDecimal.ZERO;
    /**
     * å½•入日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @Excel(name = "录入日期", width = 30, dateFormat = "yyyy-MM-dd")
    @ApiModelProperty(value = "录入日期")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate registerDate;
    /**
     * å½•入人
     */
//    @Excel(name = "录入人")
    @ApiModelProperty(value = "录入人")
    private String createBy;
    /**
     * åˆ›å»ºè€…
     */
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    /**
     * åˆ›å»ºæ—¶é—´
     */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    /**
     * ä¿®æ”¹è€…
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    /**
     * ä¿®æ”¹æ—¶é—´
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    /**
     * ç§Ÿæˆ·ID
     */
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
}
src/main/java/com/ruoyi/production/pojo/SalesLedgerScheduling.java
@@ -29,7 +29,7 @@
    private Long salesLedgerId;
    /**
     * é”€å”®äº§å“id
     * ç”Ÿäº§è®¢å•id
     */
    private Long salesLedgerProductId;
src/main/java/com/ruoyi/production/service/ProductionOrderService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.production.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.production.pojo.ProductionOrder;
import javax.servlet.http.HttpServletResponse;
/**
 * @author :yys
 * @date : 2025/11/26 14:19
 */
public interface ProductionOrderService extends IService<ProductionOrder> {
    AjaxResult listPage(Page page, ProductionOrder productionOrder);
    void export(HttpServletResponse response);
    void exportOne(HttpServletResponse response);
}
src/main/java/com/ruoyi/production/service/SalesLedgerSchedulingService.java
@@ -29,6 +29,4 @@
    int productionDispatchDelete(List<Long> ids);
    int processScheduling(List<ProcessSchedulingDto> processSchedulingDto);
    void exportOne(HttpServletResponse response);
}
src/main/java/com/ruoyi/production/service/SalesLedgerWorkService.java
@@ -3,7 +3,6 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.production.dto.ProductionReportDto;
import com.ruoyi.production.dto.SalesLedgerWorkDto;
import com.ruoyi.production.pojo.SalesLedgerWork;
src/main/java/com/ruoyi/production/service/impl/ProductionOrderServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,147 @@
package com.ruoyi.production.service.impl;
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.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.production.dto.DaiDto;
import com.ruoyi.production.mapper.ProductionOrderMapper;
import com.ruoyi.production.mapper.SalesLedgerSchedulingMapper;
import com.ruoyi.production.mapper.SalesLedgerWorkMapper;
import com.ruoyi.production.pojo.ProductionOrder;
import com.ruoyi.production.pojo.SalesLedgerScheduling;
import com.ruoyi.production.pojo.SalesLedgerWork;
import com.ruoyi.production.service.ProductionOrderService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
 * @author :yys
 * @date : 2025/11/26 14:20
 */
@Service
@Slf4j
public class ProductionOrderServiceImpl extends ServiceImpl<ProductionOrderMapper, ProductionOrder> implements ProductionOrderService {
    @Autowired
    private ProductionOrderMapper productionOrderMapper;
    @Autowired
    private SalesLedgerWorkMapper salesLedgerWorkMapper;
    @Autowired
    private SalesLedgerSchedulingMapper salesLedgerSchedulingMapper;
    @Override
    public AjaxResult listPage(Page page, ProductionOrder productionOrder) {
        LambdaQueryWrapper<ProductionOrder> productionOrderLambdaQueryWrapper = new LambdaQueryWrapper<>();
        if(productionOrder != null){
            if(StringUtils.isNotEmpty(productionOrder.getOrderNo())){
                productionOrderLambdaQueryWrapper.like(ProductionOrder::getOrderNo, productionOrder.getOrderNo());
            }
            if(StringUtils.isNotEmpty(productionOrder.getProductCategory())){
                productionOrderLambdaQueryWrapper.like(ProductionOrder::getProductCategory, productionOrder.getProductCategory());
            }
            if(StringUtils.isNotEmpty(productionOrder.getEntryDateStart()) && StringUtils.isNotEmpty(productionOrder.getEntryDateEnd())){
                productionOrderLambdaQueryWrapper.ge(ProductionOrder::getRegisterDate, productionOrder.getEntryDateStart())
                        .le(ProductionOrder::getRegisterDate, productionOrder.getEntryDateEnd());
            }
        }
        IPage<ProductionOrder> list = productionOrderMapper.selectPage(page,productionOrderLambdaQueryWrapper);
        if(CollectionUtils.isEmpty(list.getRecords())){
            return AjaxResult.success(list);
        }
        Set<Long> collect = list.getRecords().stream().map(ProductionOrder::getId).collect(Collectors.toSet());
        // èŽ·å–æŽ’äº§æ•°é‡
        LambdaQueryWrapper<SalesLedgerScheduling> salesLedgerSchedulingLambdaQueryWrapper = new LambdaQueryWrapper<>();
        salesLedgerSchedulingLambdaQueryWrapper.in(SalesLedgerScheduling::getSalesLedgerProductId, collect);
        List<SalesLedgerScheduling> salesLedgerSchedulings = salesLedgerSchedulingMapper.selectList(salesLedgerSchedulingLambdaQueryWrapper);
        // è®¡ç®—完工数量
        LambdaQueryWrapper<SalesLedgerWork> salesLedgerWorkLambdaQueryWrapper = new LambdaQueryWrapper<>();
        salesLedgerWorkLambdaQueryWrapper.in(SalesLedgerWork::getSalesLedgerProductId, collect)
                .ne(SalesLedgerWork::getStatus, 1);
        List<SalesLedgerWork> salesLedgerWorks = salesLedgerWorkMapper.selectList(salesLedgerWorkLambdaQueryWrapper);
        list.getRecords().forEach(i -> {
            // èŽ·å–æŽ’äº§æ•°é‡
            i.setSchedulingNum(salesLedgerSchedulings
                    .stream()
                    .filter(j -> j.getSalesLedgerProductId().equals(i.getId()))
                    .map(SalesLedgerScheduling::getSchedulingNum)
                    .reduce(BigDecimal.ZERO, BigDecimal::add));
            // èŽ·å–å®Œæˆæ•°é‡
            i.setSuccessNum(salesLedgerWorks
                    .stream()
                    .filter(j -> j.getSalesLedgerProductId().equals(i.getId()))
                    .map(SalesLedgerWork::getFinishedNum)
                    .reduce(BigDecimal.ZERO, BigDecimal::add));
            // çŠ¶æ€ = æ•°é‡å’Œå®Œå·¥æ•°é‡æ¯”较
            if(i.getSchedulingNum().compareTo(i.getSuccessNum()) == 0){
                i.setStatus("已完成");
            }else{
                i.setStatus("未完成");
            }
        });
        return AjaxResult.success(list);
    }
    @Override
    public void export(HttpServletResponse response) {
        List<ProductionOrder> list = this.list();
        if(CollectionUtils.isEmpty(list)){
            throw new RuntimeException("无导出数据");
        }
        Set<Long> collect = list.stream().map(ProductionOrder::getId).collect(Collectors.toSet());
        LambdaQueryWrapper<SalesLedgerWork> salesLedgerWorkLambdaQueryWrapper = new LambdaQueryWrapper<>();
        salesLedgerWorkLambdaQueryWrapper.in(SalesLedgerWork::getSalesLedgerProductId, collect)
                .ne(SalesLedgerWork::getStatus, 1);
        List<SalesLedgerWork> salesLedgerWorks = salesLedgerWorkMapper.selectList(salesLedgerWorkLambdaQueryWrapper);
        list.forEach(i -> {
            // èŽ·å–å®Œæˆæ•°é‡
            i.setSuccessNum(salesLedgerWorks
                    .stream()
                    .filter(j -> j.getSalesLedgerProductId().equals(i.getId()))
                    .map(SalesLedgerWork::getFinishedNum)
                    .reduce(BigDecimal.ZERO, BigDecimal::add));
            // çŠ¶æ€ = æ•°é‡å’Œå®Œå·¥æ•°é‡æ¯”较
            if(i.getQuantity().compareTo(i.getSuccessNum()) == 0){
                i.setStatus("已完成");
            }else{
                i.setStatus("未完成");
            }
        });
        ExcelUtil<ProductionOrder> util = new ExcelUtil<>(ProductionOrder.class);
        util.exportExcel(response, list, "生产订单");
    }
    @Override
    public void exportOne(HttpServletResponse response) {
        List<ProductionOrder> list = this.list();
        if(CollectionUtils.isEmpty(list)){
            throw new RuntimeException("无导出数据");
        }
        List<DaiDto> dais = new ArrayList<>();
        list.forEach(i -> {
            DaiDto daiDto = new DaiDto();
            BeanUtils.copyProperties(i, daiDto);
            // èŽ·å–å¾…æŽ’äº§æ•°é‡
            daiDto.setDaiNum(daiDto.getQuantity().subtract(i.getSuccessNum()));
            dais.add(daiDto);
        });
        ExcelUtil<DaiDto> util = new ExcelUtil<>(DaiDto.class);
        util.exportExcel(response, dais, "生产派工");
    }
}
src/main/java/com/ruoyi/project/system/controller/SysDeptController.java
@@ -1,6 +1,8 @@
package com.ruoyi.project.system.controller;
import java.util.List;
import com.ruoyi.common.utils.SecurityUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -81,6 +83,7 @@
            return error("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在");
        }
        dept.setCreateBy(getUsername());
        dept.setTenantId(SecurityUtils.getLoginUser().getTenantId());
        return toAjax(deptService.insertDept(dept));
    }
src/main/java/com/ruoyi/project/system/controller/SysPostController.java
@@ -2,6 +2,8 @@
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.utils.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
@@ -86,6 +88,7 @@
            return error("新增岗位'" + post.getPostName() + "'失败,岗位编码已存在");
        }
        post.setCreateBy(getUsername());
        post.setTenantId(SecurityUtils.getLoginUser().getTenantId());
        return toAjax(postService.insertPost(post));
    }
src/main/java/com/ruoyi/project/system/controller/SysRoleController.java
@@ -2,6 +2,8 @@
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.utils.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
@@ -93,15 +95,16 @@
    @PostMapping
    public AjaxResult add(@Validated @RequestBody SysRole role)
    {
        if (!roleService.checkRoleNameUnique(role))
        {
            return error("新增角色'" + role.getRoleName() + "'失败,角色名称已存在");
        }
        else if (!roleService.checkRoleKeyUnique(role))
        {
            return error("新增角色'" + role.getRoleName() + "'失败,角色权限已存在");
        }
//        if (!roleService.checkRoleNameUnique(role))
//        {
//            return error("新增角色'" + role.getRoleName() + "'失败,角色名称已存在");
//        }
//        else if (!roleService.checkRoleKeyUnique(role))
//        {
//            return error("新增角色'" + role.getRoleName() + "'失败,角色权限已存在");
//        }
        role.setCreateBy(getUsername());
        role.setTenantId(SecurityUtils.getLoginUser().getTenantId());
        return toAjax(roleService.insertRole(role));
    }
@@ -116,14 +119,14 @@
    {
        roleService.checkRoleAllowed(role);
        roleService.checkRoleDataScope(role.getRoleId());
        if (!roleService.checkRoleNameUnique(role))
        {
            return error("修改角色'" + role.getRoleName() + "'失败,角色名称已存在");
        }
        else if (!roleService.checkRoleKeyUnique(role))
        {
            return error("修改角色'" + role.getRoleName() + "'失败,角色权限已存在");
        }
//        if (!roleService.checkRoleNameUnique(role))
//        {
//            return error("修改角色'" + role.getRoleName() + "'失败,角色名称已存在");
//        }
//        else if (!roleService.checkRoleKeyUnique(role))
//        {
//            return error("修改角色'" + role.getRoleName() + "'失败,角色权限已存在");
//        }
        role.setUpdateBy(getUsername());
        
        if (roleService.updateRole(role) > 0)
src/main/java/com/ruoyi/project/system/controller/SysUserController.java
@@ -126,7 +126,8 @@
        }
        List<SysRole> roles = roleService.selectRoleAll();
        ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
        ajax.put("posts", postService.selectPostAll());
//        ajax.put("posts", postService.selectPostAll());
        ajax.put("posts", postService.selectPostByTenantId(SecurityUtils.getLoginUser().getTenantId()));
        SysUserDeptVo sysUserDeptVo = new SysUserDeptVo();
        sysUserDeptVo.setUserId(userId);
        List<SysUserDeptVo> sysUserDeptVos = userDeptService.userLoginFacotryList(sysUserDeptVo);
@@ -156,6 +157,7 @@
            return error("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在");
        }
        user.setCreateBy(getUsername());
        user.setTenantId(SecurityUtils.getLoginUser().getTenantId());
        user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
        user.setTenantId(user.getDeptId());
        return toAjax(userService.insertUser(user));
@@ -291,8 +293,8 @@
    @GetMapping("/userListNoPageByTenantId")
    public AjaxResult userListNoPageByTenantId(SysUser user){
        //获取登录用户信息
        SysUser loginUser = SecurityUtils.getLoginUser().getUser();
        user.setTenantId(loginUser.getTenantId());
//        SysUser loginUser = SecurityUtils.getLoginUser().getUser();
        user.setTenantId(SecurityUtils.getLoginUser().getTenantId());
        List<SysUser> sysUserList = userService.userListNoPage(user);
        return AjaxResult.success(sysUserList);
    }
src/main/java/com/ruoyi/project/system/domain/SysDept.java
@@ -54,7 +54,17 @@
    /** éƒ¨é—¨ç¼–号 */
    private String deptNick;
    private Long tenantId;
    public Long getTenantId() {
        return tenantId;
    }
    public void setTenantId(Long tenantId) {
        this.tenantId = tenantId;
    }
    /** å­éƒ¨é—¨ */
    private List<SysDept> children = new ArrayList<SysDept>();
src/main/java/com/ruoyi/project/system/domain/SysPost.java
@@ -38,6 +38,16 @@
    @Excel(name = "状态", readConverterExp = "0=正常,1=停用")
    private String status;
    private Long tenantId;
    public Long getTenantId() {
        return tenantId;
    }
    public void setTenantId(Long tenantId) {
        this.tenantId = tenantId;
    }
    /** ç”¨æˆ·æ˜¯å¦å­˜åœ¨æ­¤å²—位标识 é»˜è®¤ä¸å­˜åœ¨ */
    private boolean flag = false;
src/main/java/com/ruoyi/project/system/domain/SysRole.java
@@ -4,6 +4,9 @@
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
@@ -64,6 +67,17 @@
    /** è§’色菜单权限 */
    private Set<String> permissions;
    /**租户id*/
    private Long tenantId;
    public Long getTenantId() {
        return tenantId;
    }
    public void setTenantId(Long tenantId) {
        this.tenantId = tenantId;
    }
    public SysRole()
    {
src/main/java/com/ruoyi/project/system/mapper/SysDeptMapper.java
@@ -122,4 +122,6 @@
     * @return
     */
    Long maxLevelDeptId(Long deptId);
    SysDept selectDeptByDeptName(@Param("deptName") String deptName);
}
src/main/java/com/ruoyi/project/system/mapper/SysPostMapper.java
@@ -2,6 +2,7 @@
import java.util.List;
import com.ruoyi.project.system.domain.SysPost;
import org.apache.ibatis.annotations.Param;
/**
 * å²—位信息 æ•°æ®å±‚
@@ -96,4 +97,6 @@
     * @return ç»“æžœ
     */
    public SysPost checkPostCodeUnique(String postCode);
    List<SysPost> selectPostByTenantId(@Param("tenantId") Long tenantId);
}
src/main/java/com/ruoyi/project/system/service/ISysDeptService.java
@@ -20,6 +20,14 @@
    public List<SysDept> selectDeptList(SysDept dept);
    /**
     * æ ¹æ®éƒ¨é—¨åç§°æŸ¥è¯¢éƒ¨é—¨ä¿¡æ¯
     *
     * @param deptName éƒ¨é—¨åç§°
     * @return éƒ¨é—¨ä¿¡æ¯é›†åˆ
     */
    public SysDept selectDeptByDeptName(String deptName);
    /**
     * æŸ¥è¯¢éƒ¨é—¨æ ‘结构信息
     * 
     * @param dept éƒ¨é—¨ä¿¡æ¯
src/main/java/com/ruoyi/project/system/service/ISysPostService.java
@@ -96,4 +96,6 @@
     * @return ç»“æžœ
     */
    public int updatePost(SysPost post);
    public List<SysPost> selectPostByTenantId(Long tenantId);
}
src/main/java/com/ruoyi/project/system/service/impl/SysDeptServiceImpl.java
@@ -42,12 +42,17 @@
     * @return éƒ¨é—¨ä¿¡æ¯é›†åˆ
     */
    @Override
    @DataScope(deptAlias = "d")
    @DataScope(tenantIdFelid = "d")
    public List<SysDept> selectDeptList(SysDept dept)
    {
        return deptMapper.selectDeptList(dept);
    }
    @Override
    public SysDept selectDeptByDeptName(String deptName) {
        return deptMapper.selectDeptByDeptName(deptName);
    }
    /**
     * æŸ¥è¯¢éƒ¨é—¨æ ‘结构信息
     * 
src/main/java/com/ruoyi/project/system/service/impl/SysPostServiceImpl.java
@@ -1,6 +1,9 @@
package com.ruoyi.project.system.service.impl;
import java.util.Collections;
import java.util.List;
import com.ruoyi.framework.aspectj.lang.annotation.DataScope;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.common.constant.UserConstants;
@@ -32,6 +35,7 @@
     * @return å²—位信息集合
     */
    @Override
    @DataScope(tenantIdFelid = "p")
    public List<SysPost> selectPostList(SysPost post)
    {
        return postMapper.selectPostList(post);
@@ -175,4 +179,10 @@
    {
        return postMapper.updatePost(post);
    }
    @Override
    @DataScope(tenantIdFelid = "p")
    public List<SysPost> selectPostByTenantId(Long tenantId) {
        return postMapper.selectPostByTenantId(tenantId);
    }
}
src/main/java/com/ruoyi/project/system/service/impl/SysRoleServiceImpl.java
@@ -52,7 +52,7 @@
     * @return è§’色数据集合信息
     */
    @Override
    @DataScope(deptAlias = "d")
    @DataScope(tenantIdFelid = "r")
    public List<SysRole> selectRoleList(SysRole role)
    {
        return roleMapper.selectRoleList(role);
src/main/java/com/ruoyi/project/system/service/impl/SysUserServiceImpl.java
@@ -72,7 +72,7 @@
     * @return ç”¨æˆ·ä¿¡æ¯é›†åˆä¿¡æ¯
     */
    @Override
    @DataScope(deptAlias = "d", userAlias = "u")
    @DataScope(tenantIdFelid = "u")
    public List<SysUser> selectUserList(SysUser user)
    {
        return userMapper.selectUserList(user);
src/main/java/com/ruoyi/purchase/dto/TicketRegistrationDto.java
@@ -20,6 +20,8 @@
@Data
@TableName("ticket_registration")
public class TicketRegistrationDto extends TicketRegistration {
    @TableField(exist = false)
    private Long userId;
    /**
     * ä¸»é”®ID
src/main/java/com/ruoyi/purchase/service/impl/PaymentRegistrationServiceImpl.java
@@ -13,6 +13,7 @@
import com.ruoyi.basic.pojo.SupplierManage;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.framework.aspectj.lang.annotation.DataScope;
import com.ruoyi.framework.security.LoginUser;
import com.ruoyi.purchase.dto.PaymentHistoryRecordVo;
import com.ruoyi.purchase.dto.PaymentLedgerDto;
src/main/java/com/ruoyi/purchase/service/impl/ProductRecordServiceImpl.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.enums.FileNameType;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.purchase.dto.ProductRecordDto;
import com.ruoyi.purchase.dto.TicketRegistrationDto;
@@ -62,6 +63,8 @@
    @Override
    public IPage<ProductRecordDto> productRecordPage(Page page, TicketRegistrationDto ticketRegistrationDto) {
        Long userId = SecurityUtils.getUserId();
        ticketRegistrationDto.setUserId(userId);
        IPage<ProductRecordDto> productRecordDtoIPage1 = productRecordMapper.productRecordPage(page, ticketRegistrationDto);
        page.setSize(productRecordDtoIPage1.getTotal());
        IPage<ProductRecordDto> productRecordDtoIPage = productRecordMapper.productRecordPage(page, ticketRegistrationDto);
src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -578,6 +578,8 @@
    @Override
    public IPage<PurchaseLedgerDto> selectPurchaseLedgerListPage(IPage ipage, PurchaseLedgerDto purchaseLedger) {
        Long userId = SecurityUtils.getUserId();
        purchaseLedger.setRecorderId(userId);
        IPage<PurchaseLedgerDto> purchaseLedgerDtoIPage = purchaseLedgerMapper.selectPurchaseLedgerListPage(ipage, purchaseLedger);
        purchaseLedgerDtoIPage.getRecords().forEach(purchaseLedgerDto -> {
            List<CommonFile> commonFiles = commonFileMapper.selectList(new LambdaQueryWrapper<CommonFile>().eq(CommonFile::getCommonId, purchaseLedgerDto.getId()).eq(CommonFile::getType, FileNameType.PURCHASE.getValue()));
src/main/java/com/ruoyi/tide/controller/TideController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,126 @@
package com.ruoyi.tide.controller;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.framework.aspectj.lang.annotation.Anonymous;
import com.ruoyi.framework.security.service.SysLoginService;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.project.system.domain.SysDept;
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.service.ISysDeptService;
import com.ruoyi.project.system.service.ISysUserService;
import com.ruoyi.tide.pojo.TidePojo;
import com.ruoyi.tide.utils.TideUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.PreDestroy;
import javax.annotation.security.PermitAll;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@RequestMapping("/tide")
@RestController
@Api(tags = "对接浪潮系统")
@Anonymous
@Slf4j
public class TideController {
    @Autowired
    private SysLoginService loginService;
    @Autowired
    private ISysUserService userService;
    @Autowired
    private ISysDeptService deptService;
    @ApiOperation(value = "登录")
    @PostMapping("/tideLogin")
    public AjaxResult login(@RequestBody TidePojo tidePojo) {
        String token = TideUtils.getToken(tidePojo.getCode());
        JSONObject userInfo = TideUtils.getUserInfo(token);
        JSONObject tenant = JSONObject.parseObject(userInfo.get("tenant").toString());
        AjaxResult ajax = AjaxResult.success();
        // ç”Ÿæˆä»¤ç‰Œ
        String generateToken = loginService.login(tenant.get("tenantAccount").toString(), tenant.get("tenantPassword").toString(), null,
                IdWorker.get32UUID());
        ajax.put(Constants.TOKEN, generateToken);
        return ajax;
    }
    @PostMapping("/applicationOrdering")
    @Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED)
    public JSONObject order (@RequestBody TidePojo tidePojo) {
        SysUser user = userService.selectUserByUserName(tidePojo.getPltAccountLogin());
        String defaultPwd = "I73Kj+Mn$+SI";//默认开通密码固定写死
//        String randomString = TideUtils.getRandomString(12);
        //账号不存在,执行新增操作
        if(ObjectUtils.isEmpty(user)){
            //1.先新增用户对应的公司
            SysDept dept = new SysDept();
            dept.setParentId(100L);//父公司id
            dept.setDeptName(tidePojo.getEnterpriseName());
            dept.setDeptNick(tidePojo.getEnterpriseName());
            dept.setOrderNum(0);
            boolean deptNameUnique = deptService.checkDeptNameUnique(dept);
            if (deptNameUnique){
                deptService.insertDept(dept);
            }
            //查询公司
            SysDept newSysDept = deptService.selectDeptByDeptName(dept.getDeptName());
            dept.setDeptId(ObjectUtils.isEmpty(newSysDept)?100L:newSysDept.getDeptId());
            dept.setTenantId(dept.getDeptId());
            deptService.updateDept(dept);
            user = new SysUser();
            String password = SecurityUtils.encryptPassword(defaultPwd);
            user.setPassword(password);
            user.setUserName(tidePojo.getPltAccountLogin());
            user.setNickName(tidePojo.getEnterpriseName());
            user.setStatus("0");
            user.setDelFlag("0");
            user.setPostIds(new Long[]{1L});
            user.setRoleId(1L);
            user.setRoleIds(new Long[]{2L});//默认普通角色
            user.setDeptIds(new Long[]{dept.getDeptId()});//绑定公司
            user.setTenantId(dept.getDeptId());
            userService.insertUser(user);
        }
        Map<String, Object> map = new HashMap<>();
        map.put("account", tidePojo.getPltAccountLogin());
        map.put("token", defaultPwd);
        map.put("tenantId", user.getUserId());
        return TideUtils.getResult(20000, "成功", map);
    }
    @PostMapping("/cancellation")
    public JSONObject cancellation (@RequestBody TidePojo tidePojo) {
        log.info("执行了注销信息:" + tidePojo);
        if(Objects.nonNull(tidePojo)){
            SysUser sysUser = userService.selectUserByUserName(tidePojo.getPltAccountLogin());
            if(Objects.nonNull(sysUser)){
                userService.deleteUserById(sysUser.getUserId());
            }
        }
        return TideUtils.getResult(20000, "成功", null);
    }
    public static void main(String[] args) {
        String password = SecurityUtils.encryptPassword("c($Rb_@!n%U7");
        System.out.println(password);
    }
}
src/main/java/com/ruoyi/tide/pojo/TidePojo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
package com.ruoyi.tide.pojo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class TidePojo {
    @ApiModelProperty("企业名称")
    private String enterpriseName;
    @ApiModelProperty("平台用户")
    private String pltUserCn;
    @ApiModelProperty("平台账号")
    private String pltAccountLogin;
    @ApiModelProperty("订购时长")
    private Integer purchaseDuration;
    @ApiModelProperty("订单时长单位")
    private String purchaseUnit;
    @ApiModelProperty("appKey")
    private String appKey;
    @ApiModelProperty("appSecret")
    private String appSecret;
    @ApiModelProperty("code")
    private String code;
}
src/main/java/com/ruoyi/tide/utils/TideUtils.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,191 @@
package com.ruoyi.tide.utils;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.crypto.digest.HMac;
import cn.hutool.crypto.digest.HmacAlgorithm;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.HashMap;
@Data
@Component
@Slf4j
public class TideUtils {
    public static String APP_ID;
    public static String APP_SECRET;
    @Value("${inspur.appId}")
    private String appId;
    @Value("${inspur.appSecret}")
    private String appSecret;
    @Value("${inspur.appId}")
    public void setAppId(String appId) {
        TideUtils.APP_ID = appId;
    }
    @Value("${inspur.appSecret}")
    public void setAppSecret(String appSecret) {
        TideUtils.APP_SECRET = appSecret;
    }
    // å†…网地址
    private final static String ip = "http://10.136.0.8:8083";
    // MD5加密并转换为16进制
    public static String md5Encryption(String input) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] digest = md.digest(input.getBytes());
            StringBuilder sb = new StringBuilder();
            for (byte b : digest) {
                sb.append(String.format("%02x", b & 0xff));
            }
            return sb.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return null;
        }
    }
    // get请求
    public static HashMap<String, String> getGetHeader(String parameter) {
        // æ—¶é—´æˆ³
        String xTime = String.valueOf(DateUtil.current());
        // èŽ·å–éšæœº16位字符串
        String xRandom = RandomUtil.randomString(16);
        String xSignSplicingTogether;
        // æœ‰å‚æ•°
        if (ObjectUtils.isNotEmpty(parameter)) {
            // åŠ å¯†å¾—å‡ºx-body
            String xBody = md5Encryption(parameter);
            // ä¸ºx-sign加密做拼接
            xSignSplicingTogether = "x-body=" + xBody + "&x-random=" + xRandom + "&x-time=" + xTime;
        // æ— å‚æ•°
        } else {
            xSignSplicingTogether = "x-random=" + xRandom + "&x-time=" + xTime;
        }
        // é…ç½®åŠ å¯†æ–¹å¼ä¸Žå¯†é’¥
        HMac hMac = new HMac(HmacAlgorithm.HmacSHA256, APP_SECRET.getBytes());
        // å¾—出x-sign
        String xSign = hMac.digestHex(xSignSplicingTogether);
        HashMap<String, String> result = new HashMap<>();
        result.put("x-time", xTime);
        result.put("x-random", xRandom);
        result.put("x-sign", xSign);
        result.put("appKey", APP_ID);
        return result;
    }
    // post请求
    public static HashMap<String, String> getPostHeader(String parameter) {
        // æ—¶é—´æˆ³
        String xTime = String.valueOf(DateUtil.current());
        // èŽ·å–éšæœº16位字符串
        String xRandom = RandomUtil.randomString(16);
        String xSignSplicingTogether;
        // æœ‰å‚æ•°
        if (ObjectUtils.isNotEmpty(parameter)) {
            // åŠ å¯†å¾—å‡ºx-body
            String xBody = md5Encryption(parameter);
            // ä¸ºx-sign加密做拼接
            xSignSplicingTogether = "x-body=" + xBody + "&x-random=" + xRandom + "&x-time=" + xTime;
            // æ— å‚æ•°
        } else {
            xSignSplicingTogether = "x-random=" + xRandom + "&x-time=" + xTime;
        }
        // x-sign åР坆
        HMac hMac = new HMac(HmacAlgorithm.HmacSHA256, APP_SECRET.getBytes());
        String xSign = hMac.digestHex(xSignSplicingTogether);
        HashMap<String, String> result = new HashMap<>();
        result.put("x-time", xTime);
        result.put("x-random", xRandom);
        result.put("x-sign", xSign);
        result.put("appKey", APP_ID);
        return result;
    }
    /**
     * äº”分钟一次的心跳
     */
    @Scheduled(cron = "0 0/5 * * * ?")
    public static void heartbeat(){
        HashMap<String, String> header = getGetHeader(null);
        String url = ip + "/cpn/api/extra/v1/application/heartbeat";
        String body = HttpRequest.get(url).headerMap(header, false).execute().body();
        System.out.println(body + "应用心跳执行成功!");
    }
    // èŽ·å–token
    public static String getToken(String code) {
        String url = ip + "/cpn/extral/applicationCode/appAuthCheck";
        JSONObject json = new JSONObject();
        json.put("code", code);
        json.put("appID", APP_ID);
        json.put("appSecret", APP_SECRET);
        HashMap<String, String> header = getPostHeader(json.toString());
        String body = HttpRequest.post(url)
                .headerMap(header, false)
                .body(json.toString())
                .execute().body();
        JSONObject jsonObject = JSONObject.parseObject(body);
        return jsonObject.get("data").toString();
    }
    // èŽ·å–ç”¨æˆ·ä¿¡æ¯
    public static JSONObject getUserInfo(String token) {
        String url = ip + "/cpn/api/extral/applicationCode/getUserInfoByToken";
        JSONObject json = new JSONObject();
        json.put("appID", APP_ID);
        HashMap<String, String> header = getPostHeader(json.toString());
        header.put("Authorization", token);
        String body = HttpRequest.post(url)
                .headerMap(header, false)
                .body(json.toString())
                .execute().body();
        JSONObject jsonObject = JSONObject.parseObject(body);
        return JSONObject.parseObject(jsonObject.get("data").toString());
    }
    public static JSONObject getResult(Integer code, String msg, Object data) {
        JSONObject json = new JSONObject();
        json.put("code", code);
        json.put("msg", msg);
        json.put("data", data);
        String xRandom = RandomUtil.randomString(16);
        json.put("traceId", xRandom);
        return json;
    }
    public static String getRandomString(int length) {
        SecureRandom random = new SecureRandom();
        String uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        String lowercaseLetters = "abcdefghijklmnopqrstuvwxyz";
        String numbers = "0123456789";
        String specialCharacters = "!@$%^&*()_+-=.";
        String characterSet = uppercaseLetters + lowercaseLetters + numbers + specialCharacters;
        StringBuilder passwordBuilder = new StringBuilder();
        for (int i = 0; i < length; i++) {
            int randomIndex = random.nextInt(characterSet.length());
            char randomChar = characterSet.charAt(randomIndex);
            passwordBuilder.append(randomChar);
        }
        return passwordBuilder.toString();
    }
}
src/main/java/com/ruoyi/vehicleInformationCollectionReview/controller/VehicleInformationCollectionController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,51 @@
package com.ruoyi.vehicleInformationCollectionReview.controller;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.vehicleInformationCollectionReview.dto.VehicleInformationCollectionReviewDTO;
import com.ruoyi.vehicleInformationCollectionReview.pojo.VehicleInformationCollectionReview;
import com.ruoyi.vehicleInformationCollectionReview.service.VehicleInformationCollectionReviewService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Slf4j
@RestController
@RequestMapping("/environmentAccess")
public class VehicleInformationCollectionController {
    @Autowired
    private VehicleInformationCollectionReviewService vehicleInformationCollectionReviewService;
    // æŸ¥è¯¢è½¦è¾†ä¿¡æ¯åˆ†é¡µåˆ—表
    @GetMapping("/vehicleInfoPage")
    public AjaxResult vehicleInfoPage(Page page, VehicleInformationCollectionReview vehicleInformationCollectionReview){
        return AjaxResult.success(vehicleInformationCollectionReviewService.listPage(page,vehicleInformationCollectionReview));
    }
    // æ–°å¢žè½¦è¾†ä¿¡æ¯
    @PostMapping("/vehicleInfoAdd")
    public AjaxResult vehicleInfoAdd(@RequestBody VehicleInformationCollectionReview vehicleInformationCollectionReview){
        return AjaxResult.success(vehicleInformationCollectionReviewService.insert(vehicleInformationCollectionReview));
    }
    // ä¿®æ”¹è½¦è¾†ä¿¡æ¯
    @PutMapping("/vehicleInfoUpdate")
    public AjaxResult updateRecord(VehicleInformationCollectionReview vehicleInformationCollectionReview){
        return AjaxResult.success(vehicleInformationCollectionReviewService.updateById(vehicleInformationCollectionReview));
    }
    // åˆ é™¤è½¦è¾†ä¿¡æ¯ï¼ˆæ”¯æŒæ‰¹é‡ï¼‰
    @DeleteMapping("/vehicleInfoDelete")
    public AjaxResult removeRecords(@RequestBody List<Long> ids){
        return AjaxResult.success(vehicleInformationCollectionReviewService.removeBatchByIds(ids));
    }
    // å®¡æ ¸è½¦è¾†ä¿¡æ¯
    @PostMapping("/vehicleInfoReview")
    public AjaxResult vehicleInfoReview(@RequestBody VehicleInformationCollectionReviewDTO vehicleInformationCollectionReviewDTO){
        return AjaxResult.success(vehicleInformationCollectionReviewService.update(Wrappers.<VehicleInformationCollectionReview>lambdaUpdate()
                .set(VehicleInformationCollectionReview::getReviewStatus,vehicleInformationCollectionReviewDTO.getReviewStatus())
                .eq(VehicleInformationCollectionReview::getId,vehicleInformationCollectionReviewDTO.getId())));
    }
}
src/main/java/com/ruoyi/vehicleInformationCollectionReview/dto/VehicleInformationCollectionReviewDTO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
package com.ruoyi.vehicleInformationCollectionReview.dto;
import com.ruoyi.vehicleInformationCollectionReview.pojo.VehicleInformationCollectionReview;
import lombok.Data;
@Data
public class VehicleInformationCollectionReviewDTO extends VehicleInformationCollectionReview {
}
src/main/java/com/ruoyi/vehicleInformationCollectionReview/mapper/VehicleInformationCollectionReviewMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.vehicleInformationCollectionReview.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.vehicleInformationCollectionReview.pojo.VehicleInformationCollectionReview;
import org.apache.ibatis.annotations.Mapper;
/**
* @author 27233
* @description é’ˆå¯¹è¡¨ã€vehicle_information_collection_review】的数据库操作Mapper
* @createDate 2026-01-06 19:50:48
* @Entity com.ruoyi.pojo.VehicleInformationCollectionReview
*/
@Mapper
public interface VehicleInformationCollectionReviewMapper extends BaseMapper<VehicleInformationCollectionReview> {
}
src/main/java/com/ruoyi/vehicleInformationCollectionReview/pojo/VehicleInformationCollectionReview.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,116 @@
package com.ruoyi.vehicleInformationCollectionReview.pojo;
import com.baomidou.mybatisplus.annotation.*;
import java.time.LocalDateTime;
import java.util.Date;
import lombok.Data;
/**
 *
 * @TableName vehicle_information_collection_review
 */
@TableName(value ="vehicle_information_collection_review")
@Data
public class VehicleInformationCollectionReview {
    /**
     * ä¸»é”®id
     */
    @TableId(type = IdType.AUTO)
    private Long id;
    /**
     * è½¦ç‰Œå·ç 
     */
    private String plateNo;
    /**
     * å·ç‰Œé¢œè‰²
     */
    private String plateColor;
    /**
     * è½¦è¾†ç±»åž‹
     */
    private String carType;
    /**
     * è½¦è¾†è¯†åˆ«ä»£ç ((vin)
     */
    private String carVin;
    /**
     * è½¦è¾†åž‹å·
     */
    private String carModel;
    /**
     * å‘动机型号
     */
    private String engineModel;
    /**
     * å‘动机生产厂
     */
    private String engineProductFactory;
    /**
     * å‘动机编号
     */
    private String engineNo;
    /**
     * æŽ’放标准
     */
    private String emissionStandard;
    /**
     * æ³¨å†Œç™»è®°æ—¶é—´
     */
    private Date registeDate;
    /**
     * ä½¿ç”¨æ€§è´¨
     */
    private String natureOfUse;
    /**
     * ç‡ƒæ²¹ç±»åž‹
     */
    private String fuelType;
    /**
     * å®¡æ ¸çŠ¶æ€
     */
    private String reviewStatus;
    /**
     * ç§Ÿæˆ·id
     */
    @TableField(fill = FieldFill.INSERT)
    private Long tenantId;
    /**
     * åˆ›å»ºäºº
     */
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    /**
     * åˆ›å»ºæ—¶é—´
     */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    /**
     * æ›´æ–°äºº
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    /**
     * æ›´æ–°æ—¶é—´
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
src/main/java/com/ruoyi/vehicleInformationCollectionReview/service/VehicleInformationCollectionReviewService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.ruoyi.vehicleInformationCollectionReview.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.ruoyi.vehicleInformationCollectionReview.pojo.VehicleInformationCollectionReview;
/**
* @author 27233
* @description é’ˆå¯¹è¡¨ã€vehicle_information_collection_review】的数据库操作Service
* @createDate 2026-01-06 19:50:48
*/
public interface VehicleInformationCollectionReviewService extends IService<VehicleInformationCollectionReview> {
    IPage<VehicleInformationCollectionReview> listPage(Page page, VehicleInformationCollectionReview vehicleInformationCollectionReview);
    long insert(VehicleInformationCollectionReview vehicleInformationCollectionReview);
}
src/main/java/com/ruoyi/vehicleInformationCollectionReview/service/impl/VehicleInformationCollectionReviewServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
package com.ruoyi.vehicleInformationCollectionReview.service.impl;
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.ruoyi.common.QueryWrappers;
import com.ruoyi.vehicleInformationCollectionReview.mapper.VehicleInformationCollectionReviewMapper;
import com.ruoyi.vehicleInformationCollectionReview.pojo.VehicleInformationCollectionReview;
import com.ruoyi.vehicleInformationCollectionReview.service.VehicleInformationCollectionReviewService;
import org.springframework.stereotype.Service;
/**
* @author 27233
* @description é’ˆå¯¹è¡¨ã€vehicle_information_collection_review】的数据库操作Service实现
* @createDate 2026-01-06 19:50:48
*/
@Service
public class VehicleInformationCollectionReviewServiceImpl extends ServiceImpl<VehicleInformationCollectionReviewMapper, VehicleInformationCollectionReview>
    implements VehicleInformationCollectionReviewService{
    @Override
    public IPage<VehicleInformationCollectionReview> listPage(Page page, VehicleInformationCollectionReview vehicleInformationCollectionReview) {
        return baseMapper.selectPage(page, QueryWrappers.queryWrappers(vehicleInformationCollectionReview));
    }
    @Override
    public long insert(VehicleInformationCollectionReview vehicleInformationCollectionReview) {
        return baseMapper.insert(vehicleInformationCollectionReview);
    }
}
src/main/resources/application-bdsm.yml
ÎļþÒÑɾ³ý
src/main/resources/application-bhmy.yml
ÎļþÒÑɾ³ý
src/main/resources/application-ccwlxt.yml
copy from src/main/resources/application-dhdc.yml copy to src/main/resources/application-ccwlxt.yml
Îļþ´Ó src/main/resources/application-dhdc.yml ¸´ÖÆ
@@ -1,4 +1,7 @@
# é¡¹ç›®ç›¸å…³é…ç½®
# èН坼-仓储物流系统项目相关配置
inspur:
  appId: 1205971611543404544
  appSecret: VkyDMDYwMTIwMjYxNzQxNDM2OTItrv
ruoyi:
  # åç§°
  name: RuoYi
@@ -7,7 +10,7 @@
  # ç‰ˆæƒå¹´ä»½
  copyrightYear: 2025
  # æ–‡ä»¶è·¯å¾„ ç¤ºä¾‹ï¼ˆ Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
  profile: /javaWork/product-inventory-management/file
  profile: /center-lims/mis/file
  # èŽ·å–ip地址开关
  addressEnabled: false
@@ -17,7 +20,7 @@
# å¼€å‘环境配置
server:
  # æœåŠ¡å™¨çš„HTTP端口,默认为8080
  port: 9032
  port: 7003
  servlet:
    # åº”用的访问路径
    context-path: /
@@ -62,9 +65,9 @@
    druid:
      # ä¸»åº“数据源
      master:
        url: jdbc:mysql://192.168.1.8:3306/product-inventory-management-dhdc?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        url: jdbc:mysql://172.17.0.1:3306/mis-ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        username: root
        password: 123456
        password: zttZTT123!
      # ä»Žåº“数据源
      slave:
        # ä»Žæ•°æ®æºå¼€å…³/默认关闭
@@ -135,14 +138,14 @@
  redis:
    # åœ°å€
#    host: 127.0.0.1
    host: 192.168.1.8
    host: 172.17.0.1
    # ç«¯å£ï¼Œé»˜è®¤ä¸º6379
    port: 6379
    # æ•°æ®åº“索引
    database: 1
    database: 0
    # å¯†ç 
#    password: root2022!
    password:
    password: zttZTT123!
#    password: 123456
    # è¿žæŽ¥è¶…æ—¶æ—¶é—´
    timeout: 10s
@@ -188,7 +191,7 @@
# Swagger配置
swagger:
  # æ˜¯å¦å¼€å¯swagger
  enabled: true
  enabled: false
  # è¯·æ±‚前缀
  pathMapping: /dev-api
@@ -215,5 +218,5 @@
  allowOverwrite: false
file:
  temp-dir: /javaWork/product-inventory-management/file/temp/uploads
  upload-dir: /javaWork/product-inventory-management/file/prod/uploads
  temp-dir: /center-lims/mis/file/temp/uploads
  upload-dir: /center-lims/mis/file/prod/uploads
src/main/resources/application-cgglxt.yml
ÎļþÃû´Ó src/main/resources/application-prod.yml ÐÞ¸Ä
@@ -1,4 +1,7 @@
# é¡¹ç›®ç›¸å…³é…ç½®
# èН坼-采购管理系统项目相关配置
inspur:
  appId: 1205971212673482752
  appSecret: d9R2MDYwMTIwMjYxNzQwMDg1OTU4Du
ruoyi:
  # åç§°
  name: RuoYi
@@ -7,7 +10,7 @@
  # ç‰ˆæƒå¹´ä»½
  copyrightYear: 2025
  # æ–‡ä»¶è·¯å¾„ ç¤ºä¾‹ï¼ˆ Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
  profile: /javaWork/product-inventory-management/file
  profile: /center-lims/mis/file
  # èŽ·å–ip地址开关
  addressEnabled: false
@@ -62,9 +65,9 @@
    druid:
      # ä¸»åº“数据源
      master:
        url: jdbc:mysql://114.132.189.42:9004/product-inventory-management?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        url: jdbc:mysql://127.0.0.1:3306/mis-ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        username: root
        password: 123456
        password: zttZTT123!
      # ä»Žåº“数据源
      slave:
        # ä»Žæ•°æ®æºå¼€å…³/默认关闭
@@ -135,15 +138,14 @@
  redis:
    # åœ°å€
    host: 127.0.0.1
#    host: localhost
#    host: 172.17.0.1
    # ç«¯å£ï¼Œé»˜è®¤ä¸º6379
    port: 6379
    # æ•°æ®åº“索引
    database: 0
    # å¯†ç 
    password: root2022!
#    password:
    password: zttZTT123!
#    password: 123456
    # è¿žæŽ¥è¶…æ—¶æ—¶é—´
    timeout: 10s
@@ -216,5 +218,5 @@
  allowOverwrite: false
file:
  temp-dir: /javaWork/product-inventory-management/file/temp/uploads
  upload-dir: /javaWork/product-inventory-management/file/prod/uploads
  temp-dir: /center-lims/mis/file/temp/uploads
  upload-dir: /center-lims/mis/file/prod/uploads
src/main/resources/application-cjny.yml
ÎļþÒÑɾ³ý
src/main/resources/application-cmny.yml
ÎļþÒÑɾ³ý
src/main/resources/application-cwglxt.yml
copy from src/main/resources/application-prod.yml copy to src/main/resources/application-cwglxt.yml
Îļþ´Ó src/main/resources/application-prod.yml ¸´ÖÆ
@@ -1,4 +1,7 @@
# é¡¹ç›®ç›¸å…³é…ç½®
# èН坼-财务管理系统项目相关配置
inspur:
  appId: 1205964626886393856
  appSecret: 2kxXMDYwMTIwMjYxNzEzNTg0MjE91C
ruoyi:
  # åç§°
  name: RuoYi
@@ -7,7 +10,7 @@
  # ç‰ˆæƒå¹´ä»½
  copyrightYear: 2025
  # æ–‡ä»¶è·¯å¾„ ç¤ºä¾‹ï¼ˆ Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
  profile: /javaWork/product-inventory-management/file
  profile: /center-lims/mis/file
  # èŽ·å–ip地址开关
  addressEnabled: false
@@ -62,9 +65,9 @@
    druid:
      # ä¸»åº“数据源
      master:
        url: jdbc:mysql://114.132.189.42:9004/product-inventory-management?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        url: jdbc:mysql://127.0.0.1:3306/mis-ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        username: root
        password: 123456
        password: zttZTT123!
      # ä»Žåº“数据源
      slave:
        # ä»Žæ•°æ®æºå¼€å…³/默认关闭
@@ -135,15 +138,14 @@
  redis:
    # åœ°å€
    host: 127.0.0.1
#    host: localhost
#    host: 172.17.0.1
    # ç«¯å£ï¼Œé»˜è®¤ä¸º6379
    port: 6379
    # æ•°æ®åº“索引
    database: 0
    # å¯†ç 
    password: root2022!
#    password:
    password: zttZTT123!
#    password: 123456
    # è¿žæŽ¥è¶…æ—¶æ—¶é—´
    timeout: 10s
@@ -216,5 +218,5 @@
  allowOverwrite: false
file:
  temp-dir: /javaWork/product-inventory-management/file/temp/uploads
  upload-dir: /javaWork/product-inventory-management/file/prod/uploads
  temp-dir: /center-lims/mis/file/temp/uploads
  upload-dir: /center-lims/mis/file/prod/uploads
src/main/resources/application-demo.yml
ÎļþÒÑɾ³ý
src/main/resources/application-dev.yml
ÎļþÒÑɾ³ý
src/main/resources/application-druid.yml
ÎļþÒÑɾ³ý
src/main/resources/application-hbkj.yml
ÎļþÒÑɾ³ý
src/main/resources/application-hbmjxt.yml
copy from src/main/resources/application-prod.yml copy to src/main/resources/application-hbmjxt.yml
Îļþ´Ó src/main/resources/application-prod.yml ¸´ÖÆ
@@ -1,4 +1,7 @@
# é¡¹ç›®ç›¸å…³é…ç½®
# èН坼-环保门禁系统项目相关配置
inspur:
  appId: 1205972857687900160
  appSecret: MgzPMDYwMTIwMjYxNzQ2NDA3OTYGqt
ruoyi:
  # åç§°
  name: RuoYi
@@ -7,7 +10,7 @@
  # ç‰ˆæƒå¹´ä»½
  copyrightYear: 2025
  # æ–‡ä»¶è·¯å¾„ ç¤ºä¾‹ï¼ˆ Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
  profile: /javaWork/product-inventory-management/file
  profile: /center-lims/mis/file
  # èŽ·å–ip地址开关
  addressEnabled: false
@@ -62,9 +65,9 @@
    druid:
      # ä¸»åº“数据源
      master:
        url: jdbc:mysql://114.132.189.42:9004/product-inventory-management?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        url: jdbc:mysql://127.0.0.1:3306/mis-ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        username: root
        password: 123456
        password: zttZTT123!
      # ä»Žåº“数据源
      slave:
        # ä»Žæ•°æ®æºå¼€å…³/默认关闭
@@ -135,15 +138,14 @@
  redis:
    # åœ°å€
    host: 127.0.0.1
#    host: localhost
#    host: 172.17.0.1
    # ç«¯å£ï¼Œé»˜è®¤ä¸º6379
    port: 6379
    # æ•°æ®åº“索引
    database: 0
    # å¯†ç 
    password: root2022!
#    password:
    password: zttZTT123!
#    password: 123456
    # è¿žæŽ¥è¶…æ—¶æ—¶é—´
    timeout: 10s
@@ -216,5 +218,5 @@
  allowOverwrite: false
file:
  temp-dir: /javaWork/product-inventory-management/file/temp/uploads
  upload-dir: /javaWork/product-inventory-management/file/prod/uploads
  temp-dir: /center-lims/mis/file/temp/uploads
  upload-dir: /center-lims/mis/file/prod/uploads
src/main/resources/application-hbxm.yml
ÎļþÒÑɾ³ý
src/main/resources/application-hckx.yml
ÎļþÒÑɾ³ý
src/main/resources/application-hcmy.yml
ÎļþÒÑɾ³ý
src/main/resources/application-hhkj.yml
ÎļþÒÑɾ³ý
src/main/resources/application-hsmy.yml
ÎļþÒÑɾ³ý
src/main/resources/application-hsxny.yml
ÎļþÒÑɾ³ý
src/main/resources/application-hxgy.yml
ÎļþÒÑɾ³ý
src/main/resources/application-hxsj.yml
ÎļþÒÑɾ³ý
src/main/resources/application-hysn.yml
ÎļþÒÑɾ³ý
src/main/resources/application-jjxm.yml
ÎļþÒÑɾ³ý
src/main/resources/application-jlsn.yml
ÎļþÒÑɾ³ý
src/main/resources/application-jsmy.yml
ÎļþÒÑɾ³ý
src/main/resources/application-jsyny.yml
ÎļþÒÑɾ³ý
src/main/resources/application-jyhj.yml
ÎļþÒÑɾ³ý
src/main/resources/application-mkzs.yml
ÎļþÒÑɾ³ý
src/main/resources/application-mqsp.yml
ÎļþÒÑɾ³ý
src/main/resources/application-mxsc.yml
ÎļþÒÑɾ³ý
src/main/resources/application-nydl.yml
ÎļþÒÑɾ³ý
src/main/resources/application-phmk.yml
ÎļþÒÑɾ³ý
src/main/resources/application-qlmc.yml
ÎļþÒÑɾ³ý
src/main/resources/application-rlzyxt.yml
copy from src/main/resources/application-dhdc.yml copy to src/main/resources/application-rlzyxt.yml
Îļþ´Ó src/main/resources/application-dhdc.yml ¸´ÖÆ
@@ -1,4 +1,7 @@
# é¡¹ç›®ç›¸å…³é…ç½®
# èН坼-人力资源系统项目相关配置
inspur:
  appId: 1205972506809204736
  appSecret: 4g5AMDYwMTIwMjYxNzQ1MTcxNDE35h
ruoyi:
  # åç§°
  name: RuoYi
@@ -7,7 +10,7 @@
  # ç‰ˆæƒå¹´ä»½
  copyrightYear: 2025
  # æ–‡ä»¶è·¯å¾„ ç¤ºä¾‹ï¼ˆ Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
  profile: /javaWork/product-inventory-management/file
  profile: /center-lims/mis/file
  # èŽ·å–ip地址开关
  addressEnabled: false
@@ -17,7 +20,7 @@
# å¼€å‘环境配置
server:
  # æœåŠ¡å™¨çš„HTTP端口,默认为8080
  port: 9032
  port: 7003
  servlet:
    # åº”用的访问路径
    context-path: /
@@ -62,9 +65,9 @@
    druid:
      # ä¸»åº“数据源
      master:
        url: jdbc:mysql://192.168.1.8:3306/product-inventory-management-dhdc?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        url: jdbc:mysql://172.17.0.1:3306/mis-ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        username: root
        password: 123456
        password: zttZTT123!
      # ä»Žåº“数据源
      slave:
        # ä»Žæ•°æ®æºå¼€å…³/默认关闭
@@ -135,14 +138,14 @@
  redis:
    # åœ°å€
#    host: 127.0.0.1
    host: 192.168.1.8
    host: 172.17.0.1
    # ç«¯å£ï¼Œé»˜è®¤ä¸º6379
    port: 6379
    # æ•°æ®åº“索引
    database: 1
    database: 0
    # å¯†ç 
#    password: root2022!
    password:
    password: zttZTT123!
#    password: 123456
    # è¿žæŽ¥è¶…æ—¶æ—¶é—´
    timeout: 10s
@@ -188,7 +191,7 @@
# Swagger配置
swagger:
  # æ˜¯å¦å¼€å¯swagger
  enabled: true
  enabled: false
  # è¯·æ±‚前缀
  pathMapping: /dev-api
@@ -215,5 +218,5 @@
  allowOverwrite: false
file:
  temp-dir: /javaWork/product-inventory-management/file/temp/uploads
  upload-dir: /javaWork/product-inventory-management/file/prod/uploads
  temp-dir: /center-lims/mis/file/temp/uploads
  upload-dir: /center-lims/mis/file/prod/uploads
src/main/resources/application-rzny.yml
ÎļþÒÑɾ³ý
src/main/resources/application-sbglxt.yml
copy from src/main/resources/application-prod.yml copy to src/main/resources/application-sbglxt.yml
Îļþ´Ó src/main/resources/application-prod.yml ¸´ÖÆ
@@ -1,4 +1,7 @@
# é¡¹ç›®ç›¸å…³é…ç½®
# èН坼-设备管理系统项目相关配置
inspur:
  appId: 1205969741508771840
  appSecret: rnAvMDYwMTIwMjYxNzM0MTc4NDEIxC
ruoyi:
  # åç§°
  name: RuoYi
@@ -7,7 +10,7 @@
  # ç‰ˆæƒå¹´ä»½
  copyrightYear: 2025
  # æ–‡ä»¶è·¯å¾„ ç¤ºä¾‹ï¼ˆ Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
  profile: /javaWork/product-inventory-management/file
  profile: /center-lims/mis/file
  # èŽ·å–ip地址开关
  addressEnabled: false
@@ -62,9 +65,9 @@
    druid:
      # ä¸»åº“数据源
      master:
        url: jdbc:mysql://114.132.189.42:9004/product-inventory-management?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        url: jdbc:mysql://127.0.0.1:3306/mis-ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        username: root
        password: 123456
        password: zttZTT123!
      # ä»Žåº“数据源
      slave:
        # ä»Žæ•°æ®æºå¼€å…³/默认关闭
@@ -135,15 +138,14 @@
  redis:
    # åœ°å€
    host: 127.0.0.1
#    host: localhost
#    host: 172.17.0.1
    # ç«¯å£ï¼Œé»˜è®¤ä¸º6379
    port: 6379
    # æ•°æ®åº“索引
    database: 0
    # å¯†ç 
    password: root2022!
#    password:
    password: zttZTT123!
#    password: 123456
    # è¿žæŽ¥è¶…æ—¶æ—¶é—´
    timeout: 10s
@@ -216,5 +218,5 @@
  allowOverwrite: false
file:
  temp-dir: /javaWork/product-inventory-management/file/temp/uploads
  upload-dir: /javaWork/product-inventory-management/file/prod/uploads
  temp-dir: /center-lims/mis/file/temp/uploads
  upload-dir: /center-lims/mis/file/prod/uploads
src/main/resources/application-scgkxt.yml
copy from src/main/resources/application-prod.yml copy to src/main/resources/application-scgkxt.yml
Îļþ´Ó src/main/resources/application-prod.yml ¸´ÖÆ
@@ -1,4 +1,7 @@
# é¡¹ç›®ç›¸å…³é…ç½®
# èН坼-生产管控系统项目相关配置
inspur:
  appId: 1205970458172719104
  appSecret: GFHKMDYwMTIwMjYxNzM3MDg3MDc0g1
ruoyi:
  # åç§°
  name: RuoYi
@@ -7,7 +10,7 @@
  # ç‰ˆæƒå¹´ä»½
  copyrightYear: 2025
  # æ–‡ä»¶è·¯å¾„ ç¤ºä¾‹ï¼ˆ Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
  profile: /javaWork/product-inventory-management/file
  profile: /center-lims/mis/file
  # èŽ·å–ip地址开关
  addressEnabled: false
@@ -62,9 +65,9 @@
    druid:
      # ä¸»åº“数据源
      master:
        url: jdbc:mysql://114.132.189.42:9004/product-inventory-management?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        url: jdbc:mysql://127.0.0.1:3306/mis-ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        username: root
        password: 123456
        password: zttZTT123!
      # ä»Žåº“数据源
      slave:
        # ä»Žæ•°æ®æºå¼€å…³/默认关闭
@@ -135,15 +138,14 @@
  redis:
    # åœ°å€
    host: 127.0.0.1
#    host: localhost
#    host: 172.17.0.1
    # ç«¯å£ï¼Œé»˜è®¤ä¸º6379
    port: 6379
    # æ•°æ®åº“索引
    database: 0
    # å¯†ç 
    password: root2022!
#    password:
    password: zttZTT123!
#    password: 123456
    # è¿žæŽ¥è¶…æ—¶æ—¶é—´
    timeout: 10s
@@ -216,5 +218,5 @@
  allowOverwrite: false
file:
  temp-dir: /javaWork/product-inventory-management/file/temp/uploads
  upload-dir: /javaWork/product-inventory-management/file/prod/uploads
  temp-dir: /center-lims/mis/file/temp/uploads
  upload-dir: /center-lims/mis/file/prod/uploads
src/main/resources/application-tjxm.yml
ÎļþÒÑɾ³ý
src/main/resources/application-tymk.yml
ÎļþÒÑɾ³ý
src/main/resources/application-wdsy.yml
ÎļþÒÑɾ³ý
src/main/resources/application-xtbgxt.yml
copy from src/main/resources/application-prod.yml copy to src/main/resources/application-xtbgxt.yml
Îļþ´Ó src/main/resources/application-prod.yml ¸´ÖÆ
@@ -1,4 +1,7 @@
# é¡¹ç›®ç›¸å…³é…ç½®
# èН坼-协同办公系统项目相关配置
inspur:
  appId: 1205970862683979776
  appSecret: 9UR1MDYwMTIwMjYxNzM4NDUxNTARkN
ruoyi:
  # åç§°
  name: RuoYi
@@ -7,7 +10,7 @@
  # ç‰ˆæƒå¹´ä»½
  copyrightYear: 2025
  # æ–‡ä»¶è·¯å¾„ ç¤ºä¾‹ï¼ˆ Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
  profile: /javaWork/product-inventory-management/file
  profile: /center-lims/mis/file
  # èŽ·å–ip地址开关
  addressEnabled: false
@@ -62,9 +65,9 @@
    druid:
      # ä¸»åº“数据源
      master:
        url: jdbc:mysql://114.132.189.42:9004/product-inventory-management?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        url: jdbc:mysql://127.0.0.1:3306/mis-ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        username: root
        password: 123456
        password: zttZTT123!
      # ä»Žåº“数据源
      slave:
        # ä»Žæ•°æ®æºå¼€å…³/默认关闭
@@ -135,15 +138,14 @@
  redis:
    # åœ°å€
    host: 127.0.0.1
#    host: localhost
#    host: 172.17.0.1
    # ç«¯å£ï¼Œé»˜è®¤ä¸º6379
    port: 6379
    # æ•°æ®åº“索引
    database: 0
    # å¯†ç 
    password: root2022!
#    password:
    password: zttZTT123!
#    password: 123456
    # è¿žæŽ¥è¶…æ—¶æ—¶é—´
    timeout: 10s
@@ -216,5 +218,5 @@
  allowOverwrite: false
file:
  temp-dir: /javaWork/product-inventory-management/file/temp/uploads
  upload-dir: /javaWork/product-inventory-management/file/prod/uploads
  temp-dir: /center-lims/mis/file/temp/uploads
  upload-dir: /center-lims/mis/file/prod/uploads
src/main/resources/application-xyhb.yml
ÎļþÒÑɾ³ý
src/main/resources/application-yxglxt.yml
ÎļþÃû´Ó src/main/resources/application-dhdc.yml ÐÞ¸Ä
@@ -1,4 +1,7 @@
# é¡¹ç›®ç›¸å…³é…ç½®
# èН坼-营销管理系统项目相关配置
inspur:
  appId: 1205972006802030592
  appSecret: BgpqMDYwMTIwMjYxNzQzMTc5MjkKou
ruoyi:
  # åç§°
  name: RuoYi
@@ -7,7 +10,7 @@
  # ç‰ˆæƒå¹´ä»½
  copyrightYear: 2025
  # æ–‡ä»¶è·¯å¾„ ç¤ºä¾‹ï¼ˆ Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
  profile: /javaWork/product-inventory-management/file
  profile: /center-lims/mis/file
  # èŽ·å–ip地址开关
  addressEnabled: false
@@ -17,7 +20,7 @@
# å¼€å‘环境配置
server:
  # æœåŠ¡å™¨çš„HTTP端口,默认为8080
  port: 9032
  port: 7003
  servlet:
    # åº”用的访问路径
    context-path: /
@@ -62,9 +65,9 @@
    druid:
      # ä¸»åº“数据源
      master:
        url: jdbc:mysql://192.168.1.8:3306/product-inventory-management-dhdc?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        url: jdbc:mysql://172.17.0.1:3306/mis-ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        username: root
        password: 123456
        password: zttZTT123!
      # ä»Žåº“数据源
      slave:
        # ä»Žæ•°æ®æºå¼€å…³/默认关闭
@@ -135,14 +138,14 @@
  redis:
    # åœ°å€
#    host: 127.0.0.1
    host: 192.168.1.8
    host: 172.17.0.1
    # ç«¯å£ï¼Œé»˜è®¤ä¸º6379
    port: 6379
    # æ•°æ®åº“索引
    database: 1
    database: 0
    # å¯†ç 
#    password: root2022!
    password:
    password: zttZTT123!
#    password: 123456
    # è¿žæŽ¥è¶…æ—¶æ—¶é—´
    timeout: 10s
@@ -188,7 +191,7 @@
# Swagger配置
swagger:
  # æ˜¯å¦å¼€å¯swagger
  enabled: true
  enabled: false
  # è¯·æ±‚前缀
  pathMapping: /dev-api
@@ -215,5 +218,5 @@
  allowOverwrite: false
file:
  temp-dir: /javaWork/product-inventory-management/file/temp/uploads
  upload-dir: /javaWork/product-inventory-management/file/prod/uploads
  temp-dir: /center-lims/mis/file/temp/uploads
  upload-dir: /center-lims/mis/file/prod/uploads
src/main/resources/application-zjyj.yml
ÎļþÒÑɾ³ý
src/main/resources/application-zqhx.yml
ÎļþÒÑɾ³ý
src/main/resources/application-zyrq.yml
ÎļþÒÑɾ³ý
src/main/resources/application-zyrqCopy.yml
ÎļþÒÑɾ³ý
src/main/resources/application.yml
@@ -1,4 +1,13 @@
# Spring配置
spring:
  profiles:
    active: dev
    active: yxglxt
#10.136.58.65    è´¢åŠ¡ç®¡ç†ç³»ç»Ÿ    cwglxt
#10.136.58.66    è®¾å¤‡ç®¡ç†ç³»ç»Ÿ    sbglxt
#10.136.58.67    ç”Ÿäº§ç®¡æŽ§ç³»ç»Ÿ    scgkxt
#10.136.58.68    ååŒåŠžå…¬ç³»ç»Ÿ    xtbgxt
#10.136.58.69    é‡‡è´­ç®¡ç†ç³»ç»Ÿ    cgglxt
#10.136.58.70    ä»“储物流系统    ccwlxt
#10.136.58.71    è¥é”€ç®¡ç†ç³»ç»Ÿ    yxglxt
#10.136.58.72    äººåŠ›èµ„æºç³»ç»Ÿ    rlzyxt
#10.136.58.73    çŽ¯ä¿é—¨ç¦ç³»ç»Ÿ    hbmjxt
src/main/resources/mapper/CustomStorageWarningRecordMapper.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.ruoyi.procurementrecord.mapper.CustomStorageWarningRecordMapper">
    <resultMap id="BaseResultMap" type="com.ruoyi.procurementrecord.pojo.CustomStorageWarningRecord">
            <id property="id" column="id" jdbcType="BIGINT"/>
            <result property="customStorageId" column="custom_storage_id" jdbcType="INTEGER"/>
            <result property="warningLevel" column="warning_level" jdbcType="VARCHAR"/>
            <result property="warningStatus" column="warning_status" jdbcType="VARCHAR"/>
            <result property="warningTime" column="warning_time" jdbcType="TIMESTAMP"/>
            <result property="expectedshortagetime" column="expectedShortageTime" jdbcType="TIMESTAMP"/>
    </resultMap>
    <sql id="Base_Column_List">
        id,custom_storage_id,warning_level,
        warning_status,warning_time,expectedShortageTime
    </sql>
    <select id="selectCustomStorageWarning" resultType="com.ruoyi.procurementrecord.pojo.CustomStorage">
        select t1.*,
        sum(t1.tax_inclusive_total_price) as totalPrice,
        sum(t1.inbound_num) as inboundNum,
        sum(t1.inbound_num) as inboundNum0,
        SUM(t1.inbound_num) - COALESCE(SUM(t2.inbound_num), 0) AS availableStock
        from custom_storage t1
        left join procurement_record_out t2 on t1.id = t2.procurement_record_storage_id and t2.type = 3
        inner join custom_storage_warning_record cswr on t1.id = cswr.custom_storage_id
        <where>
            t2.type = 3
            <if test="req.productCategory != null and req.productCategory != ''">
                and t1.product_category like  concat('%',#{req.productCategory},'%')
            </if>
            <if test="req.supplierName !=null and req.supplierName != ''">
                and t1.supplier_name like concat('%',#{req.supplierName},'%')
            </if>
            <if test="req.specificationModel !=null and req.specificationModel != ''">
                and t1.specification_model like concat('%',#{specificationModel},'%')
            </if>
            <if test="req.timeStr != null and req.timeStr != ''">
                and t1.inbound_date like concat('%',#{req.timeStr},'%')
            </if>
        </where>
        group by t1.product_category, t1.specification_model, t1.tax_inclusive_unit_price
        order by t1.inbound_date desc
    </select>
</mapper>
src/main/resources/mapper/account/AccountMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
<?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.ruoyi.account.mapper.AccountMapper">
    <select id="accountListPage" resultType="com.ruoyi.account.pojo.Account">
        select * from account
        where 1=1
        <if test="c.counterparty !='' and c.counterparty!=null">
            and counterparty = #{c.counterparty}
        </if>
        <if test="c.typeText !='' and c.typeText!=null">
            and type_text = #{c.typeText}
        </if>
    </select>
</mapper>
src/main/resources/mapper/account/AccountReconciliationMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
<?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.ruoyi.account.mapper.AccountReconciliationMapper">
    <select id="accountReconciliationListPage" resultType="com.ruoyi.account.pojo.AccountReconciliation">
        select * from account_reconciliation
        where 1=1
        <if test="c.counterparty !='' and c.counterparty!=null">
            and counterparty = #{c.counterparty}
        </if>
        <if test="c.status !='' and c.status!=null">
            and status = #{c.status}
        </if>
    </select>
</mapper>
src/main/resources/mapper/procurementrecord/CustomStorageMapper.xml
@@ -4,13 +4,14 @@
    <select id="listPageCopyByCustom" resultType="com.ruoyi.procurementrecord.pojo.CustomStorage">
        select t1.*,
               sum(t1.inbound_num) as inboundNum,
               sum(t1.inbound_num) as inboundNum0,
               sum(t1.tax_inclusive_total_price) as taxInclusiveTotalPrice,
               SUM(t1.inbound_num) - COALESCE(SUM(t2.inbound_num), 0) AS availableStock
                sum(t1.tax_inclusive_total_price) as totalPrice,
                sum(t1.inbound_num) as inboundNum,
                sum(t1.inbound_num) as inboundNum0,
                SUM(t1.inbound_num) - COALESCE(SUM(t2.inbound_num), 0) AS availableStock
               from custom_storage t1
               left join procurement_record_out t2 on t1.id = t2.procurement_record_storage_id and t2.type = 3
        <where>
            t2.type = 3
            <if test="req.productCategory != null and req.productCategory != ''">
                and t1.product_category like  concat('%',#{req.productCategory},'%')
            </if>
@@ -22,7 +23,28 @@
            </if>
        </where>
        group by t1.product_category, t1.specification_model, t1.tax_inclusive_unit_price
        HAVING availableStock > 0
        order by t1.inbound_date desc
    </select>
    <select id="listPageByCustom" resultType="com.ruoyi.procurementrecord.pojo.CustomStorage">
        select t1.*,
        sum(t1.inbound_num) as inboundNum,
        sum(t1.inbound_num) as inboundNum0,
        sum(t1.tax_inclusive_total_price) as taxInclusiveTotalPrice,
        (t1.inbound_num - COALESCE(SUM(t2.inbound_num), 0)) AS availableStock
        from custom_storage t1
        left join procurement_record_out t2 on t1.id = t2.procurement_record_storage_id
        <where>
            <if test="req.productCategory != null and req.productCategory != ''">
                and t1.product_category like  concat('%',#{req.productCategory},'%')
            </if>
            <if test="req.supplierName !=null and req.supplierName != ''">
                and t1.supplier_name like concat('%',#{req.supplierName},'%')
            </if>
            <if test="req.timeStr != null and req.timeStr != ''">
                and t1.inbound_date like concat('%',#{req.timeStr},'%')
            </if>
        </where>
        group by t1.id
        order by t1.inbound_date desc
    </select>
</mapper>
src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
@@ -20,7 +20,7 @@
            t2.tax_exclusive_total_price,
            t3.inbound_num as quantityStock
        from  purchase_ledger t1
        left join sales_ledger_product t2 on t1.id = t2.sales_ledger_id
        left join sales_ledger_product t2 on t1.id = t2.sales_ledger_id and t2.type = 2
        left join procurement_record_storage t3 on t2.id = t3.sales_ledger_product_id
        where t1.purchase_contract_number = #{req.purchaseContractNumber}
        <if test="req.id != null and req.id != ''">
@@ -50,10 +50,12 @@
        t1.create_time,
        t1.update_time,
        t1.create_by,
        t2.warn_num
        t2.warn_num,
        (t1.inbound_num - COALESCE(SUM(t4.inbound_num), 0)) / count(1) AS availableStock
        from  procurement_record_storage t1
                  left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id and t2.type = 2
                  left join purchase_ledger t3 on t3.id = t2.sales_ledger_id
        left join procurement_record_out t4 on t1.id = t4.procurement_record_storage_id and t4.type = 1
        <where>
            t1.type = 1
            <if test="req.supplierName != null and req.supplierName != ''">
@@ -66,6 +68,10 @@
                and t1.create_time like  concat('%',#{req.timeStr},'%')
            </if>
        </where>
        group by t1.id
        <if test="req.flag != null and req.flag">
            having availableStock > 0
        </if>
        order by t1.create_time desc
    </select>
    <select id="list" resultType="com.ruoyi.procurementrecord.dto.ProcurementPageDto">
@@ -141,12 +147,14 @@
        t1.create_time,
        t1.update_time,
        t1.create_by,
        t2.warn_num
        t2.warn_num,
        (SUM(t1.inbound_num) - COALESCE(SUM(t4.inbound_num), 0)) / COALESCE(count(1), 1) AS availableStock
        from  procurement_record_storage t1
        left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id and t2.type = 2
        left join purchase_ledger t3 on t3.id = t2.sales_ledger_id
        left join procurement_record_out t4 on t1.id = t4.procurement_record_storage_id and t4.type = 1
        <where>
            t1.type = 1
            t1.type = 1 and t4.type = 1
            <if test="req.supplierName != null and req.supplierName != ''">
                and t3.supplier_name like  concat('%',#{req.supplierName},'%')
            </if>
@@ -172,7 +180,8 @@
                and t1.create_time &lt;= #{req.endDate}
            </if>
        </where>
        group by t3.supplier_name,t2.product_category,t2.specification_model,t1.unit_price
        group by t2.product_category,t2.specification_model,t1.unit_price
        having availableStock > 0
        order by t1.create_time desc
    </select>
    <select id="listCopy" resultType="com.ruoyi.procurementrecord.dto.ProcurementPageDtoCopy">
src/main/resources/mapper/production/ProductionOrderMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,5 @@
<?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.ruoyi.production.mapper.ProductionOrderMapper">
</mapper>
src/main/resources/mapper/production/SalesLedgerProductionAccountingMapper.xml
@@ -12,33 +12,18 @@
        t4.finished_num,
        t4.work_hours,
        t4.process,
        T1.sales_contract_no,
        T1.customer_contract_no,
        T1.project_name,
        T1.customer_name,
        t3.product_category,
        t3.specification_model,
        t3.unit
        FROM
        sales_ledger_production_accounting t4
        LEFT JOIN sales_ledger T1 ON T1.id = t4.sales_ledger_id
        left join sales_ledger_product t3 on t4.sales_ledger_product_id = t3.id
        LEFT JOIN production_order t3 on t3.id = t4.sales_ledger_product_id
        <where>
            t3.type = 1
            <if test="salesLedgerDto.schedulingUserName != null and salesLedgerDto.schedulingUserName != '' ">
                AND  t4.scheduling_user_name LIKE CONCAT('%',#{salesLedgerDto.schedulingUserName},'%')
            </if>
            <if test="salesLedgerDto.customerName != null and salesLedgerDto.customerName != '' ">
                AND  T1.customer_name LIKE CONCAT('%',#{salesLedgerDto.customerName},'%')
            </if>
            <if test="salesLedgerDto.customerContractNo != null and salesLedgerDto.customerContractNo !='' ">
                AND  T1.customer_contract_no LIKE CONCAT('%',#{salesLedgerDto.customerContractNo},'%')
            </if>
            <if test="salesLedgerDto.salesContractNo != null and salesLedgerDto.salesContractNo != '' ">
                AND  T1.sales_contract_no LIKE CONCAT('%',#{salesLedgerDto.salesContractNo},'%')
            </if>
            <if test="salesLedgerDto.projectName != null and salesLedgerDto.projectName != '' ">
                AND T1.project_name LIKE CONCAT('%',#{salesLedgerDto.projectName},'%')
            <if test="salesLedgerDto.productCategory != null and salesLedgerDto.productCategory != '' ">
                AND  t3.product_category LIKE CONCAT('%',#{salesLedgerDto.productCategory},'%')
            </if>
            <if test="salesLedgerDto.entryDateStart != null and salesLedgerDto.entryDateStart != '' ">
                AND t4.scheduling_date &gt;= DATE_FORMAT(#{salesLedgerDto.entryDateStart},'%Y-%m-%d')
src/main/resources/mapper/purchase/ProductRecordMapper.xml
@@ -42,6 +42,9 @@
        <if test="c.purchaseContractNumber != null and c.purchaseContractNumber != ''">
            and tr.purchase_contract_number like concat('%',#{c.purchaseContractNumber},'%')
        </if>
        <if test="c.userId != null and c.userId != '' ">
            AND  pl.recorder_id = #{c.userId}
        </if>
    </select>
    <select id="getProductRecordById" resultType="com.ruoyi.purchase.dto.ProductRecordDto">
        SELECT
src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml
@@ -56,6 +56,9 @@
            <if test="c.entryDateEnd != null and c.entryDateEnd != '' ">
                AND  pl.entry_date &lt;= DATE_FORMAT(#{c.entryDateEnd},'%Y-%m-%d')
            </if>
            <if test="c.recorderId != null and c.recorderId != '' ">
                AND  pl.recorder_id = #{c.recorderId}
            </if>
        </where>
        group by pl.id, pl.purchase_contract_number, pl.sales_contract_no, pl.supplier_name,
        pl.project_name,pl.entry_date,
src/main/resources/mapper/system/SysDeptMapper.xml
@@ -99,6 +99,7 @@
             <if test="phone != null and phone != ''">phone,</if>
             <if test="email != null and email != ''">email,</if>
            <if test="deptNick != null and deptNick != ''">dept_nick,</if>
            <if test="tenantId != null and tenantId != ''">tenant_id,</if>
             <if test="status != null">status,</if>
             <if test="createBy != null and createBy != ''">create_by,</if>
             create_time
@@ -112,6 +113,7 @@
             <if test="phone != null and phone != ''">#{phone},</if>
             <if test="email != null and email != ''">#{email},</if>
            <if test="deptNick != null and deptNick != '' ">#{deptNick},</if>
            <if test="tenantId != null and tenantId != '' ">#{tenantId},</if>
             <if test="status != null">#{status},</if>
             <if test="createBy != null and createBy != ''">#{createBy},</if>
             sysdate()
@@ -130,6 +132,7 @@
             <if test="email != null">email = #{email},</if>
            <if test="deptNick != null and deptNick != '' ">dept_nick = #{deptNick},</if>
             <if test="status != null and status != ''">status = #{status},</if>
             <if test="tenantId != null and tenantId != ''">tenant_id = #{tenantId},</if>
             <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
             update_time = sysdate()
         </set>
@@ -178,5 +181,10 @@
        FROM DepartmentHierarchy
        WHERE parent_id = 100;
    </select>
    <select id="selectDeptByDeptName" resultType="com.ruoyi.project.system.domain.SysDept">
        <include refid="selectDeptVo"/>
        WHERE d.dept_name = #{deptName}
        LIMIT 1
    </select>
</mapper> 
src/main/resources/mapper/system/SysPostMapper.xml
@@ -19,7 +19,7 @@
    
    <sql id="selectPostVo">
        select post_id, post_code, post_name, post_sort, status, create_by, create_time, remark 
        from sys_post
        from sys_post p
    </sql>
    
    <select id="selectPostList" parameterType="com.ruoyi.project.system.domain.SysPost" resultMap="SysPostResult">
@@ -34,6 +34,8 @@
            <if test="postName != null and postName != ''">
                AND post_name like concat('%', #{postName}, '%')
            </if>
            <!-- æ•°æ®èŒƒå›´è¿‡æ»¤ -->
            ${params.dataScope}
        </where>
    </select>
    
@@ -71,8 +73,14 @@
        <include refid="selectPostVo"/>
         where post_code=#{postCode} limit 1
    </select>
    <update id="updatePost" parameterType="com.ruoyi.project.system.domain.SysPost">
    <select id="selectPostByTenantId" resultType="com.ruoyi.project.system.domain.SysPost">
        <include refid="selectPostVo"/>
        <where>
            AND p.tenant_id = #{tenantId}
        </where>
    </select>
    <update id="updatePost" parameterType="com.ruoyi.project.system.domain.SysPost">
         update sys_post
         <set>
             <if test="postCode != null and postCode != ''">post_code = #{postCode},</if>
@@ -95,6 +103,7 @@
             <if test="status != null and status != ''">status,</if>
             <if test="remark != null and remark != ''">remark,</if>
             <if test="createBy != null and createBy != ''">create_by,</if>
             <if test="tenantId != null and tenantId != ''">tenant_id,</if>
             create_time
         )values(
             <if test="postId != null and postId != 0">#{postId},</if>
@@ -104,6 +113,7 @@
             <if test="status != null and status != ''">#{status},</if>
             <if test="remark != null and remark != ''">#{remark},</if>
             <if test="createBy != null and createBy != ''">#{createBy},</if>
             <if test="tenantId != null and tenantId != ''">#{tenantId},</if>
             sysdate()
         )
    </insert>
src/main/resources/mapper/system/SysRoleMapper.xml
@@ -27,6 +27,7 @@
        from sys_role r
            left join sys_user_role ur on ur.role_id = r.role_id
            left join sys_user u on u.user_id = ur.user_id
            left join sys_user_dept d on u.user_id = d.user_id
    </sql>
    
    <select id="selectRoleList" parameterType="com.ruoyi.project.system.domain.SysRole" resultMap="SysRoleResult">
@@ -103,6 +104,7 @@
             <if test="deptCheckStrictly != null">dept_check_strictly,</if>
             <if test="status != null and status != ''">status,</if>
             <if test="remark != null and remark != ''">remark,</if>
             <if test="tenantId != null and tenantId != ''">tenant_id,</if>
             <if test="createBy != null and createBy != ''">create_by,</if>
             create_time
         )values(
@@ -115,6 +117,7 @@
             <if test="deptCheckStrictly != null">#{deptCheckStrictly},</if>
             <if test="status != null and status != ''">#{status},</if>
             <if test="remark != null and remark != ''">#{remark},</if>
             <if test="tenantId != null and tenantId != ''">#{tenantId},</if>
             <if test="createBy != null and createBy != ''">#{createBy},</if>
             sysdate()
         )
src/main/resources/mapper/system/SysUserMapper.xml
@@ -57,7 +57,7 @@
    <select id="selectUserList" parameterType="com.ruoyi.project.system.domain.SysUser" resultMap="SysUserResult">
        select u.user_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,T2.dept_names from sys_user u
        left join
        inner join
        (    SELECT T1.user_id,GROUP_CONCAT(T2.dept_name SEPARATOR ', ') AS dept_names
            FROM
                sys_user_dept T1
src/main/resources/mapper/vehicleInformationCollectionReview/VehicleInformationCollectionReviewMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,38 @@
<?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.ruoyi.vehicleInformationCollectionReview.mapper.VehicleInformationCollectionReviewMapper">
    <resultMap id="BaseResultMap" type="com.ruoyi.vehicleInformationCollectionReview.pojo.VehicleInformationCollectionReview">
            <id property="id" column="id" jdbcType="BIGINT"/>
            <result property="plateNo" column="plate_no" jdbcType="VARCHAR"/>
            <result property="plateColor" column="plate_color" jdbcType="VARCHAR"/>
            <result property="carType" column="car_type" jdbcType="VARCHAR"/>
            <result property="carVin" column="car_vin" jdbcType="VARCHAR"/>
            <result property="carModel" column="car_model" jdbcType="VARCHAR"/>
            <result property="engineModel" column="engine_model" jdbcType="VARCHAR"/>
            <result property="engineProductFactory" column="engine_product_factory" jdbcType="VARCHAR"/>
            <result property="engineNo" column="engine_no" jdbcType="VARCHAR"/>
            <result property="emissionStandard" column="emission_standard" jdbcType="VARCHAR"/>
            <result property="registeDate" column="registe_date" jdbcType="TIMESTAMP"/>
            <result property="natureOfUse" column="nature_of_use" jdbcType="VARCHAR"/>
            <result property="fuelType" column="fuel_type" jdbcType="VARCHAR"/>
            <result property="reviewStatus" column="review_status" jdbcType="VARCHAR"/>
            <result property="tenantId" column="tenant_id" jdbcType="INTEGER"/>
            <result property="createUser" column="create_user" jdbcType="VARCHAR"/>
            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
            <result property="updateUser" column="update_user" jdbcType="VARCHAR"/>
            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
    </resultMap>
    <sql id="Base_Column_List">
        id,plate_no,plate_color,
        car_type,car_vin,car_model,
        engine_model,engine_product_factory,engine_no,
        emission_standard,registe_date,nature_of_use,
        fuel_type,review_status,tenant_id,
        create_user,create_time,update_user,
        update_time
    </sql>
</mapper>
src/main/resources/mybatis/mybatis-config.xml
@@ -12,8 +12,8 @@
        <!-- é…ç½®é»˜è®¤çš„æ‰§è¡Œå™¨.SIMPLE就是普通执行器;REUSE执行器会重用预处理语句(prepared statements);BATCH执行器将重用语句并执行批量更新 -->
        <setting name="defaultExecutorType"      value="SIMPLE" />
        <!-- æŒ‡å®š MyBatis æ‰€ç”¨æ—¥å¿—的具体实现 -->
        <setting name="logImpl"                  value="SLF4J"  />
<!--        <setting name="logImpl"                  value="org.apache.ibatis.logging.stdout.StdOutImpl"  />-->
<!--        <setting name="logImpl"                  value="SLF4J"  />-->
        <setting name="logImpl"                  value="org.apache.ibatis.logging.stdout.StdOutImpl"  />
        <!-- ä½¿ç”¨é©¼å³°å‘½åæ³•转换字段 -->
        <!-- <setting name="mapUnderscoreToCamelCase" value="true"/> -->
    </settings>