From ca0565e53494417b3779759f8d3898e07bfd5929 Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期二, 20 一月 2026 14:09:16 +0800
Subject: [PATCH] Merge remote-tracking branch 'refs/remotes/origin/jtwy' into sqd-hb

---
 src/main/resources/mapper/sales/InvoiceRegistrationProductMapper.xml                                        |    4 
 src/main/java/com/ruoyi/procurementrecord/mapper/ProcurementRecordOutMapper.java                            |    7 
 src/main/resources/mapper/production/ProductProcessMapper.xml                                               |   20 
 src/main/java/com/ruoyi/production/dto/ProductOrderDto.java                                                 |   46 
 src/main/resources/application-jsmy.yml                                                                     |    2 
 src/main/resources/application-hsmy.yml                                                                     |    4 
 src/main/resources/mapper/sales/ReceiptPaymentMapper.xml                                                    |   45 
 src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java                                      |    4 
 src/main/java/com/ruoyi/sales/dto/ReceiptPaymentRecordDto.java                                              |    5 
 src/main/java/com/ruoyi/common/utils/OrderUtils.java                                                        |    3 
 src/main/java/com/ruoyi/production/mapper/ProductProcessMapper.java                                         |   14 
 src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java                                             |   32 
 src/main/java/com/ruoyi/production/service/impl/ProductionProductInputServiceImpl.java                      |   24 
 src/main/java/com/ruoyi/production/dto/ProcessRouteDto.java                                                 |   18 
 src/main/resources/mapper/basic/ProductModelMapper.xml                                                      |   39 
 src/main/resources/mapper/production/ProductOrderMapper.xml                                                 |   89 
 src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java                                    |    4 
 src/main/resources/mapper/measuringinstrumentledger/SparePartsMapper.xml                                    |    7 
 src/main/java/com/ruoyi/production/service/ProcessRouteItemService.java                                     |   18 
 src/main/java/com/ruoyi/staff/pojo/StaffScheduling.java                                                     |   15 
 src/main/resources/application-xyhb.yml                                                                     |    4 
 src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java                               |    5 
 src/main/resources/application-dev.yml                                                                      |   38 
 src/main/java/com/ruoyi/production/service/ProcessRouteService.java                                         |   15 
 src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java                                  |    1 
 src/main/resources/application-jsyny.yml                                                                    |    4 
 src/main/resources/mapper/sales/ShipmentApprovalMapper.xml                                                  |   24 
 doc/20260113-product_model.sql                                                                              |   14 
 src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java                                |  111 
 src/main/java/com/ruoyi/device/dto/DeviceAssetInfoDto.java                                                  |   28 
 src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java                              |   13 
 src/main/resources/application-cmny.yml                                                                     |    4 
 src/main/java/com/ruoyi/production/pojo/SalesLedgerWork.java                                                |   27 
 src/main/java/com/ruoyi/production/pojo/ProductProcessRouteItem.java                                        |   41 
 src/main/java/com/ruoyi/production/service/ProductProcessRouteItemService.java                              |   18 
 src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java                                |   43 
 doc/create_table_production_product_main.sql                                                                |   36 
 src/main/resources/mapper/purchase/InvoicePurchaseMapper.xml                                                |    3 
 src/main/resources/application-hckxTest.yml                                                                 |  219 +
 src/main/resources/mapper/production/ProductWorkOrderMapper.xml                                             |   70 
 src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java                          |    3 
 src/main/resources/mapper/production/ProductionProductInputMapper.xml                                       |   36 
 src/main/java/com/ruoyi/production/controller/ProcessRouteItemController.java                               |   53 
 src/main/resources/application-hxgy.yml                                                                     |    4 
 src/main/java/com/ruoyi/production/pojo/ProductBom.java                                                     |   72 
 pom.xml                                                                                                     |    7 
 src/main/java/com/ruoyi/device/execl/DeviceMaintenanceExeclDto.java                                         |    2 
 src/main/java/com/ruoyi/production/dto/ProductProcessRouteItemDto.java                                      |   27 
 src/main/java/com/ruoyi/production/dto/ProcessSchedulingDto.java                                            |   33 
 src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java                       |   72 
 src/main/java/com/ruoyi/production/controller/ProcessRouteController.java                                   |   52 
 src/main/resources/application-hysn.yml                                                                     |    4 
 src/main/java/com/ruoyi/production/service/impl/ProductProcessServiceImpl.java                              |   63 
 src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java                                          |    6 
 src/main/java/com/ruoyi/procurementrecord/dto/InventoryInformationDto.java                                  |   28 
 src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java                                        |   37 
 src/main/java/com/ruoyi/sales/pojo/InvoiceLedgerFile.java                                                   |    3 
 src/main/java/com/ruoyi/production/service/impl/SalesLedgerWorkServiceImpl.java                             |   63 
 src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java                                 |    5 
 src/main/java/com/ruoyi/basic/service/impl/SupplierManageFileServiceImpl.java                               |   23 
 doc/create_table_product_process.sql                                                                        |   13 
 src/main/java/com/ruoyi/production/mapper/ProductionProductOutputMapper.java                                |   21 
 src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java                       |  299 +
 src/main/resources/application-bhmy.yml                                                                     |    4 
 src/main/java/com/ruoyi/sales/controller/InvoiceRegistrationController.java                                 |   13 
 src/main/java/com/ruoyi/sales/service/impl/ShipmentApprovalServiceImpl.java                                 |   32 
 src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java                                                        |    6 
 src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java                                        |   29 
 src/main/java/com/ruoyi/production/controller/ProductProcessRouteItemController.java                        |   78 
 src/main/java/com/ruoyi/procurementrecord/mapper/ProcurementExceptionRecordMapper.java                      |    9 
 src/main/java/com/ruoyi/basic/pojo/SupplierManageFile.java                                                  |   60 
 src/main/java/com/ruoyi/production/dto/ProductProcessDto.java                                               |   13 
 src/main/resources/mapper/production/ProductionProductMainMapper.xml                                        |   48 
 src/main/resources/mapper/system/SysUserMapper.xml                                                          |    6 
 src/main/java/com/ruoyi/sales/service/impl/ReceiptPaymentServiceImpl.java                                   |   13 
 src/main/java/com/ruoyi/production/pojo/ProcessRouteItem.java                                               |   41 
 src/main/java/com/ruoyi/sales/pojo/ShipmentApproval.java                                                    |  352 ++
 src/main/resources/mapper/production/ProductProcessRouteMapper.xml                                          |   26 
 src/main/java/com/ruoyi/production/service/impl/SalesLedgerSchedulingServiceImpl.java                       |  253 +
 src/main/java/com/ruoyi/production/pojo/ProductionProductInput.java                                         |   32 
 src/main/java/com/ruoyi/production/controller/ProductProcessRouteController.java                            |   18 
 src/main/java/com/ruoyi/staff/service/StaffSchedulingService.java                                           |    2 
 src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java                                       |   96 
 src/main/resources/mapper/production/SalesLedgerProductionAccountingMapper.xml                              |    2 
 src/main/java/com/ruoyi/production/service/ProductOrderService.java                                         |   24 
 src/main/resources/application-hhkj.yml                                                                     |    4 
 src/main/java/com/ruoyi/production/dto/ProcessRouteItemDto.java                                             |   31 
 src/main/java/com/ruoyi/production/controller/ProductionProductInputController.java                         |   25 
 src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java                                |    5 
 src/main/java/com/ruoyi/production/controller/ProductStructureController.java                               |   40 
 src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java                                |   81 
 src/main/java/com/ruoyi/production/pojo/ProcessRoute.java                                                   |   44 
 src/main/java/com/ruoyi/production/service/ProductionProductMainService.java                                |   19 
 src/main/java/com/ruoyi/production/service/impl/SalesLedgerProductionAccountingServiceImpl.java             |   22 
 src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementExceptionRecord.java                              |   54 
 src/main/java/com/ruoyi/staff/controller/StaffSchedulingController.java                                     |    8 
 src/main/resources/mapper/device/DeviceLedgerMapper.xml                                                     |    4 
 src/main/java/com/ruoyi/production/dto/ProductionDispatchAddDto.java                                        |   16 
 src/main/java/com/ruoyi/basic/pojo/ProductModel.java                                                        |   17 
 src/main/resources/application-tjxm.yml                                                                     |    4 
 src/main/java/com/ruoyi/production/controller/ProductProcessController.java                                 |   89 
 src/main/java/com/ruoyi/approve/vo/ApproveGetAndUpdateVo.java                                               |   24 
 src/main/java/com/ruoyi/CodeGenerator.java                                                                  |  130 
 src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java                                                |    9 
 src/main/java/com/ruoyi/production/mapper/SpeculativeTradingInfoMapper.java                                 |   11 
 src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java                                    |  155 
 src/main/java/com/ruoyi/common/config/MybatisHandler.java                                                   |    3 
 src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java                            |   20 
 src/main/java/com/ruoyi/production/controller/ProductOrderController.java                                   |   67 
 src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java                             |    9 
 src/main/java/com/ruoyi/sales/mapper/ShipmentApprovalMapper.java                                            |   16 
 src/main/java/com/ruoyi/production/controller/ProductBomController.java                                     |   87 
 src/main/java/com/ruoyi/compensationperformance/controller/CompensationPerformanceController.java           |   34 
 src/main/resources/application-tymk.yml                                                                     |    4 
 src/main/java/com/ruoyi/procurementrecord/dto/ProcurementAddDto.java                                        |    3 
 src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java                                               |  125 
 src/main/resources/application-phmk.yml                                                                     |    4 
 src/main/resources/application-native.yml                                                                   |  219 +
 src/main/java/com/ruoyi/sales/controller/InvoiceLedgerController.java                                       |   20 
 src/main/java/com/ruoyi/sales/pojo/SalesLedger.java                                                         |   19 
 src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerRecordController.java |   10 
 src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java                          |   52 
 src/main/resources/application-hsxny.yml                                                                    |    4 
 src/main/resources/mapper/procurementrecord/ProcurementRecordOutMapper.xml                                  |  176 
 src/main/java/com/ruoyi/procurementrecord/pojo/CustomStorage.java                                           |   47 
 src/main/java/com/ruoyi/production/mapper/ProductOrderMapper.java                                           |   28 
 src/main/java/com/ruoyi/home/dto/ProductionProgressDto.java                                                 |   25 
 src/main/resources/mapper/production/ProductionProductOutputMapper.xml                                      |   37 
 src/main/resources/mapper/production/SalesLedgerSchedulingMapper.xml                                        |   11 
 src/main/resources/application-mxsc.yml                                                                     |    4 
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java                                      |  276 +
 src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java                                   |   53 
 src/main/java/com/ruoyi/production/pojo/ProductProcess.java                                                 |   74 
 src/main/resources/application-bdsm.yml                                                                     |    4 
 src/main/java/com/ruoyi/project/monitor/service/impl/SysJobServiceImpl.java                                 |    2 
 src/main/java/com/ruoyi/device/pojo/DeviceLedger.java                                                       |   12 
 src/main/java/com/ruoyi/approve/vo/ApproveProcessVO.java                                                    |   59 
 src/main/java/com/ruoyi/production/pojo/SpeculativeTradingInfo.java                                         |   81 
 src/main/resources/mapper/production/ProductBomMapper.xml                                                   |   48 
 src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java                                  |   49 
 src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java                                                 |   12 
 src/main/java/com/ruoyi/basic/pojo/SupplierManage.java                                                      |    3 
 src/main/resources/application-hbxm.yml                                                                     |    4 
 src/main/java/com/ruoyi/staff/pojo/StaffOnJob.java                                                          |   56 
 src/main/java/com/ruoyi/production/service/ProductStructureService.java                                     |   17 
 src/main/java/com/ruoyi/production/mapper/ProductionProductInputMapper.java                                 |   21 
 src/main/java/com/ruoyi/staff/service/impl/StaffSchedulingServiceImpl.java                                  |   12 
 src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java                                                  |    4 
 src/main/java/com/ruoyi/basic/pojo/Customer.java                                                            |    4 
 src/main/java/com/ruoyi/production/service/impl/ProductionProductOutputServiceImpl.java                     |   24 
 src/main/java/com/ruoyi/device/dto/DeviceMaintenanceDto.java                                                |    5 
 src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingDto.java                                        |   12 
 src/main/java/com/ruoyi/procurementrecord/controller/ProcurementExceptionRecordController.java              |   46 
 src/main/java/com/ruoyi/dto/WordDateDto.java                                                                |   48 
 src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java                            |   51 
 src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordOut.java                                    |    5 
 src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml                                                 |   17 
 src/main/java/com/ruoyi/compensationperformance/pojo/CompensationPerformance.java                           |   44 
 src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java                                         |    4 
 src/main/java/com/ruoyi/production/mapper/ProductWorkOrderMapper.java                                       |   30 
 src/main/java/com/ruoyi/purchase/dto/ProductRecordDto.java                                                  |   20 
 src/main/java/com/ruoyi/purchase/service/IProductRecordService.java                                         |    2 
 src/main/resources/mapper/production/ProcessRouteMapper.xml                                                 |   28 
 src/main/resources/mapper/sales/SalesLedgerProductMapper.xml                                                |   36 
 src/main/resources/application-jlsn.yml                                                                     |    4 
 src/main/resources/static/劳动合同书.xml                                                                         |    3 
 src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDto.java                                       |    7 
 src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java                                             |   38 
 src/main/java/com/ruoyi/staff/dto/SaveStaffSchedulingDto.java                                               |   24 
 src/main/java/com/ruoyi/purchase/dto/TicketRegistrationDto.java                                             |   10 
 src/main/java/com/ruoyi/purchase/service/impl/ProductRecordServiceImpl.java                                 |   29 
 src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java                              |    2 
 src/main/java/com/ruoyi/basic/controller/ProductController.java                                             |   31 
 src/main/resources/mapper/production/SalesLedgerWorkMapper.xml                                              |   10 
 src/main/java/com/ruoyi/collaborativeApproval/pojo/Notice.java                                              |    3 
 src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDtoCopy.java                                   |    9 
 src/main/java/com/ruoyi/production/pojo/ProductionProductOutput.java                                        |   32 
 src/main/java/com/ruoyi/staff/service/IStaffOnJobService.java                                               |    2 
 src/main/java/com/ruoyi/production/mapper/ProcessRouteItemMapper.java                                       |   19 
 src/main/java/com/ruoyi/production/mapper/ProductBomMapper.java                                             |   26 
 src/main/java/com/ruoyi/purchase/controller/TicketRegistrationController.java                               |   18 
 src/main/resources/application-zyrqCopy.yml                                                                 |    4 
 src/main/java/com/ruoyi/sales/controller/ReceiptPaymentController.java                                      |    1 
 src/main/java/com/ruoyi/production/mapper/ProductProcessRouteMapper.java                                    |   21 
 src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java                                          |   45 
 src/main/java/com/ruoyi/basic/mapper/SupplierManageFileMapper.java                                          |   15 
 src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml                                     |  154 
 src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductMapper.java                                          |    7 
 src/main/resources/mapper/sales/SalesLedgerMapper.xml                                                       |    1 
 src/main/java/com/ruoyi/production/mapper/ProcessRouteMapper.java                                           |   15 
 src/main/resources/mapper/basic/SupplierManageMapper.xml                                                    |    8 
 src/main/java/com/ruoyi/basic/service/IProductService.java                                                  |    4 
 src/main/java/com/ruoyi/common/vo/FileVo.java                                                               |    2 
 src/main/java/com/ruoyi/inspectiontask/pojo/TimingTask.java                                                 |    7 
 src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java                                                  |   39 
 src/main/java/com/ruoyi/production/service/ProductBomService.java                                           |   24 
 src/main/resources/application-rzny.yml                                                                     |    4 
 src/main/java/com/ruoyi/basic/controller/SupplierManageFileController.java                                  |   63 
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java                               |  142 
 src/main/java/com/ruoyi/basic/dto/ProductModelDto.java                                                      |    4 
 src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordOutService.java                          |    2 
 src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java                                  |   32 
 src/main/java/com/ruoyi/inspectiontask/pojo/InspectionTask.java                                             |    2 
 src/main/java/com/ruoyi/purchase/mapper/ProductRecordMapper.java                                            |    4 
 src/main/java/com/ruoyi/account/service/impl/AccountExpenseServiceImpl.java                                 |  103 
 src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java                    |  276 +
 src/main/resources/mapper/quality/QualityInspectMapper.xml                                                  |   18 
 src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java                                    |   22 
 src/main/java/com/ruoyi/production/mapper/ProductProcessRouteItemMapper.java                                |   14 
 src/main/java/com/ruoyi/collaborativeApproval/service/impl/NoticeServiceImpl.java                           |   19 
 src/main/java/com/ruoyi/production/dto/ProductBomDto.java                                                   |   18 
 src/main/java/com/ruoyi/production/dto/ProductionProductInputDto.java                                       |   14 
 src/main/java/com/ruoyi/staff/service/impl/StaffJoinLeaveRecordServiceImpl.java                             |    7 
 src/main/java/com/ruoyi/sales/pojo/Loss.java                                                                |   31 
 src/main/resources/mapper/production/ProductProcessRouteItemMapper.xml                                      |   28 
 src/main/resources/mapper/production/ProductStructureMapper.xml                                             |   43 
 src/main/java/com/ruoyi/procurementrecord/dto/Details.java                                                  |    1 
 src/main/java/com/ruoyi/production/service/impl/ProcessRouteItemServiceImpl.java                            |   90 
 src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java                                 |   90 
 src/main/java/com/ruoyi/basic/service/impl/StorageAttachmentServiceImpl.java                                |    2 
 src/main/java/com/ruoyi/production/service/ProductProcessRouteService.java                                  |   18 
 src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java                                        |    2 
 src/main/java/com/ruoyi/staff/pojo/StaffJoinLeaveRecord.java                                                |   48 
 src/main/resources/application-jtwy.yml                                                                     |  244 +
 src/main/java/com/ruoyi/production/pojo/ProductStructure.java                                               |   56 
 src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java                                |  132 
 src/main/java/com/ruoyi/device/dto/DeviceRepairDto.java                                                     |    5 
 src/main/resources/application-jjxm.yml                                                                     |    4 
 src/main/java/com/ruoyi/device/controller/DeviceLedgerController.java                                       |    9 
 src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java                                            |    8 
 src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutAdd.java                                  |    2 
 src/main/resources/application-demo.yml                                                                     |    4 
 src/main/java/com/ruoyi/project/system/controller/SysUserController.java                                    |   12 
 src/main/resources/mapper/basic/SupplierManageFileMapper.xml                                                |    9 
 src/main/java/com/ruoyi/production/dto/ProductionProductOutputDto.java                                      |   15 
 src/main/java/com/ruoyi/production/service/ProductionProductInputService.java                               |   11 
 src/main/resources/mapper/production/ProcessRouteItemMapper.xml                                             |   35 
 src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordOutController.java                    |   11 
 src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java                                     |    5 
 src/main/java/com/ruoyi/staff/controller/StaffOnJobController.java                                          |   15 
 src/main/java/com/ruoyi/production/mapper/ProductionProductMainMapper.java                                  |   22 
 src/main/java/com/ruoyi/production/service/ProductionProductOutputService.java                              |   11 
 src/main/java/com/ruoyi/quality/pojo/QualityInspect.java                                                    |   10 
 doc/create_table_product_structure.sql                                                                      |   16 
 src/main/java/com/ruoyi/production/mapper/ProductStructureMapper.java                                       |   19 
 src/main/java/com/ruoyi/production/pojo/ProductOrder.java                                                   |  100 
 doc/create_table_process_route_item.sql                                                                     |   62 
 src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java                                    |   18 
 src/main/resources/application-hcmy.yml                                                                     |    4 
 src/main/java/com/ruoyi/device/dto/DeviceLedgerDto.java                                                     |   13 
 doc/1767778273_add_product_order_id_to_product_work_order.sql                                               |    2 
 src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordOutServiceImpl.java                 |   12 
 src/main/java/com/ruoyi/production/service/ProductWorkOrderService.java                                     |   15 
 src/main/resources/mapper/procurementrecord/ProcurementExceptionRecordMapper.xml                            |    5 
 src/main/resources/mapper/purchase/PaymentRegistrationMapper.xml                                            |    8 
 src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java                                                       |    2 
 src/main/resources/application-cjny.yml                                                                     |    2 
 src/main/resources/mapper/purchase/ProductRecordMapper.xml                                                  |   17 
 src/main/java/com/ruoyi/device/service/IDeviceLedgerService.java                                            |    2 
 src/main/java/com/ruoyi/quality/mapper/QualityInspectMapper.java                                            |    5 
 src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteServiceImpl.java                         |   29 
 src/main/resources/application-mkzs.yml                                                                     |    4 
 src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java                                         |    5 
 src/main/java/com/ruoyi/production/controller/SalesLedgerSchedulingController.java                          |   86 
 src/main/java/com/ruoyi/production/controller/ProductWorkOrderController.java                               |   37 
 src/main/resources/mapper/staff/StaffSchedulingMapper.xml                                                   |    7 
 src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutPageDto.java                              |    1 
 src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java                                                   |    8 
 src/main/java/com/ruoyi/inspectiontask/service/impl/QuartzConfig.java                                       |   16 
 src/main/java/com/ruoyi/production/service/SalesLedgerSchedulingService.java                                |    2 
 src/main/resources/mapper/system/SysUserDeptMapper.xml                                                      |    2 
 src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java                                                    |   27 
 src/main/java/com/ruoyi/sales/service/ShipmentApprovalService.java                                          |   13 
 src/main/java/com/ruoyi/production/pojo/SalesLedgerScheduling.java                                          |   11 
 src/main/java/com/ruoyi/production/dto/ProductionReportDto.java                                             |   12 
 src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingProcessDto.java                                 |   13 
 src/main/java/com/ruoyi/production/pojo/ProductProcessRoute.java                                            |   61 
 src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteItemServiceImpl.java                     |  206 +
 src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java                                    |  129 
 src/main/resources/application-mqsp.yml                                                                     |    4 
 src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderServiceImpl.java                            |   32 
 src/main/java/com/ruoyi/basic/service/SupplierManageFileService.java                                        |   12 
 src/main/resources/mapper/device/DeviceRepairMapper.xml                                                     |    5 
 doc/create_table_process_route.sql                                                                          |   11 
 src/main/java/com/ruoyi/procurementrecord/mapper/ProcurementRecordMapper.java                               |   10 
 src/main/resources/application-hbkj.yml                                                                     |    4 
 src/main/java/com/ruoyi/production/dto/SalesLedgerWorkDto.java                                              |   43 
 src/main/java/com/ruoyi/production/controller/ProductionProductOutputController.java                        |   27 
 src/main/java/com/ruoyi/production/service/ProductProcessService.java                                       |   26 
 src/main/java/com/ruoyi/staff/dto/StaffSchedulingDto.java                                                   |   10 
 src/main/resources/application-hckx.yml                                                                     |   31 
 src/main/java/com/ruoyi/production/dto/ProductStructureDto.java                                             |   22 
 src/main/java/com/ruoyi/sales/mapper/LossMapper.java                                                        |   11 
 293 files changed, 9,089 insertions(+), 641 deletions(-)

diff --git a/doc/1767778273_add_product_order_id_to_product_work_order.sql b/doc/1767778273_add_product_order_id_to_product_work_order.sql
new file mode 100644
index 0000000..8804120
--- /dev/null
+++ b/doc/1767778273_add_product_order_id_to_product_work_order.sql
@@ -0,0 +1,2 @@
+alter table product_work_order
+    add product_order_id bigint not null default 0 comment '鐢熶骇璁㈠崟id';
diff --git a/doc/20260113-product_model.sql b/doc/20260113-product_model.sql
new file mode 100644
index 0000000..dcbb610
--- /dev/null
+++ b/doc/20260113-product_model.sql
@@ -0,0 +1,14 @@
+alter table product_model
+    add product_code varchar(255)  null comment '浜у搧缂栫爜';
+
+alter table process_route
+    add process_route_code varchar(255)  null comment '宸ヨ壓璺嚎缂栫爜';
+
+alter table procurement_record_storage
+    add product_model_id bigint null comment '浜у搧瑙勬牸id';
+alter table procurement_record_out
+    add product_model_id bigint null comment '浜у搧瑙勬牸id';
+
+
+alter table quality_inspect
+    add product_model_id bigint null comment '浜у搧瑙勬牸id';
diff --git a/doc/create_table_process_route.sql b/doc/create_table_process_route.sql
new file mode 100644
index 0000000..4a453f8
--- /dev/null
+++ b/doc/create_table_process_route.sql
@@ -0,0 +1,11 @@
+# 宸ヨ壓璺嚎
+drop table if exists process_route;
+create table process_route
+(
+    id          bigint auto_increment primary key,
+    product_model_id  bigint       not null default 0 comment '浜у搧id',
+    description varchar(255) not null default '' comment '鎻忚堪',
+    tenant_id   bigint       not null comment '绉熸埛id',
+    create_time datetime     null comment '褰曞叆鏃堕棿',
+    update_time datetime     null comment '鏇存柊鏃堕棿'
+);
diff --git a/doc/create_table_process_route_item.sql b/doc/create_table_process_route_item.sql
new file mode 100644
index 0000000..a1efff9
--- /dev/null
+++ b/doc/create_table_process_route_item.sql
@@ -0,0 +1,62 @@
+# 宸ヨ壓璺嚎椤圭洰
+drop table if exists process_route_item;
+create table process_route_item
+(
+    id               bigint auto_increment primary key,
+    route_id         bigint   not null default 0 comment '宸ヨ壓璺嚎id',
+    product_model_id bigint   not null default 0 comment '浜у搧id',
+    process_id       bigint   not null default 0 comment '宸ュ簭id',
+    tenant_id        bigint   not null comment '绉熸埛id',
+    create_time      datetime null comment '褰曞叆鏃堕棿',
+    update_time      datetime null comment '鏇存柊鏃堕棿'
+);
+
+# 鐢熶骇宸ヨ壓璺嚎椤圭洰
+drop table if exists product_process_route_item;
+create table product_process_route_item
+(
+    id               bigint auto_increment primary key,
+    route_id         bigint   not null default 0 comment '宸ヨ壓璺嚎id',
+    product_model_id bigint   not null default 0 comment '閿�鍞彴璐︿骇鍝乮d',
+    process_id       bigint   not null default 0 comment '宸ュ簭id',
+    tenant_id        bigint   not null comment '绉熸埛id',
+    create_time      datetime null comment '褰曞叆鏃堕棿',
+    update_time      datetime null comment '鏇存柊鏃堕棿'
+);
+
+# 鐢熶骇璁㈠崟
+drop table if exists product_order;
+create table product_order
+(
+    id               bigint auto_increment primary key,
+    sales_ledger_id  bigint   not null default 0 comment '閿�鍞彴璐d',
+    product_model_id bigint   not null default 0 comment '閿�鍞彴璐︿骇鍝乮d',
+    route_id         bigint   not null default 0 comment '宸ヨ壓璺嚎id',
+    nps_no          varchar(255) not null default '' comment '鐢熶骇璁㈠崟鍙�',
+    status            int not null default 0 comment '鐘舵�� 0 寰呯‘璁� 1 宸茬‘璁�',
+    tenant_id        bigint   not null comment '绉熸埛id',
+    create_time      datetime null comment '褰曞叆鏃堕棿',
+    update_time      datetime null comment '鏇存柊鏃堕棿'
+);
+alter table quality_inspect
+    add purchase_ledger_id int null comment '閲囪喘璁㈠崟id';
+
+# 鐢熶骇宸ュ崟
+drop table if exists product_work_order;
+create table product_work_order
+(
+    id               bigint auto_increment primary key,
+    product_process_route_item_id bigint   not null default 0 comment '宸ヨ壓璺嚎椤圭洰id',
+    create_time      datetime null comment '褰曞叆鏃堕棿',
+    update_time      datetime null comment '鏇存柊鏃堕棿',
+    work_order_no    varchar(255) not null default '' comment '宸ュ崟缂栧彿',
+    plan_start_time  datetime null comment '璁″垝寮�濮嬫椂闂�',
+    plan_end_time    datetime null comment '璁″垝缁撴潫鏃堕棿',
+    actual_start_time  datetime null comment '瀹為檯寮�濮嬫椂闂�',
+    actual_end_time    datetime null comment '瀹為檯缁撴潫鏃堕棿',
+    status           int not null default 0 comment '鐘舵��  1 寰呯‘璁�  2 寰呯敓浜� 3鐢熶骇涓� 4宸茬敓浜� ',
+    tenant_id        bigint   not null comment '绉熸埛id'
+);
+
+alter table product_process
+    add salary_quota numeric(16,3) null comment '宸ヨ祫瀹氶';
\ No newline at end of file
diff --git a/doc/create_table_product_process.sql b/doc/create_table_product_process.sql
new file mode 100644
index 0000000..6242614
--- /dev/null
+++ b/doc/create_table_product_process.sql
@@ -0,0 +1,13 @@
+# 宸ュ簭
+drop table if exists product_process;
+create table product_process
+(
+    id          bigint auto_increment
+        primary key,
+    create_time datetime null comment '褰曞叆鏃堕棿',
+    update_time datetime null comment '鏇存柊鏃堕棿',
+    name        varchar(255) not null default '' comment '宸ヨ壓鍚嶇О',
+    no          varchar(255) not null default '' comment '宸ヨ壓缂栧彿',
+    remark      varchar(255) not null default '' comment '澶囨敞',
+    tenant_id   bigint       not null default 0 comment '绉熸埛id'
+);
\ No newline at end of file
diff --git a/doc/create_table_product_structure.sql b/doc/create_table_product_structure.sql
new file mode 100644
index 0000000..83af495
--- /dev/null
+++ b/doc/create_table_product_structure.sql
@@ -0,0 +1,16 @@
+# 浜у搧缁撴瀯
+drop table if exists product_structure;
+create table product_structure
+(
+    id                 bigint auto_increment
+        primary key,
+    product_model_id         bigint         not null comment '浜у搧id',
+    process_id         bigint         not null comment '宸ュ簭id',
+    unit_quantity      numeric(16, 4) not null comment '鍗曚綅浜у嚭闇�瑕佹暟閲�',
+    demanded_quantity  numeric(16, 4) not null comment '闇�姹傛暟閲�',
+    unit               varchar(255)   not null comment '鍗曚綅',
+    disk_quantity      numeric(16, 4) not null comment '鐩樻暟閲�',
+    tenant_id          bigint         not null comment '绉熸埛id'
+);
+alter table product_structure
+    add parent_id bigint null comment '鐖秈d';
diff --git a/doc/create_table_production_product_main.sql b/doc/create_table_production_product_main.sql
new file mode 100644
index 0000000..18fb92d
--- /dev/null
+++ b/doc/create_table_production_product_main.sql
@@ -0,0 +1,36 @@
+drop table if exists production_product_main;
+create table production_product_main
+(
+    id            bigint auto_increment
+        primary key,
+    product_no    varchar(255) not null comment '鎶ュ伐鍗曞彿',
+    user_id       bigint       not null comment '鎶ュ伐鐢ㄦ埛id',
+    work_order_id bigint       not null comment '宸ュ崟id',
+    status        int          not null comment '鐘舵�� 0 寰呮姤宸� 1 寰呯‘璁�',
+    create_time   datetime     null comment '褰曞叆鏃堕棿',
+    tenant_id          bigint         not null comment '绉熸埛id'
+);
+
+drop table if exists production_product_output;
+create table production_product_output
+(
+    id               bigint auto_increment
+        primary key,
+    product_main_id  bigint         not null comment '鎶ュ伐鍗昳d',
+    product_model_id bigint         not null comment '浜у搧id',
+    quantity         numeric(16, 4) not null comment '鏁伴噺',
+    create_time      datetime       null comment '褰曞叆鏃堕棿',
+    tenant_id          bigint         not null comment '绉熸埛id'
+);
+
+drop table if exists production_product_input;
+create table production_product_input
+(
+    id               bigint auto_increment
+        primary key,
+    product_main_id  bigint         not null comment '鎶ュ伐鍗昳d',
+    product_model_id bigint         not null comment '浜у搧id',
+    quantity         numeric(16, 4) not null comment '鏁伴噺',
+    create_time      datetime       null comment '褰曞叆鏃堕棿',
+    tenant_id          bigint         not null comment '绉熸埛id'
+)
diff --git a/pom.xml b/pom.xml
index 88a0f6b..ef1447a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -110,6 +110,13 @@
             <scope>runtime</scope>
         </dependency>
 
+        <!-- FreeMarker 妯℃澘寮曟搸锛氬鐞嗗彉閲忓崰浣嶇 -->
+        <dependency>
+            <groupId>org.freemarker</groupId>
+            <artifactId>freemarker</artifactId>
+            <version>2.3.32</version>
+        </dependency>
+
         <!-- pagehelper 鍒嗛〉鎻掍欢 -->
         <dependency>
             <groupId>com.github.pagehelper</groupId>
diff --git a/src/main/java/com/ruoyi/CodeGenerator.java b/src/main/java/com/ruoyi/CodeGenerator.java
new file mode 100644
index 0000000..856da1d
--- /dev/null
+++ b/src/main/java/com/ruoyi/CodeGenerator.java
@@ -0,0 +1,130 @@
+package com.ruoyi;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.generator.FastAutoGenerator;
+import com.baomidou.mybatisplus.generator.config.*;
+import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
+import com.baomidou.mybatisplus.generator.config.po.TableField;
+import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
+import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
+import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
+import com.baomidou.mybatisplus.generator.fill.Column;
+
+import java.util.Collections;
+import java.util.Scanner;
+
+// 婕旂ず渚嬪瓙锛屾墽琛� main 鏂规硶鎺у埗鍙拌緭鍏ユā鍧楄〃鍚嶅洖杞﹁嚜鍔ㄧ敓鎴愬搴旈」鐩洰褰曚腑
+public class CodeGenerator {
+
+    public static String database_url = "jdbc:mysql://1.15.17.182:9999/product-inventory-management-jtwy";
+    public static String database_username = "root";
+    public static String database_password= "xd@123456..";
+    public static String author = "鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃";
+    public static String model = "production"; // 妯″潡
+    public static String setParent = "com.ruoyi."+ model; // 鍖呰矾寰�
+    public static String tablePrefix = ""; // 璁剧疆杩囨护琛ㄥ墠缂�
+    public static void main(String[] args) {
+        String projectPath = System.getProperty("user.dir");
+        FastAutoGenerator.create(database_url, database_username, database_password)
+                // 鍏ㄥ眬閰嶇疆
+                .globalConfig(builder -> {
+                    builder.author(author) // 璁剧疆浣滆��
+                            .commentDate("yyyy-MM-dd hh:mm:ss")   //娉ㄩ噴鏃ユ湡
+                            .outputDir(projectPath  + "/src/main/java") // 鎸囧畾杈撳嚭鐩綍
+                            .disableOpenDir() //绂佹鎵撳紑杈撳嚭鐩綍锛岄粯璁ゆ墦寮�
+                            .enableSwagger() // 寮�鍚痵wagger
+
+                    ;
+                })
+                // 鏁版嵁婧愰厤缃紙鏍稿績锛氳嚜瀹氫箟绫诲瀷杞崲锛屽己鍒秚enant_id涓篖ong锛�
+                .dataSourceConfig(builder -> {
+                    builder.typeConvert(new MySqlTypeConvert() {
+                        /**
+                         * 鑷畾涔夊瓧娈电被鍨嬭浆鎹�
+                         * @param globalConfig 鍏ㄥ眬閰嶇疆
+                         * @param tableField 琛ㄥ瓧娈典俊鎭�
+                         * @return 杞崲鍚庣殑瀛楁绫诲瀷
+                         */
+                        @Override
+                        public DbColumnType processTypeConvert(GlobalConfig globalConfig, TableField tableField) {
+                            // 寮哄埗tenant_id瀛楁绫诲瀷涓篖ong
+                            if ("tenant_id".equalsIgnoreCase(tableField.getName())) {
+                                return DbColumnType.LONG;
+                            }
+                            // 鍏朵粬瀛楁浣跨敤榛樿杞崲瑙勫垯
+                            return (DbColumnType) super.processTypeConvert(globalConfig, tableField);
+                        }
+                    });
+                })
+                // 鍖呴厤缃�
+                .packageConfig(builder -> {
+                    builder.entity("pojo");
+                    builder.parent(setParent) // 璁剧疆鐖跺寘鍚�
+                            .pathInfo(Collections.singletonMap(OutputFile.xml, projectPath  +  "/src/main/resources/mapper/"+model)); // 璁剧疆mapperXml鐢熸垚璺緞
+                })
+                // 绛栫暐閰嶇疆
+                .strategyConfig(builder -> {
+                    builder.addInclude(scanner("琛ㄥ悕锛屽涓┖鏍煎垎鍓�").split(" ")) // 璁剧疆闇�瑕佺敓鎴愮殑琛ㄥ悕
+                            .addTablePrefix(tablePrefix) // 璁剧疆杩囨护琛ㄥ墠缂�
+                            // Entity 绛栫暐閰嶇疆
+                            .entityBuilder()
+                            .enableLombok() //寮�鍚� Lombok
+                            .naming(NamingStrategy.underline_to_camel)  //鏁版嵁搴撹〃鏄犲皠鍒板疄浣撶殑鍛藉悕绛栫暐锛氫笅鍒掔嚎杞┘宄板懡
+                            .columnNaming(NamingStrategy.underline_to_camel)    //鏁版嵁搴撹〃瀛楁鏄犲皠鍒板疄浣撶殑鍛藉悕绛栫暐锛氫笅鍒掔嚎杞┘宄板懡
+                            .enableFileOverride() // 瑕嗙洊宸茬粡鐢熸垚鐨凟ntity鏂囦欢
+                            .logicDeleteColumnName("state")
+                            .addTableFills(
+                                    new Column("create_time", FieldFill.INSERT),
+                                    new Column("update_time", FieldFill.INSERT_UPDATE),
+                                    new Column("create_user", FieldFill.INSERT),
+                                    new Column("update_user", FieldFill.INSERT_UPDATE),
+                                    new Column("tenant_id", FieldFill.INSERT)
+                            )
+                            .idType(IdType.AUTO) // 鑷涓婚敭
+
+                            // Mapper 绛栫暐閰嶇疆
+                            .mapperBuilder()
+                            .enableFileOverride() // 瑕嗙洊宸茬敓鎴怣apper鏂囦欢
+                            .enableBaseResultMap() // 鑷姩鐢熸垚resultMap
+                            .mapperAnnotation(org.apache.ibatis.annotations.Mapper.class)
+
+                            // Service 绛栫暐閰嶇疆
+                            .serviceBuilder()
+                            .formatServiceFileName("%sService") //鏍煎紡鍖� service 鎺ュ彛鏂囦欢鍚嶇О锛�%s杩涜鍖归厤琛ㄥ悕锛屽 UserService
+                            .formatServiceImplFileName("%sServiceImpl") //鏍煎紡鍖� service 瀹炵幇绫绘枃浠跺悕绉帮紝%s杩涜鍖归厤琛ㄥ悕锛屽 UserServiceImpl
+                            .enableFileOverride() // 瑕嗙洊宸茬敓鎴愭枃浠�
+
+                            // Controller 绛栫暐閰嶇疆
+                            .controllerBuilder()
+                            .enableFileOverride() // 瑕嗙洊宸茬敓鎴愭枃浠�
+                            .enableRestStyle() // 寮�鍚敓鎴怈RestController 鎺у埗鍣�
+                    ;
+                })
+                //5銆佹ā鏉垮紩鎿�
+                .templateEngine(new FreemarkerTemplateEngine())	//榛樿
+                .execute();
+    }
+
+    /**
+     * <p>
+     * 璇诲彇鎺у埗鍙板唴瀹�
+     * </p>
+     */
+    public static String scanner(String tip) {
+        Scanner scanner = new Scanner(System.in);
+        StringBuilder help = new StringBuilder();
+        help.append("璇疯緭鍏�" + tip + "锛�");
+        System.out.println(help.toString());
+        if (scanner.hasNext()) {
+            String ipt = scanner.next();
+
+            if (StringUtils.isNotBlank(ipt)) {
+                return ipt;
+            }
+        }
+        throw new MybatisPlusException("璇疯緭鍏ユ纭殑" + tip + "锛�");
+    }
+}
diff --git a/src/main/java/com/ruoyi/account/service/impl/AccountExpenseServiceImpl.java b/src/main/java/com/ruoyi/account/service/impl/AccountExpenseServiceImpl.java
index a3c775f..6017793 100644
--- a/src/main/java/com/ruoyi/account/service/impl/AccountExpenseServiceImpl.java
+++ b/src/main/java/com/ruoyi/account/service/impl/AccountExpenseServiceImpl.java
@@ -24,8 +24,10 @@
 import java.math.BigDecimal;
 import java.time.DayOfWeek;
 import java.time.LocalDate;
+import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.stream.Collectors;
 
 @AllArgsConstructor
 @Service
@@ -115,38 +117,87 @@
 
     @Override
     public Map<String, List<String>> analysis() {
-        // 鑾峰彇鏈懆鐨勬椂闂磋寖鍥�
-        LocalDate startOfWeek = LocalDate.now().with(DayOfWeek.MONDAY);
-        LocalDate endOfWeek = LocalDate.now().with(DayOfWeek.SUNDAY);
+        // 鑾峰彇鏈�杩戝洓涓湀锛堝綋鍓嶆湀 + 鍓�3涓湀锛夌殑鏃堕棿鑼冨洿
+        LocalDate today = LocalDate.now();
+        DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("yyyy-MM"); // 骞存湀鏍煎紡鍖栧櫒
         Map<String, List<String>> result = new HashMap<>();
-        List<String> days = new ArrayList<>();
-        List<String> totalIncomeList = new ArrayList<>();
-        List<String> totalExpenseList = new ArrayList<>();
-        List<String> netIncomeList = new ArrayList<>();
-        // 鏍规嵁鏃堕棿鑼冨洿寰幆鏌ヨ姣忎竴澶╃殑鎬绘敹鍏ワ紝鎬绘敮鍑�,鍑�鏀跺叆锛堟�绘敹鍏�-鎬绘敮鍑猴級
-        for (LocalDate date = startOfWeek; date.isBefore(endOfWeek) || date.isEqual(endOfWeek); date = date.plusDays(1)) {
-            BigDecimal totalIncome = accountIncomeMapper.selectList(Wrappers.<AccountIncome>lambdaQuery()
-                    .eq(AccountIncome::getInputTime, date.toString()))
-                    .stream()
-                    .map(AccountIncome::getIncomeMoney)
-                    .filter(Objects::nonNull)
-                    .reduce(BigDecimal.ZERO, BigDecimal::add);
-            BigDecimal totalExpense = accountExpenseMapper.selectList(Wrappers.<AccountExpense>lambdaQuery()
-                    .eq(AccountExpense::getInputTime, date.toString()))
-                    .stream()
-                    .map(AccountExpense::getExpenseMoney)
-                    .filter(Objects::nonNull)
-                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+        List<String> months = new ArrayList<>(); // 瀛樺偍骞存湀锛堝 2025-12銆�2025-11锛�
+        List<String> totalIncomeList = new ArrayList<>(); // 姣忔湀鎬绘敹鍏�
+        List<String> totalExpenseList = new ArrayList<>(); // 姣忔湀鎬绘敮鍑�
+        List<String> netIncomeList = new ArrayList<>(); // 姣忔湀鍑�鏀跺叆锛堟敹鍏�-鏀嚭锛�
+
+        // 姝ラ1锛氳绠楄繎4涓湀鐨勫勾鏈堝垪琛紙褰撳墠鏈堛�佸墠1鏈堛�佸墠2鏈堛�佸墠3鏈堬級
+        List<String> targetMonths = new ArrayList<>();
+        for (int i = 0; i < 4; i++) {
+            LocalDate currentMonth = today.minusMonths(i);
+            String monthStr = currentMonth.format(monthFormatter);
+            targetMonths.add(monthStr);
+        }
+        // 鍙嶈浆鍒楄〃锛岀‘淇濋『搴忎负銆屽墠3鏈� 鈫� 褰撳墠鏈堛�嶏紙鍙�夛紝鎸夐渶姹傝皟鏁撮『搴忥級
+        Collections.reverse(targetMonths);
+
+        // 姝ラ2锛氫竴娆℃�ф煡璇㈣繎4涓湀鎵�鏈夋敹鍏ユ暟鎹紝鎸夆�滃勾鏈堚�濆垎缁勬眹鎬�
+        LocalDate fourMonthsAgo = today.minusMonths(3).withDayOfMonth(1); // 杩�4涓湀璧峰鏃ワ紙鍓�3鏈�1鍙凤級
+        LocalDate currentMonthEnd = today.withDayOfMonth(today.lengthOfMonth()); // 褰撳墠鏈堢粨鏉熸棩
+        ZoneId zoneId = ZoneId.of("Asia/Shanghai");
+        // 鏌ヨ杩�4涓湀鎵�鏈夋敹鍏�
+        List<AccountIncome> allIncomes = accountIncomeMapper.selectList(
+                Wrappers.<AccountIncome>lambdaQuery()
+                        .ge(AccountIncome::getIncomeDate, fourMonthsAgo.toString()) // 澶т簬绛変簬璧峰鏃�
+                        .le(AccountIncome::getIncomeDate, currentMonthEnd.toString()) // 灏忎簬绛変簬缁撴潫鏃�
+        );
+
+        // 鏀跺叆鎸夆�滃勾鏈堚�濆垎缁勬眹鎬伙紙key锛氬勾鏈堝瓧绗︿覆锛寁alue锛氬綋鏈堟�绘敹鍏ワ級
+        Map<String, BigDecimal> monthlyIncomeMap = allIncomes.stream()
+                .filter(income -> income.getIncomeMoney() != null) // 杩囨护绌洪噾棰�
+                .collect(Collectors.groupingBy(
+                        income -> {
+                            // 灏嗚緭鍏ユ椂闂达紙瀛楃涓诧級杞崲涓篖ocalDate锛屽啀鏍煎紡鍖栦负骞存湀
+                            LocalDate inputDate = income.getIncomeDate().toInstant().atZone(zoneId).toLocalDate();
+                            return inputDate.format(monthFormatter);
+                        },
+                        Collectors.reducing(BigDecimal.ZERO, AccountIncome::getIncomeMoney, BigDecimal::add)
+                ));
+
+        // 姝ラ3锛氫竴娆℃�ф煡璇㈣繎4涓湀鎵�鏈夋敮鍑烘暟鎹紝鎸夆�滃勾鏈堚�濆垎缁勬眹鎬�
+        List<AccountExpense> allExpenses = accountExpenseMapper.selectList(
+                Wrappers.<AccountExpense>lambdaQuery()
+                        .ge(AccountExpense::getExpenseDate, fourMonthsAgo.toString())
+                        .le(AccountExpense::getExpenseDate, currentMonthEnd.toString())
+        );
+
+        // 鏀嚭鎸夆�滃勾鏈堚�濆垎缁勬眹鎬�
+        Map<String, BigDecimal> monthlyExpenseMap = allExpenses.stream()
+                .filter(expense -> expense.getExpenseMoney() != null) // 杩囨护绌洪噾棰�
+                .collect(Collectors.groupingBy(
+                        expense -> {
+                            LocalDate inputDate = expense.getExpenseDate().toInstant().atZone(zoneId).toLocalDate();
+                            return inputDate.format(monthFormatter);
+                        },
+                        Collectors.reducing(BigDecimal.ZERO, AccountExpense::getExpenseMoney, BigDecimal::add)
+                ));
+
+        // 姝ラ4锛氬惊鐜�4涓洰鏍囨湀浠斤紝濉厖缁熻鏁版嵁锛堟棤鏁版嵁鏃堕粯璁や负0锛�
+        for (String month : targetMonths) {
+            // 褰撴湀鎬绘敹鍏ワ紙鏃犳暟鎹垯涓�0锛�
+            BigDecimal totalIncome = monthlyIncomeMap.getOrDefault(month, BigDecimal.ZERO);
+            // 褰撴湀鎬绘敮鍑猴紙鏃犳暟鎹垯涓�0锛�
+            BigDecimal totalExpense = monthlyExpenseMap.getOrDefault(month, BigDecimal.ZERO);
+            // 褰撴湀鍑�鏀跺叆锛堟敹鍏� - 鏀嚭锛�
             BigDecimal netIncome = totalIncome.subtract(totalExpense);
-            days.add(date.toString());
+
+            // 濉厖鍒楄〃
+            months.add(month);
             totalIncomeList.add(totalIncome.toString());
             totalExpenseList.add(totalExpense.toString());
             netIncomeList.add(netIncome.toString());
         }
-        result.put("days", days);  //  澶�
-        result.put("totalIncome", totalIncomeList); // 鏀跺叆
-        result.put("totalExpense", totalExpenseList); // 鏀嚭
-        result.put("netIncome", netIncomeList); // 鍑�鏀跺叆
+
+        // 缁勮缁撴灉
+        result.put("days", months); // 骞存湀锛堝 ["2025-09", "2025-10", "2025-11", "2025-12"]锛�
+        result.put("totalIncome", totalIncomeList); // 瀵瑰簲鏈堜唤鎬绘敹鍏�
+        result.put("totalExpense", totalExpenseList); // 瀵瑰簲鏈堜唤鎬绘敮鍑�
+        result.put("netIncome", netIncomeList); // 瀵瑰簲鏈堜唤鍑�鏀跺叆
 
         return result;
     }
diff --git a/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java b/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java
index c1114bd..64177e8 100644
--- a/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java
+++ b/src/main/java/com/ruoyi/approve/pojo/ApproveProcess.java
@@ -1,6 +1,7 @@
 package com.ruoyi.approve.pojo;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.Date;
 import java.util.List;
@@ -12,6 +13,7 @@
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
 /**
  * 瀹℃壒娴佺▼琛�
@@ -135,11 +137,34 @@
     @ApiModelProperty(value = "瀹℃壒澶囨敞")
     private String approveRemark;
 
+    @Excel(name = "寮�濮嬫椂闂�", dateFormat = "yyyy-MM-dd",width = 30)
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "寮�濮嬫椂闂�")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date startDate;
+
+    @Excel(name = "缁撴潫鏃堕棿", dateFormat = "yyyy-MM-dd",width = 30)
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "缁撴潫鏃堕棿")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date endDate;
+
+    private BigDecimal price;
+
+    private String location;
+
     /**
      * 鍒涘缓鏃堕棿
      */
     private LocalDateTime createTime;
-
+    /**
+     * 璁惧鎶ヤ慨id
+     */
+    private Long deviceRepairId;
+    /**
+     * 鎶ヤ慨閲戦
+     */
+    private BigDecimal maintenancePrice;
     private static final long serialVersionUID = 1L;
 
 
diff --git a/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
index d0ff36a..f5919de 100644
--- a/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
+++ b/src/main/java/com/ruoyi/approve/service/impl/ApproveNodeServiceImpl.java
@@ -10,6 +10,8 @@
 import com.ruoyi.approve.service.IApproveNodeService;
 import com.ruoyi.common.enums.FileNameType;
 import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.device.mapper.DeviceRepairMapper;
+import com.ruoyi.device.pojo.DeviceRepair;
 import com.ruoyi.other.service.impl.TempFileServiceImpl;
 import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.mapper.SysUserMapper;
@@ -43,6 +45,9 @@
 
     @Autowired
     private CommonFileMapper fileMapper;
+    @Autowired
+    private DeviceRepairMapper deviceRepairMapper;
+
 
 
     public ApproveProcess getApproveById(String id) {
@@ -135,8 +140,21 @@
             approveProcess.setApproveUserCurrentId(approveNode1.getApproveNodeUserId());
             approveProcess.setApproveUserCurrentName(approveNode1.getApproveNodeUser());
         }
+        if(approveProcess.getApproveStatus().equals(2) || approveProcess.getApproveStatus().equals(3) || approveProcess.getApproveStatus().equals(4)){
+            approveProcess.setApproveOverTime(new Date());
+        }
         approveProcessMapper.updateById(approveProcess);
 
+        DeviceRepair deviceRepair = deviceRepairMapper.selectById(approveProcess.getDeviceRepairId());
+        if(deviceRepair == null) throw new RuntimeException("璁惧鎶ヤ慨涓嶅瓨鍦�");
+        if(approveProcess.getApproveStatus().equals(2)){
+            // 鍚屾剰
+            deviceRepair.setStatus(1);
+        }else if(approveProcess.getApproveStatus().equals(3)){
+            // 鎷掔粷
+            deviceRepair.setStatus(2);
+        }
+        deviceRepairMapper.updateById(deviceRepair);
         // 缁戝畾闄勪欢
         if(!CollectionUtils.isEmpty(approveNode.getTempFileIds()) && approveNode.getApproveNodeStatus() == 1){
             tempFileService.migrateTempFilesToFormal(approveNode.getId(), approveNode.getTempFileIds(), FileNameType.ApproveNode.getValue());
diff --git a/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
index e866bbf..404d594 100644
--- a/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
+++ b/src/main/java/com/ruoyi/approve/service/impl/ApproveProcessServiceImpl.java
@@ -15,6 +15,7 @@
 import com.ruoyi.approve.vo.ApproveGetAndUpdateVo;
 import com.ruoyi.approve.vo.ApproveProcessVO;
 import com.ruoyi.common.enums.FileNameType;
+import com.ruoyi.common.utils.OrderUtils;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.other.service.impl.TempFileServiceImpl;
 import com.ruoyi.project.system.domain.SysDept;
@@ -25,6 +26,7 @@
 import com.ruoyi.sales.pojo.CommonFile;
 import lombok.AllArgsConstructor;
 import lombok.RequiredArgsConstructor;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.data.redis.core.StringRedisTemplate;
@@ -87,6 +89,8 @@
         approveProcess.setApproveUserNames(sysUsers.stream().map(SysUser::getNickName).collect(Collectors.joining(",")));
         approveProcess.setApproveTime(StringUtils.isEmpty(approveProcessVO.getApproveTime()) ? null : dateFormat.parse(approveProcessVO.getApproveTime()));
         approveProcess.setApproveReason(approveProcessVO.getApproveReason());
+        approveProcess.setDeviceRepairId(approveProcessVO.getDeviceRepairId());
+        approveProcess.setMaintenancePrice(approveProcessVO.getMaintenancePrice());
         approveProcess.setApproveOverTime(null);
         approveProcess.setApproveStatus(0);
         approveProcess.setApproveDelete(0);
@@ -171,6 +175,7 @@
     @Override
     public void updateByApproveId(ApproveGetAndUpdateVo approveGetAndUpdateVo) throws IOException {
         ApproveProcess approve = approveProcessMapper.selectById(approveGetAndUpdateVo.getId());
+        BeanUtils.copyProperties(approveGetAndUpdateVo, approve);
         approve.setApproveUserIds(approveGetAndUpdateVo.getApproveUserIds());
         approve.setApproveReason(approveGetAndUpdateVo.getApproveReason());
         SysUser sysUser = sysUserMapper.selectUserById(approveGetAndUpdateVo.getApproveUser());
diff --git a/src/main/java/com/ruoyi/approve/vo/ApproveGetAndUpdateVo.java b/src/main/java/com/ruoyi/approve/vo/ApproveGetAndUpdateVo.java
index 69d5dea..db45394 100644
--- a/src/main/java/com/ruoyi/approve/vo/ApproveGetAndUpdateVo.java
+++ b/src/main/java/com/ruoyi/approve/vo/ApproveGetAndUpdateVo.java
@@ -1,9 +1,15 @@
 package com.ruoyi.approve.vo;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import com.ruoyi.sales.pojo.CommonFile;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import javax.validation.constraints.NotBlank;
+import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
 
 @Data
@@ -19,11 +25,29 @@
 
     private String approveUserIds;
 
+    private String approveDeptName;
+
     private Long approveUser;
 
     private String approveTime;
 
     private Integer approveStatus;
+
+    @Excel(name = "寮�濮嬫椂闂�", dateFormat = "yyyy-MM-dd",width = 30)
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "寮�濮嬫椂闂�")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date startDate;
+
+    @Excel(name = "缁撴潫鏃堕棿", dateFormat = "yyyy-MM-dd",width = 30)
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "缁撴潫鏃堕棿")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date endDate;
+
+    private BigDecimal price;
+
+    private String location;
     /**
      * 瀹℃壒绫诲瀷
      */
diff --git a/src/main/java/com/ruoyi/approve/vo/ApproveProcessVO.java b/src/main/java/com/ruoyi/approve/vo/ApproveProcessVO.java
index 1fb353e..bf8edae 100644
--- a/src/main/java/com/ruoyi/approve/vo/ApproveProcessVO.java
+++ b/src/main/java/com/ruoyi/approve/vo/ApproveProcessVO.java
@@ -1,33 +1,78 @@
 package com.ruoyi.approve.vo;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import com.ruoyi.sales.pojo.CommonFile;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import javax.validation.constraints.NotBlank;
+import java.math.BigDecimal;
+import java.util.Date;
 import java.util.List;
 
 @Data
 public class ApproveProcessVO {
-
+    /**
+     * 涓存椂鏂囦欢id鍒楄〃
+     */
     private List<String> tempFileIds;
-
+    /**
+     * 瀹℃壒娴佺▼id
+     */
     private Long id;
 
-
+    private String approveId;
+    /**
+     * 瀹℃壒閮ㄩ棬id
+     */
     private Long approveDeptId;
-
+    /**
+     * 瀹℃壒鏃堕棿
+     */
     private String approveTime;
-
+    /**
+     * 鐢宠浜篿d
+     */
     // 鐢宠浜�
     private Long approveUser;
-
+    /**
+     * 瀹℃壒浜篿d鍒楄〃
+     */
     // 瀹℃壒浜�
     private String approveUserIds;
-
+    /**
+     * 瀹℃壒鐞嗙敱
+     */
     private String approveReason;
+
+    @Excel(name = "寮�濮嬫椂闂�", dateFormat = "yyyy-MM-dd",width = 30)
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "寮�濮嬫椂闂�")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date startDate;
+
+    @Excel(name = "缁撴潫鏃堕棿", dateFormat = "yyyy-MM-dd",width = 30)
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "缁撴潫鏃堕棿")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date endDate;
+
+    private BigDecimal price;
+
+    private String location;
 
     /**
      * 瀹℃壒绫诲瀷
      */
     private Integer approveType;
+     /**
+     * 璁惧鎶ヤ慨id
+     */
+    private Long deviceRepairId;
+     /**
+     * 鎶ヤ慨閲戦
+     */
+    private BigDecimal maintenancePrice;
 }
diff --git a/src/main/java/com/ruoyi/basic/controller/ProductController.java b/src/main/java/com/ruoyi/basic/controller/ProductController.java
index 85da46e..966cb97 100644
--- a/src/main/java/com/ruoyi/basic/controller/ProductController.java
+++ b/src/main/java/com/ruoyi/basic/controller/ProductController.java
@@ -1,5 +1,6 @@
 package com.ruoyi.basic.controller;
 
+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.ruoyi.basic.dto.ProductDto;
@@ -13,7 +14,13 @@
 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.sales.pojo.SalesLedgerProduct;
+import com.ruoyi.sales.service.ISalesLedgerProductService;
+import com.ruoyi.sales.service.ISalesLedgerService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -28,8 +35,8 @@
     private IProductService productService;
 
     private IProductModelService productModelService;
-
-
+    @Autowired
+    private ISalesLedgerProductService salesLedgerProductService;
     /**
      * 鏌ヨ浜у搧
      */
@@ -73,6 +80,13 @@
         if (ids == null || ids.length == 0) {
             return AjaxResult.error("璇蜂紶鍏ヨ鍒犻櫎鐨処D");
         }
+        // 妫�鏌ユ槸鍚︽湁閿�鍞晢鍝佽褰曞叧鑱旇浜у搧
+        LambdaQueryWrapper<SalesLedgerProduct> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(SalesLedgerProduct::getProductId, ids);
+        List<SalesLedgerProduct> salesLedgerProductList = salesLedgerProductService.list(queryWrapper);
+        if (salesLedgerProductList.size() > 0) {
+            return AjaxResult.error("璇ヤ骇鍝佸瓨鍦ㄩ攢鍞�/閲囪喘璁板綍锛屼笉鑳藉垹闄�");
+        }
         return toAjax(productService.delProductByIds(ids));
     }
 
@@ -85,6 +99,13 @@
         if (ids == null || ids.length == 0) {
             return AjaxResult.error("璇蜂紶鍏ヨ鍒犻櫎鐨処D");
         }
+        // 妫�鏌ユ槸鍚︽湁閿�鍞晢鍝佽褰曞叧鑱旇浜у搧瑙勬牸鍨嬪彿
+        LambdaQueryWrapper<SalesLedgerProduct> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(SalesLedgerProduct::getProductModelId, ids);
+        List<SalesLedgerProduct> salesLedgerProductList = salesLedgerProductService.list(queryWrapper);
+        if (salesLedgerProductList.size() > 0) {
+            return AjaxResult.error("璇ヤ骇鍝佽鏍煎瀷鍙峰瓨鍦ㄩ攢鍞�/閲囪喘璁板綍锛屼笉鑳藉垹闄�");
+        }
         return toAjax(productModelService.delProductModel(ids));
     }
 
@@ -96,6 +117,12 @@
         return productModelService.modelListPage(page, productDto);
     }
 
+    @ApiOperation("鍒嗛〉鏌ヨ鎵�鏈変骇鍝佸瀷鍙�")
+    @GetMapping("/pageModel")
+    public IPage<ProductModel> listPageProductModel(Page<ProductModel> page, ProductModel productModel) {
+        return productService.listPageProductModel(page, productModel);
+    }
+
     /**
      * 瀵煎叆浜у搧
      */
diff --git a/src/main/java/com/ruoyi/basic/controller/SupplierManageFileController.java b/src/main/java/com/ruoyi/basic/controller/SupplierManageFileController.java
new file mode 100644
index 0000000..ff54830
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/controller/SupplierManageFileController.java
@@ -0,0 +1,63 @@
+package com.ruoyi.basic.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.basic.pojo.SupplierManageFile;
+import com.ruoyi.basic.service.SupplierManageFileService;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 渚涘簲鍟嗛檮浠�
+ */
+@RestController
+@RequestMapping("/basic/supplierManageFile")
+public class SupplierManageFileController {
+
+
+    @Resource
+    private SupplierManageFileService supplierManageFileService;
+
+
+    /**
+     * 鏂板
+     * @param supplierManageFile
+     * @return
+     */
+    @PostMapping("/add")
+    public AjaxResult add(@RequestBody SupplierManageFile supplierManageFile) {
+        return AjaxResult.success(supplierManageFileService.save(supplierManageFile));
+    }
+
+    /**
+     * 鍒犻櫎
+     * @param ids
+     * @return
+     */
+    @DeleteMapping("/del")
+    public AjaxResult delSupplierManageFile(@RequestBody List<Integer> ids) {
+        if(CollectionUtils.isEmpty(ids)){
+            return AjaxResult.error("璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�");
+        }
+        //鍒犻櫎妫�楠岄檮浠�
+        return AjaxResult.success(supplierManageFileService.removeBatchByIds(ids));
+    }
+
+    /**
+     *鍒嗛〉鏌ヨ
+     * @param page
+     * @param supplierManageFile
+     * @return
+     */
+    @GetMapping("/listPage")
+    public AjaxResult supplierManageFileListPage(Page page, SupplierManageFile supplierManageFile) {
+        return AjaxResult.success(supplierManageFileService.supplierManageFileListPage(page, supplierManageFile));
+    }
+
+
+
+
+}
diff --git a/src/main/java/com/ruoyi/basic/dto/ProductModelDto.java b/src/main/java/com/ruoyi/basic/dto/ProductModelDto.java
index 577d75d..53b3b5d 100644
--- a/src/main/java/com/ruoyi/basic/dto/ProductModelDto.java
+++ b/src/main/java/com/ruoyi/basic/dto/ProductModelDto.java
@@ -1,8 +1,12 @@
 package com.ruoyi.basic.dto;
 
 import com.ruoyi.basic.pojo.ProductModel;
+import com.ruoyi.production.dto.ProductStructureDto;
 import lombok.Data;
+
+import java.util.List;
 
 @Data
 public class ProductModelDto extends ProductModel {
+    private List<ProductStructureDto> productStructureList;
 }
diff --git a/src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java b/src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java
index 2248421..a1669f1 100644
--- a/src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java
+++ b/src/main/java/com/ruoyi/basic/mapper/ProductModelMapper.java
@@ -1,7 +1,10 @@
 package com.ruoyi.basic.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.basic.pojo.ProductModel;
+import org.apache.ibatis.annotations.Param;
 
 
 /**
@@ -11,5 +14,9 @@
  * @date 2025-05-19
  */
 public interface ProductModelMapper extends BaseMapper<ProductModel> {
- 
+
+    IPage<ProductModel> listPageProductModel(Page<ProductModel> page, @Param("c") ProductModel productModel);
+
+    ProductModel selectLatestRecord();
+
 }
diff --git a/src/main/java/com/ruoyi/basic/mapper/SupplierManageFileMapper.java b/src/main/java/com/ruoyi/basic/mapper/SupplierManageFileMapper.java
new file mode 100644
index 0000000..a3acd20
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/mapper/SupplierManageFileMapper.java
@@ -0,0 +1,15 @@
+package com.ruoyi.basic.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.basic.pojo.SupplierManageFile;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+@Mapper
+public interface SupplierManageFileMapper extends BaseMapper<SupplierManageFile> {
+
+
+    IPage<SupplierManageFile> supplierManageFileListPage(Page page, @Param("supplierManageFile") SupplierManageFile supplierManageFile);
+}
diff --git a/src/main/java/com/ruoyi/basic/pojo/Customer.java b/src/main/java/com/ruoyi/basic/pojo/Customer.java
index d68b918..511e691 100644
--- a/src/main/java/com/ruoyi/basic/pojo/Customer.java
+++ b/src/main/java/com/ruoyi/basic/pojo/Customer.java
@@ -31,6 +31,10 @@
      */
     @Excel(name = "瀹㈡埛鍚嶇О")
     private String customerName;
+    /** 瀹㈡埛鍒嗙被锛氶浂鍞鎴凤紝杩涢攢鍟嗗鎴� */
+
+    @Excel(name = "瀹㈡埛鍒嗙被")
+    private String customerType;
 
     /**
      * 绾崇◣浜鸿瘑鍒彿
diff --git a/src/main/java/com/ruoyi/basic/pojo/ProductModel.java b/src/main/java/com/ruoyi/basic/pojo/ProductModel.java
index 335dd3a..3e4fef7 100644
--- a/src/main/java/com/ruoyi/basic/pojo/ProductModel.java
+++ b/src/main/java/com/ruoyi/basic/pojo/ProductModel.java
@@ -5,6 +5,8 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.math.BigDecimal;
+
 @Data
 @TableName("product_model")
 public class ProductModel {
@@ -39,7 +41,22 @@
     @Excel(name = "鍗曚綅")
     private String unit;
 
+    /**
+     * 鐢熶骇鐐掓満
+     */
+    @Excel(name = "鐢熶骇鐐掓満")
+    private String speculativeTradingName;
+
     @ApiModelProperty(value = "绉熸埛ID")
     @TableField(fill = FieldFill.INSERT)
     private Long tenantId;
+    @TableField(exist = false)
+    @Excel(name = "鍏ュ簱鏁伴噺")
+    private BigDecimal inboundNum;
+    @TableField(exist = false)
+    @Excel(name = "鍑哄簱鏁伴噺")
+    private BigDecimal outboundNum;
+    @TableField(exist = false)
+    @Excel(name = "鍓╀綑搴撳瓨")
+    private BigDecimal stockQuantity;
 }
diff --git a/src/main/java/com/ruoyi/basic/pojo/SupplierManage.java b/src/main/java/com/ruoyi/basic/pojo/SupplierManage.java
index 142a6f2..a18a47b 100644
--- a/src/main/java/com/ruoyi/basic/pojo/SupplierManage.java
+++ b/src/main/java/com/ruoyi/basic/pojo/SupplierManage.java
@@ -56,6 +56,9 @@
     @JsonFormat(pattern = "yyyy-MM-dd")
 //    @Excel(name = "缁存姢鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
     private LocalDate maintainTime;
+    @Excel(name = "鏄惁鐧藉悕鍗�")
+    @ApiModelProperty(value = "鏄惁鐧藉悕鍗曪紙0鏄� 1鍚︼級")
+    private Integer isWhite;
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
     @TableField(fill = FieldFill.INSERT)
diff --git a/src/main/java/com/ruoyi/basic/pojo/SupplierManageFile.java b/src/main/java/com/ruoyi/basic/pojo/SupplierManageFile.java
new file mode 100644
index 0000000..31914fa
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/pojo/SupplierManageFile.java
@@ -0,0 +1,60 @@
+package com.ruoyi.basic.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 渚涘簲鍟嗙鐞�--闄勪欢
+ * supplier_manage_file
+ */
+@TableName(value = "supplier_manage_file")
+@Data
+public class SupplierManageFile implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 搴忓彿
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "鏂囦欢鍚嶇О")
+    private String name;
+
+    @ApiModelProperty(value = "鏂囦欢璺緞")
+    private String url;
+
+    @ApiModelProperty(value = "鏂囦欢澶у皬")
+    private int fileSize;
+
+    @ApiModelProperty(value = "渚涘簲鍟咺D")
+    @NotBlank(message = "渚涘簲鍟唅d涓嶈兘涓虹┖!")
+    private Long supplierId;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty(value = "淇敼鐢ㄦ埛")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty(value = "绉熸埛ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+
+
+}
diff --git a/src/main/java/com/ruoyi/basic/service/IProductService.java b/src/main/java/com/ruoyi/basic/service/IProductService.java
index cd9bdff..7fba662 100644
--- a/src/main/java/com/ruoyi/basic/service/IProductService.java
+++ b/src/main/java/com/ruoyi/basic/service/IProductService.java
@@ -1,9 +1,12 @@
 package com.ruoyi.basic.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.basic.dto.ProductDto;
 import com.ruoyi.basic.dto.ProductTreeDto;
 import com.ruoyi.basic.pojo.Product;
+import com.ruoyi.basic.pojo.ProductModel;
 
 import java.util.List;
 
@@ -15,4 +18,5 @@
 
     List<ProductTreeDto> selectProductList(ProductDto productDto);
 
+    IPage<ProductModel> listPageProductModel(Page<ProductModel> page, ProductModel productModel);
 }
diff --git a/src/main/java/com/ruoyi/basic/service/SupplierManageFileService.java b/src/main/java/com/ruoyi/basic/service/SupplierManageFileService.java
new file mode 100644
index 0000000..2cea459
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/service/SupplierManageFileService.java
@@ -0,0 +1,12 @@
+package com.ruoyi.basic.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.basic.pojo.SupplierManageFile;
+
+public interface SupplierManageFileService extends IService<SupplierManageFile> {
+
+
+    IPage<SupplierManageFile> supplierManageFileListPage(Page page, SupplierManageFile supplierManageFile);
+}
diff --git a/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
index 899e21f..f24a2d2 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
@@ -74,9 +74,13 @@
         // 2. 鏋勫缓鏌ヨ鏉′欢锛堝寮虹┖鍊煎畨鍏級
         LambdaQueryWrapper<Customer> queryWrapper = new LambdaQueryWrapper<>();
         String customerName = customer.getCustomerName();
+        String customerType = customer.getCustomerType();
         if (StringUtils.isNotBlank(customerName)) {
             queryWrapper.like(Customer::getCustomerName, customerName);
         }
+        if (StringUtils.isNotBlank(customerType)) {
+            queryWrapper.like(Customer::getCustomerType, customerType);
+        }
 
         // 3. 鎵ц鍒嗛〉鏌ヨ锛堜繚鐣欏垎椤靛厓鏁版嵁锛�
         IPage<Customer> customerPage = customerMapper.selectPage(page, queryWrapper);
diff --git a/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
index dc6d3e9..cf9ef84 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/ProductModelServiceImpl.java
@@ -14,12 +14,15 @@
 import com.ruoyi.basic.service.IProductModelService;
 import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.utils.uuid.IdUtils;
 import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
 import com.ruoyi.sales.pojo.SalesLedgerProduct;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
@@ -51,6 +54,8 @@
         }
     }
 
+
+
     @Override
     public int delProductModel(Long[] ids) {
         List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(new QueryWrapper<SalesLedgerProduct>()
diff --git a/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java
index f810a2c..62feb23 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/ProductServiceImpl.java
@@ -1,6 +1,8 @@
 package com.ruoyi.basic.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.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.basic.dto.ProductDto;
@@ -63,6 +65,10 @@
         return tree;
     }
 
+    @Override
+    public IPage<ProductModel> listPageProductModel(Page<ProductModel> page, ProductModel productModel) {
+        return productModelMapper.listPageProductModel(page, productModel);
+    }
 
 
     // 閫掑綊鏋勫缓瀛愯妭鐐�
diff --git a/src/main/java/com/ruoyi/basic/service/impl/StorageAttachmentServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/StorageAttachmentServiceImpl.java
index 0d126c7..b1c2ca5 100644
--- a/src/main/java/com/ruoyi/basic/service/impl/StorageAttachmentServiceImpl.java
+++ b/src/main/java/com/ruoyi/basic/service/impl/StorageAttachmentServiceImpl.java
@@ -80,7 +80,7 @@
     @Override
     public void saveStorageAttachment(List<StorageAttachment> attachments, Long recordId, StorageAttachmentRecordType recordType, String fileType) {
         // 鍒犻櫎鏃у浘
-        deleteStorageAttachment(new StorageAttachment(fileType, (long) recordType.ordinal(), recordId));
+//        deleteStorageAttachment(new StorageAttachment(fileType, (long) recordType.ordinal(), recordId));
         for (StorageAttachment attachment : attachments) {
             // 鑾峰彇鍏宠仈璁板綍
             StorageBlob storageBlob = attachment.getStorageBlobDTO();
diff --git a/src/main/java/com/ruoyi/basic/service/impl/SupplierManageFileServiceImpl.java b/src/main/java/com/ruoyi/basic/service/impl/SupplierManageFileServiceImpl.java
new file mode 100644
index 0000000..93fe71d
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/service/impl/SupplierManageFileServiceImpl.java
@@ -0,0 +1,23 @@
+package com.ruoyi.basic.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.basic.mapper.SupplierManageFileMapper;
+import com.ruoyi.basic.pojo.SupplierManageFile;
+import com.ruoyi.basic.service.SupplierManageFileService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+@AllArgsConstructor
+@Service
+public class SupplierManageFileServiceImpl extends ServiceImpl<SupplierManageFileMapper, SupplierManageFile> implements SupplierManageFileService {
+
+    private SupplierManageFileMapper supplierManageFileMapper;
+
+    @Override
+    public IPage<SupplierManageFile> supplierManageFileListPage(Page page, SupplierManageFile supplierManageFile) {
+        return supplierManageFileMapper.supplierManageFileListPage(page, supplierManageFile);
+    }
+}
diff --git a/src/main/java/com/ruoyi/collaborativeApproval/pojo/Notice.java b/src/main/java/com/ruoyi/collaborativeApproval/pojo/Notice.java
index cc9f926..35eb6c0 100644
--- a/src/main/java/com/ruoyi/collaborativeApproval/pojo/Notice.java
+++ b/src/main/java/com/ruoyi/collaborativeApproval/pojo/Notice.java
@@ -33,7 +33,7 @@
      * 鍏憡绫诲瀷锛�1鏀惧亣閫氱煡 2璁惧缁翠慨閫氱煡锛�
      */
     @ApiModelProperty("鍏憡绫诲瀷锛�1鏀惧亣閫氱煡 2璁惧缁翠慨閫氱煡锛�")
-        private Integer type;
+    private String type;
 
     /**
      * 鐘舵�侊紙0鑽夌 1鍙戝竷 2宸蹭笅绾匡級
@@ -53,6 +53,7 @@
     @ApiModelProperty("浼樺厛绾�(1鏅�� 2閲嶈 3绱ф��)")
     private Integer priority;
 
+
     /**
      * 杩囨湡鏃堕棿
      */
diff --git a/src/main/java/com/ruoyi/collaborativeApproval/service/impl/NoticeServiceImpl.java b/src/main/java/com/ruoyi/collaborativeApproval/service/impl/NoticeServiceImpl.java
index d6504a1..1cdd838 100644
--- a/src/main/java/com/ruoyi/collaborativeApproval/service/impl/NoticeServiceImpl.java
+++ b/src/main/java/com/ruoyi/collaborativeApproval/service/impl/NoticeServiceImpl.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.collaborativeApproval.dto.NoticeDTO;
@@ -10,6 +11,7 @@
 import com.ruoyi.collaborativeApproval.service.NoticeService;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -40,17 +42,14 @@
 
     @Override
     public List<NoticeDTO> selectCount() {
+        List<Notice> notices = noticeMapper.selectList(Wrappers.lambdaQuery(Notice.class).groupBy(Notice::getType));
         List<NoticeDTO> result = new ArrayList<>();
-        NoticeDTO notice = new NoticeDTO();
-        notice.setType(1);
-        notice.setCount(noticeMapper.selectCount(new LambdaQueryWrapper<Notice>().eq(Notice::getType, 1)));
-        result.add(notice);
-
-        NoticeDTO notice1 = new NoticeDTO();
-        notice1.setType(2);
-        notice1.setCount(noticeMapper.selectCount(new LambdaQueryWrapper<Notice>().eq(Notice::getType, 2)));
-        result.add(notice1);
-
+        for (Notice notice : notices) {
+            NoticeDTO notice1 = new NoticeDTO();
+            BeanUtils.copyProperties(notice, notice1);
+            notice1.setCount(noticeMapper.selectCount(new LambdaQueryWrapper<Notice>().eq(Notice::getType, notice.getType())));
+            result.add(notice1);
+        }
         return result;
     }
 }
diff --git a/src/main/java/com/ruoyi/common/config/MybatisHandler.java b/src/main/java/com/ruoyi/common/config/MybatisHandler.java
index 71d9b56..adfaf53 100644
--- a/src/main/java/com/ruoyi/common/config/MybatisHandler.java
+++ b/src/main/java/com/ruoyi/common/config/MybatisHandler.java
@@ -18,7 +18,6 @@
             tenantId = SecurityUtils.getLoginUser().getTenantId();
         } catch (Exception ignored) {
         }
-        System.out.println("鎵ц鎻掑叆濉厖...");
         this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
         this.strictInsertFill(metaObject, "updateTime",  LocalDateTime.class, LocalDateTime.now());
         this.strictInsertFill(metaObject, "createUser", Integer.class, userId);
@@ -36,4 +35,4 @@
         this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 璧峰鐗堟湰 3.3.0(鎺ㄨ崘)
         this.strictUpdateFill(metaObject, "updateUser", Integer.class, userId);
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/java/com/ruoyi/common/utils/OrderUtils.java b/src/main/java/com/ruoyi/common/utils/OrderUtils.java
index 42c154d..9520b75 100644
--- a/src/main/java/com/ruoyi/common/utils/OrderUtils.java
+++ b/src/main/java/com/ruoyi/common/utils/OrderUtils.java
@@ -51,5 +51,6 @@
         // 鎵ц鏌ヨ
         Long aLong = mapper.selectCount(queryWrapper);
         // 鎷兼帴璁㈠崟缂栧彿 preFix + 鏃堕棿锛坹yyyMMdd锛� + 璁㈠崟鏁伴噺(001)
-        return preFix + LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE).replaceAll("-", "") + String.format("%03d", (aLong + 1));}
+        return preFix + LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE).replaceAll("-", "") + String.format("%03d", (aLong + 1));
+    }
 }
diff --git a/src/main/java/com/ruoyi/common/vo/FileVo.java b/src/main/java/com/ruoyi/common/vo/FileVo.java
index 8a6ef19..bc7adb8 100644
--- a/src/main/java/com/ruoyi/common/vo/FileVo.java
+++ b/src/main/java/com/ruoyi/common/vo/FileVo.java
@@ -29,5 +29,5 @@
     @ApiModelProperty(value = "淇敼鐢ㄦ埛")
     private Integer updateUser;
 
-    private Integer id;
+    private Long id;
 }
diff --git a/src/main/java/com/ruoyi/compensationperformance/controller/CompensationPerformanceController.java b/src/main/java/com/ruoyi/compensationperformance/controller/CompensationPerformanceController.java
index 84fdbe5..e1faffb 100644
--- a/src/main/java/com/ruoyi/compensationperformance/controller/CompensationPerformanceController.java
+++ b/src/main/java/com/ruoyi/compensationperformance/controller/CompensationPerformanceController.java
@@ -1,5 +1,6 @@
 package com.ruoyi.compensationperformance.controller;
 
+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.ruoyi.common.utils.poi.ExcelUtil;
@@ -9,16 +10,23 @@
 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.project.system.domain.SysUser;
+import com.ruoyi.project.system.mapper.SysUserMapper;
 import com.ruoyi.purchase.dto.PaymentRegistrationDto;
+import com.ruoyi.staff.mapper.StaffOnJobMapper;
+import com.ruoyi.staff.pojo.StaffOnJob;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @author :yys
@@ -76,5 +84,31 @@
         util.exportExcel(response, list, "瀵煎嚭钖祫绠$悊鍒楄〃");
     }
 
+    @Log(title = "涓嬭浇钖祫绠$悊鍒楄〃妯℃澘", businessType = BusinessType.EXPORT)
+    @PostMapping("/exportTemplate")
+    public void exportTemplate(HttpServletResponse response) {
+        List<CompensationPerformance> list = new ArrayList<>();
+        ExcelUtil<CompensationPerformance> util = new ExcelUtil<>(CompensationPerformance.class);
+        util.exportExcel(response, list, "涓嬭浇钖祫绠$悊鍒楄〃妯℃澘");
+    }
+
+    @Autowired
+    private SysUserMapper sysUserMapper;
+
+    @Log(title = "瀵煎叆钖祫绠$悊鍒楄〃", businessType = BusinessType.IMPORT)
+    @PostMapping("/importData")
+    public AjaxResult importData(MultipartFile file) throws Exception {
+        ExcelUtil<CompensationPerformance> util = new ExcelUtil<>(CompensationPerformance.class);
+        List<CompensationPerformance> list = util.importExcel(file.getInputStream());
+        list.forEach(item->{
+            SysUser staffOnJob = sysUserMapper.selectUserByNickName(item.getName());
+            if(staffOnJob!=null){
+                item.setStaffId(staffOnJob.getUserId());
+            }
+        });
+        boolean b = compensationPerformanceService.saveBatch(list);
+        return AjaxResult.success(b);
+    }
+
 
 }
diff --git a/src/main/java/com/ruoyi/compensationperformance/pojo/CompensationPerformance.java b/src/main/java/com/ruoyi/compensationperformance/pojo/CompensationPerformance.java
index 499d75a..84d6138 100644
--- a/src/main/java/com/ruoyi/compensationperformance/pojo/CompensationPerformance.java
+++ b/src/main/java/com/ruoyi/compensationperformance/pojo/CompensationPerformance.java
@@ -28,9 +28,9 @@
     private Long id;
 
     /**
-     * 鍛樺伐id
+     * 鐢ㄦ埛id
      */
-    @ApiModelProperty("鍛樺伐id")
+    @ApiModelProperty("鐢ㄦ埛id")
     private Long staffId;
 
     /**
@@ -61,14 +61,14 @@
      * 搴斿嚭鍕ゅぉ鏁�
      */
     @ApiModelProperty("搴斿嚭鍕ゅぉ鏁�")
-    @Excel(name = "搴斿嚭鍕ゅぉ鏁�")
+//    @Excel(name = "搴斿嚭鍕ゅぉ鏁�")
     private BigDecimal shouldAttendedNum;
 
     /**
      * 瀹為檯鍑哄嫟澶╂暟
      */
     @ApiModelProperty("瀹為檯鍑哄嫟澶╂暟")
-    @Excel(name = "瀹為檯鍑哄嫟澶╂暟")
+//    @Excel(name = "瀹為檯鍑哄嫟澶╂暟")
     private BigDecimal actualAttendedNum;
 
 
@@ -76,21 +76,21 @@
      * 鍩烘湰宸ヨ祫
      */
     @ApiModelProperty("鍩烘湰宸ヨ祫")
-    @Excel(name = "鍩烘湰宸ヨ祫")
+//    @Excel(name = "鍩烘湰宸ヨ祫")
     private BigDecimal basicSalary;
 
     /**
      * 宀椾綅宸ヨ祫
      */
     @ApiModelProperty("宀椾綅宸ヨ祫")
-    @Excel(name = "宀椾綅宸ヨ祫")
+//    @Excel(name = "宀椾綅宸ヨ祫")
     private BigDecimal postSalary;
 
     /**
      * 鍏ョ鑱岀己鍕ゆ墸娆�
      */
     @ApiModelProperty("鍏ョ鑱岀己鍕ゆ墸娆�")
-    @Excel(name = "鍏ョ鑱岀己鍕ゆ墸娆�")
+//    @Excel(name = "鍏ョ鑱岀己鍕ゆ墸娆�")
     private BigDecimal deductionAbsenteeism;
 
 
@@ -98,34 +98,34 @@
      * 鐥呭亣鎵f
      */
     @ApiModelProperty("鐥呭亣鎵f")
-    @Excel(name = "鐥呭亣鎵f")
+//    @Excel(name = "鐥呭亣鎵f")
     private BigDecimal sickLeaveDeductions;
 
     /**
      * 浜嬪亣鎵f
      */
     @ApiModelProperty("浜嬪亣鎵f")
-    @Excel(name = "浜嬪亣鎵f")
+//    @Excel(name = "浜嬪亣鎵f")
     private BigDecimal deductionPersonalLeave;
     /**
      * 蹇樿鎵撳崱鎵f
      */
     @ApiModelProperty("蹇樿鎵撳崱鎵f")
-    @Excel(name = "蹇樿鎵撳崱鎵f")
+//    @Excel(name = "蹇樿鎵撳崱鎵f")
     private BigDecimal forgetClockDeduct;
 
     /**
      * 缁╂晥寰楀垎
      */
     @ApiModelProperty("缁╂晥寰楀垎")
-    @Excel(name = "缁╂晥寰楀垎")
+//    @Excel(name = "缁╂晥寰楀垎")
     private BigDecimal performanceScore;
 
     /**
      * 缁╂晥宸ヨ祫
      */
     @ApiModelProperty("缁╂晥宸ヨ祫")
-    @Excel(name = "缁╂晥宸ヨ祫")
+//    @Excel(name = "缁╂晥宸ヨ祫")
     private BigDecimal performancePay;
 
 
@@ -133,67 +133,67 @@
      * 搴斿彂鍚堣
      */
     @ApiModelProperty("搴斿彂鍚堣")
-    @Excel(name = "搴斿彂鍚堣")
+//    @Excel(name = "搴斿彂鍚堣")
     private BigDecimal payableWages;
 
     /**
      * 绀句繚涓汉
      */
     @ApiModelProperty("绀句繚涓汉")
-    @Excel(name = "绀句繚涓汉")
+//    @Excel(name = "绀句繚涓汉")
     private BigDecimal socialSecurityIndividuals;
     /**
      * 绀句繚鍏徃
      */
     @ApiModelProperty("绀句繚鍏徃")
-    @Excel(name = "绀句繚鍏徃")
+//    @Excel(name = "绀句繚鍏徃")
     private BigDecimal socialSecurityCompanies;
 
     /**
      * 绀句繚鍚堣
      */
     @ApiModelProperty("绀句繚鍚堣")
-    @Excel(name = "绀句繚鍚堣")
+//    @Excel(name = "绀句繚鍚堣")
     private BigDecimal socialSecurityTotal;
 
     /**
      * 鍏Н閲戝悎璁�
      */
     @ApiModelProperty("鍏Н閲戝悎璁�")
-    @Excel(name = "鍏Н閲戝悎璁�")
+//    @Excel(name = "鍏Н閲戝悎璁�")
     private BigDecimal providentFundTotal;
     /**
      * 鍏Н閲戝叕鍙�
      */
     @ApiModelProperty("鍏Н閲戝叕鍙�")
-    @Excel(name = "鍏Н閲戝叕鍙�")
+//    @Excel(name = "鍏Н閲戝叕鍙�")
     private BigDecimal providentFundCompany;
 
     /**
      * 鍏Н閲戜釜浜�
      */
     @ApiModelProperty("鍏Н閲戜釜浜�")
-    @Excel(name = "鍏Н閲戜釜浜�")
+//    @Excel(name = "鍏Н閲戜釜浜�")
     private BigDecimal providentFundIndividuals;
 
     /**
      * 搴旂◣宸ヨ祫
      */
     @ApiModelProperty("搴旂◣宸ヨ祫")
-    @Excel(name = "搴旂◣宸ヨ祫")
+//    @Excel(name = "搴旂◣宸ヨ祫")
     private BigDecimal taxableWaget;
     /**
      * 涓汉鎵�寰楃◣
      */
     @ApiModelProperty("涓汉鎵�寰楃◣")
-    @Excel(name = "涓汉鎵�寰楃◣")
+//    @Excel(name = "涓汉鎵�寰楃◣")
     private BigDecimal personalIncomeTax;
 
     /**
      * 瀹炲彂宸ヨ祫
      */
     @ApiModelProperty("瀹炲彂宸ヨ祫")
-    @Excel(name = "瀹炲彂宸ヨ祫")
+    @Excel(name = "瀹炲彂宸ヨ祫", width = 30)
     private BigDecimal actualWages;
 
     /**
diff --git a/src/main/java/com/ruoyi/device/controller/DeviceLedgerController.java b/src/main/java/com/ruoyi/device/controller/DeviceLedgerController.java
index f00595f..2907826 100644
--- a/src/main/java/com/ruoyi/device/controller/DeviceLedgerController.java
+++ b/src/main/java/com/ruoyi/device/controller/DeviceLedgerController.java
@@ -84,7 +84,14 @@
     public void export(HttpServletResponse response, Long[] ids) {
          deviceLedgerService.export(response, ids);
     }
-
+    /**
+     *
+     */
+    @GetMapping("/report/forms")
+    @ApiOperation("鏌ヨ璁惧鍙拌处鍥捐〃鏁版嵁")
+    public AjaxResult report() {
+        return AjaxResult.success(deviceLedgerService.report());
+    }
     @PostMapping("import")
     @ApiModelProperty("瀵煎叆璁惧鍙拌处")
     public AjaxResult importData(MultipartFile file) throws IOException {
diff --git a/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java b/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java
index 47521e7..bf241b1 100644
--- a/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java
+++ b/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java
@@ -68,7 +68,6 @@
     @PostMapping ("maintenance")
     @ApiModelProperty("淇敼璁惧淇濆吇")
     public AjaxResult maintenance(@RequestBody DeviceMaintenance deviceMaintenance) {
-        deviceMaintenance.setStatus(1);
         return deviceMaintenanceService.updateDeviceDeviceMaintenance(deviceMaintenance);
     }
 
diff --git a/src/main/java/com/ruoyi/device/dto/DeviceAssetInfoDto.java b/src/main/java/com/ruoyi/device/dto/DeviceAssetInfoDto.java
new file mode 100644
index 0000000..d451e2d
--- /dev/null
+++ b/src/main/java/com/ruoyi/device/dto/DeviceAssetInfoDto.java
@@ -0,0 +1,28 @@
+package com.ruoyi.device.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 璁惧璧勪骇淇℃伅Dto-璧勪骇鎶ヨ〃
+ */
+@Data
+public class DeviceAssetInfoDto {
+    /**
+     * 璁惧鎬绘暟
+     */
+    private Integer totalEquipment;
+    /**
+     * 璧勪骇鍘熷��
+     */
+    private BigDecimal totalOriginalValue;
+    /**
+     * 绱鎶樻棫
+     */
+    private BigDecimal totalDepreciation;
+    /**
+     * 鍑�鍊�
+     */
+    private BigDecimal totalNetValue;
+}
diff --git a/src/main/java/com/ruoyi/device/dto/DeviceLedgerDto.java b/src/main/java/com/ruoyi/device/dto/DeviceLedgerDto.java
index 26bdc91..604001d 100644
--- a/src/main/java/com/ruoyi/device/dto/DeviceLedgerDto.java
+++ b/src/main/java/com/ruoyi/device/dto/DeviceLedgerDto.java
@@ -37,6 +37,19 @@
     private String deviceModel;
 
     /**
+     * 璁惧鍝佺墝
+     */
+    @ApiModelProperty("璁惧鍝佺墝")
+    private String deviceBrand;
+
+    /**
+     * 瀛樻斁浣嶇疆
+     */
+    @ApiModelProperty("瀛樻斁浣嶇疆")
+    private String storageLocation;
+
+
+    /**
      * 渚涘簲鍟嗗悕绉�
      */
     private String supplierName;
diff --git a/src/main/java/com/ruoyi/device/dto/DeviceMaintenanceDto.java b/src/main/java/com/ruoyi/device/dto/DeviceMaintenanceDto.java
index f1bc18e..7299b26 100644
--- a/src/main/java/com/ruoyi/device/dto/DeviceMaintenanceDto.java
+++ b/src/main/java/com/ruoyi/device/dto/DeviceMaintenanceDto.java
@@ -14,7 +14,6 @@
 
 
     @ApiModelProperty("璁惧淇濆吇id")
-
     private Long id;
 
     @ApiModelProperty("璁惧淇濆吇閲戦")
@@ -45,9 +44,9 @@
     private String maintenanceActuallyTimeReq;
 
     @ApiModelProperty("淇濆吇缁撴灉 0 缁翠慨 1 瀹屽ソ")
-    private Integer maintenanceResult;
+    private String maintenanceResult;
 
-    @ApiModelProperty("鐘舵�� 0 寰呬繚鍏� 1 瀹岀粨")
+    @ApiModelProperty("鐘舵�� 0 寰呬繚鍏� 1 瀹岀粨 2 澶辫触")
     private Integer status;
 
     @ApiModelProperty("鍒涘缓鏃堕棿")
diff --git a/src/main/java/com/ruoyi/device/dto/DeviceRepairDto.java b/src/main/java/com/ruoyi/device/dto/DeviceRepairDto.java
index 560d87e..b4ad567 100644
--- a/src/main/java/com/ruoyi/device/dto/DeviceRepairDto.java
+++ b/src/main/java/com/ruoyi/device/dto/DeviceRepairDto.java
@@ -3,6 +3,7 @@
 
 import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -72,7 +73,7 @@
     @ApiModelProperty("绉熸埛id")
     @TableField(fill = FieldFill.INSERT)
     private Long tenantId;
-
-
+    @ApiModelProperty("缁翠慨浠锋牸")
+    private String maintenancePrice;
 }
 
diff --git a/src/main/java/com/ruoyi/device/execl/DeviceMaintenanceExeclDto.java b/src/main/java/com/ruoyi/device/execl/DeviceMaintenanceExeclDto.java
index 8bf980a..e276703 100644
--- a/src/main/java/com/ruoyi/device/execl/DeviceMaintenanceExeclDto.java
+++ b/src/main/java/com/ruoyi/device/execl/DeviceMaintenanceExeclDto.java
@@ -43,7 +43,7 @@
     @Excel(name = "淇濆吇缁撴灉")
     private String maintenanceResult;
 
-    @ApiModelProperty("鐘舵�� 0 寰呬繚鍏� 1 瀹岀粨")
+    @ApiModelProperty("鐘舵�� 0 寰呬繚鍏� 1 瀹岀粨 2 澶辫触")
     @Excel(name = "鐘舵��")
     private String status;
 
diff --git a/src/main/java/com/ruoyi/device/pojo/DeviceLedger.java b/src/main/java/com/ruoyi/device/pojo/DeviceLedger.java
index caa8f32..785cf91 100644
--- a/src/main/java/com/ruoyi/device/pojo/DeviceLedger.java
+++ b/src/main/java/com/ruoyi/device/pojo/DeviceLedger.java
@@ -41,6 +41,18 @@
     private String deviceModel;
 
     /**
+     * 璁惧鍝佺墝
+     */
+    @ApiModelProperty("璁惧鍝佺墝")
+    private String deviceBrand;
+
+    /**
+     * 瀛樻斁浣嶇疆
+     */
+    @ApiModelProperty("瀛樻斁浣嶇疆")
+    private String storageLocation;
+
+    /**
      * 渚涘簲鍟嗗悕绉�
      */
     private String supplierName;
diff --git a/src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java b/src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java
index 4b7a971..c69570b 100644
--- a/src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java
+++ b/src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java
@@ -45,9 +45,9 @@
     private LocalDateTime maintenanceActuallyTime;
 
     @ApiModelProperty("淇濆吇缁撴灉 0 缁翠慨 1 瀹屽ソ")
-    private Integer maintenanceResult;
+    private String maintenanceResult;
 
-    @ApiModelProperty("鐘舵�� 0 寰呬繚鍏� 1 瀹岀粨")
+    @ApiModelProperty("鐘舵�� 0 寰呬繚鍏� 1 瀹岀粨 2 澶辫触")
     private Integer status;
 
     @ApiModelProperty("鍒涘缓鏃堕棿")
diff --git a/src/main/java/com/ruoyi/device/service/IDeviceLedgerService.java b/src/main/java/com/ruoyi/device/service/IDeviceLedgerService.java
index 22ec2d2..d800b14 100644
--- a/src/main/java/com/ruoyi/device/service/IDeviceLedgerService.java
+++ b/src/main/java/com/ruoyi/device/service/IDeviceLedgerService.java
@@ -3,6 +3,7 @@
 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.device.dto.DeviceAssetInfoDto;
 import com.ruoyi.device.dto.DeviceLedgerDto;
 import com.ruoyi.device.pojo.DeviceLedger;
 import com.ruoyi.framework.web.domain.AjaxResult;
@@ -22,4 +23,5 @@
     void export(HttpServletResponse response, Long[] ids);
 
     Boolean importData(MultipartFile file) throws IOException;
+    DeviceAssetInfoDto report();
 }
diff --git a/src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java b/src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java
index de85cad..444993c 100644
--- a/src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java
@@ -8,6 +8,7 @@
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.device.dto.DeviceAssetInfoDto;
 import com.ruoyi.device.dto.DeviceLedgerDto;
 import com.ruoyi.device.execl.DeviceLedgerExeclDto;
 import com.ruoyi.device.mapper.DeviceLedgerMapper;
@@ -24,6 +25,7 @@
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.math.BigDecimal;
 import java.time.ZoneOffset;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -47,11 +49,11 @@
 
     @Override
     public AjaxResult saveDeviceLedger(DeviceLedger deviceLedger) {
-//        LambdaQueryWrapper<DeviceLedger> deviceLedgerLambdaQueryWrapper = new LambdaQueryWrapper<>();
-//        deviceLedgerLambdaQueryWrapper.eq(DeviceLedger::getDeviceModel,deviceLedger.getDeviceModel());
-//        if (this.count(deviceLedgerLambdaQueryWrapper) > 0) {
-//            return AjaxResult.error("璁惧鍨嬪彿宸插瓨鍦�");
-//        }
+        LambdaQueryWrapper<DeviceLedger> deviceLedgerLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        deviceLedgerLambdaQueryWrapper.eq(DeviceLedger::getDeviceName,deviceLedger.getDeviceName());
+        if (this.count(deviceLedgerLambdaQueryWrapper) > 0) {
+            return AjaxResult.error("璁惧鍚嶇О宸插瓨鍦�");
+        }
         boolean save = this.save(deviceLedger);
         if (save){
             return AjaxResult.success();
@@ -119,4 +121,14 @@
 
         return true;
     }
+    @Override
+    public DeviceAssetInfoDto report() {
+        List<DeviceLedger> list = deviceLedgerMapper.selectList(null);
+        DeviceAssetInfoDto deviceAssetInfoDto = new DeviceAssetInfoDto();
+        deviceAssetInfoDto.setTotalEquipment(list.stream().map(DeviceLedger::getNumber).reduce(BigDecimal.ZERO, BigDecimal::add).intValue());
+        deviceAssetInfoDto.setTotalOriginalValue(list.stream().map(DeviceLedger::getTaxIncludingPriceTotal).reduce(BigDecimal.ZERO, BigDecimal::add));
+        deviceAssetInfoDto.setTotalNetValue(list.stream().map(DeviceLedger::getUnTaxIncludingPriceTotal).reduce(BigDecimal.ZERO, BigDecimal::add));
+        deviceAssetInfoDto.setTotalDepreciation(deviceAssetInfoDto.getTotalOriginalValue().subtract(deviceAssetInfoDto.getTotalNetValue()));
+        return deviceAssetInfoDto;
+    }
 }
diff --git a/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java b/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java
index 8cfe235..1a61811 100644
--- a/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java
+++ b/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java
@@ -65,9 +65,8 @@
         supplierManageList.forEach(deviceMaintenance -> {
             DeviceMaintenanceExeclDto deviceRepairExeclDto = new DeviceMaintenanceExeclDto();
             BeanUtils.copyProperties(deviceMaintenance,deviceRepairExeclDto);
-            deviceRepairExeclDto.setStatus(deviceMaintenance.getStatus() == 0 ? "寰呯淮淇�" : "瀹岀粨");
-            deviceRepairExeclDto.setMaintenanceResult(deviceMaintenance.getMaintenanceResult() != null && deviceMaintenance.getMaintenanceResult() == 0 ? "缁翠慨" : "瀹屽ソ");
-
+            deviceRepairExeclDto.setStatus(deviceMaintenance.getStatus() == 0 ? "寰呯淮淇�" : deviceMaintenance.getStatus() == 1 ? "瀹岀粨" : "澶辫触");
+//            deviceRepairExeclDto.setMaintenanceResult(deviceMaintenance.getMaintenanceResult() != null && deviceMaintenance.getMaintenanceResult() == 0 ? "缁翠慨" : "瀹屽ソ");
             deviceLedgerExeclDtos.add(deviceRepairExeclDto);
         });
         ExcelUtil<DeviceMaintenanceExeclDto> util = new ExcelUtil<DeviceMaintenanceExeclDto>(DeviceMaintenanceExeclDto.class);
diff --git a/src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java b/src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java
index c771b47..54da4fe 100644
--- a/src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java
+++ b/src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java
@@ -89,7 +89,7 @@
             supplierManageList.stream().forEach(deviceRepair -> {
                 DeviceRepairExeclDto deviceRepairExeclDto = new DeviceRepairExeclDto();
                 BeanUtils.copyProperties(deviceRepair,deviceRepairExeclDto);
-                deviceRepairExeclDto.setStatusStr(deviceRepair.getStatus() == 0 ? "寰呯淮淇�" : "瀹岀粨");
+                deviceRepairExeclDto.setStatusStr(deviceRepair.getStatus() == 0 ? "寰呯淮淇�" : deviceRepair.getStatus() == 1 ? "瀹岀粨" : "澶辫触");
 
                 deviceLedgerExeclDtos.add(deviceRepairExeclDto);
             });
@@ -105,7 +105,7 @@
             supplierManageList.stream().forEach(deviceRepair -> {
                 DeviceRepairExeclDto deviceRepairExeclDto = new DeviceRepairExeclDto();
                 BeanUtils.copyProperties(deviceRepair,deviceRepairExeclDto);
-                deviceRepairExeclDto.setStatusStr(deviceRepair.getStatus() == 0 ? "寰呯淮淇�" : "瀹岀粨");
+                deviceRepairExeclDto.setStatusStr(deviceRepair.getStatus() == 0 ? "寰呯淮淇�" : deviceRepair.getStatus() == 1 ? "瀹岀粨" : "澶辫触");
 
                 deviceLedgerExeclDtos.add(deviceRepairExeclDto);
             });
diff --git a/src/main/java/com/ruoyi/dto/WordDateDto.java b/src/main/java/com/ruoyi/dto/WordDateDto.java
new file mode 100644
index 0000000..09bd0be
--- /dev/null
+++ b/src/main/java/com/ruoyi/dto/WordDateDto.java
@@ -0,0 +1,48 @@
+package com.ruoyi.dto;
+
+import com.ruoyi.staff.pojo.StaffOnJob;
+import lombok.Data;
+
+/**
+ * @author :yys
+ * @date : 2025/11/5 14:34
+ */
+@Data
+public class WordDateDto extends StaffOnJob {
+
+    // 鍚堝悓鏃ユ湡鐩稿叧
+    private String qyear;       // 绛捐鏃ユ湡-骞�
+    private String qmoth;       // 绛捐鏃ユ湡-鏈堬紙娉ㄦ剰鍘熸枃妗f嫾鍐欙細qmoth=month锛�
+    private String qday;        // 绛捐鏃ユ湡-鏃�
+
+    private String syear = "";       // 鍚堝悓寮�濮嬪勾
+    private String smoth = "";       // 鍚堝悓寮�濮嬫湀
+    private String sday = "";        // 鍚堝悓寮�濮嬫棩
+    private String eyear = "";       // 鍚堝悓缁撴潫骞达紙浠匒绫诲瀷闇�瑕侊級
+    private String emoth = "";       // 鍚堝悓缁撴潫鏈堬紙浠匒绫诲瀷闇�瑕侊級
+    private String eday = "";        // 鍚堝悓缁撴潫鏃ワ紙浠匒绫诲瀷闇�瑕侊級
+
+    // 璇曠敤鏈熺浉鍏�
+    private String styear = "";      // 璇曠敤鏈熷紑濮嬪勾
+    private String stmoth = "";      // 璇曠敤鏈熷紑濮嬫湀
+    private String stday = "";       // 璇曠敤鏈熷紑濮嬫棩
+    private String seyear = "";      // 璇曠敤鏈熺粨鏉熷勾
+    private String semoth = "";      // 璇曠敤鏈熺粨鏉熸湀
+    private String seday = "";       // 璇曠敤鏈熺粨鏉熸棩
+
+    private String bsyear = "";       // 鍚堝悓寮�濮嬪勾
+    private String bsmoth = "";       // 鍚堝悓寮�濮嬫湀
+    private String bsday = "";        // 鍚堝悓寮�濮嬫棩
+
+    // 璇曠敤鏈熺浉鍏�
+    private String bstyear = "";      // 璇曠敤鏈熷紑濮嬪勾
+    private String bstmoth = "";      // 璇曠敤鏈熷紑濮嬫湀
+    private String bstday = "";       // 璇曠敤鏈熷紑濮嬫棩
+    private String bseyear = "";      // 璇曠敤鏈熺粨鏉熷勾
+    private String bsemoth = "";      // 璇曠敤鏈熺粨鏉熸湀
+    private String bseday = "";       // 璇曠敤鏈熺粨鏉熸棩
+
+    private String csyear = "";       // 鍚堝悓寮�濮嬪勾
+    private String csmoth = "";       // 鍚堝悓寮�濮嬫湀
+    private String csday = "";        // 鍚堝悓寮�濮嬫棩
+}
diff --git a/src/main/java/com/ruoyi/home/dto/ProductionProgressDto.java b/src/main/java/com/ruoyi/home/dto/ProductionProgressDto.java
new file mode 100644
index 0000000..99d9e61
--- /dev/null
+++ b/src/main/java/com/ruoyi/home/dto/ProductionProgressDto.java
@@ -0,0 +1,25 @@
+package com.ruoyi.home.dto;
+
+import com.ruoyi.production.dto.ProductOrderDto;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+@ApiModel
+public class ProductionProgressDto {
+    @ApiModelProperty("鎬昏鍗曟暟")
+    private Integer totalOrderCount;
+
+    @ApiModelProperty("宸插畬鎴愯鍗曟暟")
+    private Integer completedOrderCount;
+    @ApiModelProperty("鏈畬鎴愯鍗曟暟")
+    private Integer uncompletedOrderCount;
+    @ApiModelProperty("鎬讳綋瀹屾垚杩涘害")
+    private BigDecimal completedProgressCount;
+    @ApiModelProperty("璁㈠崟璇︽儏")
+    private List<ProductOrderDto> completedOrderDetails;
+}
diff --git a/src/main/java/com/ruoyi/inspectiontask/pojo/InspectionTask.java b/src/main/java/com/ruoyi/inspectiontask/pojo/InspectionTask.java
index d6fc797..0b5eb39 100644
--- a/src/main/java/com/ruoyi/inspectiontask/pojo/InspectionTask.java
+++ b/src/main/java/com/ruoyi/inspectiontask/pojo/InspectionTask.java
@@ -89,4 +89,6 @@
     @TableField(fill = FieldFill.INSERT)
     private Long tenantId;
 
+    @TableField(exist = false)
+    private String dateStr;
 }
diff --git a/src/main/java/com/ruoyi/inspectiontask/pojo/TimingTask.java b/src/main/java/com/ruoyi/inspectiontask/pojo/TimingTask.java
index 8d03b06..0c9dad7 100644
--- a/src/main/java/com/ruoyi/inspectiontask/pojo/TimingTask.java
+++ b/src/main/java/com/ruoyi/inspectiontask/pojo/TimingTask.java
@@ -83,14 +83,17 @@
     @ApiModelProperty(value = "杞垹闄ゆ爣蹇楋紝0=鏈垹闄わ紝1=宸插垹闄�")
     private Integer deleted;
 
+    @TableField(exist = false)
+    private String dateStr;
+
     @ApiModelProperty(value = "鍒涘缓璇ヨ褰曠殑鐢ㄦ埛")
     @TableField(fill = com.baomidou.mybatisplus.annotation.FieldFill.INSERT)
     private Integer createUser;
 
     @ApiModelProperty(value = "璁板綍鍒涘缓鏃堕棿")
     @TableField(fill = com.baomidou.mybatisplus.annotation.FieldFill.INSERT)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+//    @JsonFormat(pattern = "yyyy-MM-dd")
+//    @DateTimeFormat(pattern = "yyyy-MM-dd")
     private LocalDateTime createTime;
 
     @ApiModelProperty(value = "鏈�鍚庝慨鏀硅璁板綍鐨勭敤鎴�")
diff --git a/src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java b/src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java
index 6439f69..95e97a1 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/InspectionTaskServiceImpl.java
@@ -25,6 +25,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -151,6 +152,8 @@
                 dto.setInspector(inspectorNames);
             }
 
+            dto.setDateStr(inspectionTask.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+
             // 鍒濆鍖栦笁涓檮浠跺垪琛�
             dto.setBeforeProduction(new ArrayList<>());
             dto.setAfterProduction(new ArrayList<>());
diff --git a/src/main/java/com/ruoyi/inspectiontask/service/impl/QuartzConfig.java b/src/main/java/com/ruoyi/inspectiontask/service/impl/QuartzConfig.java
index da332f1..1bee9b2 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/QuartzConfig.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/QuartzConfig.java
@@ -1,5 +1,6 @@
 package com.ruoyi.inspectiontask.service.impl;
 
+import org.quartz.*;
 import org.quartz.spi.TriggerFiredBundle;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
@@ -7,13 +8,21 @@
 import org.springframework.context.ApplicationContextAware;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.scheduling.quartz.JobDetailFactoryBean;
 import org.springframework.scheduling.quartz.SchedulerFactoryBean;
 import org.springframework.scheduling.quartz.SpringBeanJobFactory;
+
+import javax.sql.DataSource;
 
 @Configuration
 public class QuartzConfig {
     @Autowired
     private ApplicationContext applicationContext;
+
+    // 鍋囪宸查厤缃悕涓篸ataSource鐨勬暟鎹簮Bean
+    @Autowired
+    private DataSource dataSource;
 
     @Bean
     public SchedulerFactoryBean schedulerFactoryBean() {
@@ -24,10 +33,17 @@
         jobFactory.setApplicationContext(applicationContext);
         schedulerFactory.setJobFactory(jobFactory);
 
+        // 鍦╯chedulerFactoryBean()鏂规硶涓坊鍔�
+        schedulerFactory.setDataSource(dataSource);
         // 鍏朵粬閰嶇疆...
         return schedulerFactory;
     }
 
+    @Bean
+    public Scheduler scheduler() {
+        return schedulerFactoryBean().getScheduler();
+    }
+
     // 鑷畾涔塉obFactory锛屾敮鎸佽嚜鍔ㄦ敞鍏�
     public static class AutowiringSpringBeanJobFactory extends SpringBeanJobFactory
             implements ApplicationContextAware {
diff --git a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java
index 1cfc748..44ad63d 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java
@@ -13,6 +13,7 @@
 
 import javax.annotation.Resource;
 import javax.sql.DataSource;
+import java.io.Serializable;
 import java.time.DayOfWeek;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
@@ -23,7 +24,8 @@
 
 @Component
 @DisallowConcurrentExecution // 绂佹骞跺彂鎵ц鍚屼竴涓狫ob
-public class TimingTaskJob implements Job {
+public class TimingTaskJob implements Job, Serializable {
+    private static final long serialVersionUID = 1L; // 蹇呴』瀹氫箟搴忓垪鍖朓D
 
     @Autowired
     private TimingTaskMapper timingTaskMapper;
diff --git a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java
index 34d1467..2ff2e7e 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskScheduler.java
@@ -39,14 +39,28 @@
             throw new SchedulerException("Existing trigger is not a CronTrigger");
         }
 
-        // 鏋勫缓鏂拌Е鍙戝櫒
-        Trigger newTrigger = TriggerBuilder.newTrigger()
-                .withIdentity(triggerKey)
-                .withDescription(task.getTaskName())
-                .withSchedule(CronScheduleBuilder.cronSchedule(convertToCronExpression(task)))
-                .startAt(Date.from(task.getNextExecutionTime().atZone(ZoneId.systemDefault()).toInstant()))
-                .forJob(oldTrigger.getJobKey())
+        // 3. 鏋勫缓CronTrigger锛岀‘淇濇寔涔呭寲閰嶇疆
+        CronTrigger newTrigger = TriggerBuilder.newTrigger()
+                .withIdentity(triggerKey)                // 鍞竴鏍囪瘑锛岀敤浜庢寔涔呭寲瀛樺偍
+                .withDescription(task.getTaskName() + "_TRIGGER") // 瑙﹀彂鍣ㄦ弿杩�
+                .forJob(oldTrigger.getJobKey())                       // 鍏宠仈瀵瑰簲鐨凧ob
+                .withSchedule(CronScheduleBuilder
+                        .cronSchedule(convertToCronExpression(task)) // 閿欒繃鎵ц鏃剁殑绛栫暐锛堟牴鎹笟鍔¤皟鏁达級
+                )
+                // 4. 璁剧疆寮�濮嬫椂闂达紙鑻ヤ负null鍒欑珛鍗崇敓鏁堬級
+                .startAt(task.getNextExecutionTime() != null
+                        ? Date.from(task.getNextExecutionTime().atZone(ZoneId.systemDefault()).toInstant())
+                        : new Date())
                 .build();
+
+        // 鏋勫缓鏂拌Е鍙戝櫒
+//        Trigger newTrigger = TriggerBuilder.newTrigger()
+//                .withIdentity(triggerKey)
+//                .withDescription(task.getTaskName())
+//                .withSchedule(CronScheduleBuilder.cronSchedule(convertToCronExpression(task)))
+//                .startAt(Date.from(task.getNextExecutionTime().atZone(ZoneId.systemDefault()).toInstant()))
+//                .forJob(oldTrigger.getJobKey())
+//                .build();
 
         scheduler.rescheduleJob(triggerKey, newTrigger);
     }
@@ -76,34 +90,47 @@
     }
 
     private JobDetail buildJobDetail(TimingTask task) {
-        JobDataMap jobDataMap = new JobDataMap();
-        jobDataMap.put("taskId", task.getId());
+        // 1. 鏋勫缓鍞竴JobKey锛堝熀浜庝换鍔D锛岀‘淇濋噸鍚悗鑳借瘑鍒級
+        JobKey jobKey = new JobKey("timingTask_" + task.getId());
 
+        // 2. 灏佽浠诲姟鏁版嵁锛堜粎浣跨敤鍩烘湰绫诲瀷锛岀‘淇濆彲搴忓垪鍖栵級
+        JobDataMap jobDataMap = new JobDataMap();
+        jobDataMap.put("taskId", task.getId());           // 浠诲姟ID锛圠ong锛屽彲搴忓垪鍖栵級
+        jobDataMap.put("taskName", task.getTaskName());   // 浠诲姟鍚嶇О锛圫tring锛屽彲搴忓垪鍖栵級
+        jobDataMap.put("taskType", task.getFrequencyType()); // 浠诲姟绫诲瀷锛圫tring锛�
+        // 鎸夐渶娣诲姞鍏朵粬蹇呰鐨勫熀鏈被鍨嬪弬鏁�
+
+        // 3. 鏋勫缓JobDetail锛岃缃寔涔呭寲鐩稿叧灞炴��
         return JobBuilder.newJob(TimingTaskJob.class)
-                .withIdentity("timingTask_" + task.getId())
-                .withDescription(task.getTaskName())
-                .usingJobData(jobDataMap)
-                .storeDurably()
+                .withIdentity(jobKey)                    // 鍞竴鏍囪瘑锛岀敤浜庢寔涔呭寲瀛樺偍
+                .withDescription(task.getTaskName())     // 浠诲姟鎻忚堪锛屽瓨鍏ユ暟鎹簱
+                .usingJobData(jobDataMap)                // 缁戝畾浠诲姟鏁版嵁
+                .storeDurably(true)                          // 鍗充娇娌℃湁瑙﹀彂鍣ㄥ叧鑱斾篃鎸佷箙鍖栦繚瀛�
+                .requestRecovery(true)                   // 褰撹皟搴﹀櫒宕╂簝鍚庢仮澶嶆椂锛岄噸鏂版墽琛屾湭瀹屾垚鐨勪换鍔�
                 .build();
     }
 
     private Trigger buildJobTrigger(TimingTask task, JobDetail jobDetail) {
+        // 1. 鏋勫缓鍞竴TriggerKey锛堝熀浜庝换鍔D锛�
+        TriggerKey triggerKey = new TriggerKey("trigger_" + task.getId());
+
+        // 2. 鐢熸垚Cron琛ㄨ揪寮忥紙鍘熼�昏緫涓嶅彉锛�
         String cronExpression = convertToCronExpression(task);
 
-            TriggerBuilder<CronTrigger> triggerBuilder = TriggerBuilder.newTrigger()
-                .withIdentity("trigger_" + task.getId())
-                .withDescription(task.getTaskName())
-                .withSchedule(CronScheduleBuilder.cronSchedule(cronExpression));
-
-        if (jobDetail != null) {
-            triggerBuilder.forJob(jobDetail);
-        }
-
-        if (task.getNextExecutionTime() != null) {
-            triggerBuilder.startAt(Date.from(task.getNextExecutionTime().atZone(ZoneId.systemDefault()).toInstant()));
-        }
-
-        return triggerBuilder.build();
+        // 3. 鏋勫缓CronTrigger锛岀‘淇濇寔涔呭寲閰嶇疆
+        return TriggerBuilder.newTrigger()
+                .withIdentity(triggerKey)                // 鍞竴鏍囪瘑锛岀敤浜庢寔涔呭寲瀛樺偍
+                .withDescription(task.getTaskName() + "_TRIGGER") // 瑙﹀彂鍣ㄦ弿杩�
+                .forJob(jobDetail)                       // 鍏宠仈瀵瑰簲鐨凧ob
+                .withSchedule(CronScheduleBuilder
+                        .cronSchedule(cronExpression)
+                        .withMisfireHandlingInstructionDoNothing() // 閿欒繃鎵ц鏃剁殑绛栫暐锛堟牴鎹笟鍔¤皟鏁达級
+                )
+                // 4. 璁剧疆寮�濮嬫椂闂达紙鑻ヤ负null鍒欑珛鍗崇敓鏁堬級
+                .startAt(task.getNextExecutionTime() != null
+                        ? Date.from(task.getNextExecutionTime().atZone(ZoneId.systemDefault()).toInstant())
+                        : new Date())
+                .build();
     }
     private String convertToCronExpression(TimingTask task) {
         // 鍙傛暟鏍¢獙
diff --git a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java
index 33c815e..f3d1ef1 100644
--- a/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java
+++ b/src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskServiceImpl.java
@@ -66,6 +66,7 @@
 
         // 鏀堕泦宸℃浜篒D锛堝涓狪D浠ラ�楀彿鍒嗛殧锛�
         taskPage.getRecords().forEach(task -> {
+            task.setDateStr(task.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
             if (StringUtils.isNotBlank(task.getInspectorIds())) {
                 Arrays.stream(task.getInspectorIds().split(","))
                         .filter(StringUtils::isNotBlank)
@@ -118,7 +119,16 @@
     public int addOrEditTimingTask(TimingTaskDto timingTaskDto) throws SchedulerException {
         TimingTask timingTask = new TimingTask();
         BeanUtils.copyProperties(timingTaskDto, timingTask);
+        // 1. 瑙f瀽瀛楃涓蹭负 LocalDate锛堝彧鍖呭惈骞存湀鏃ワ級
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        LocalDate localDate = LocalDate.parse(timingTaskDto.getDateStr(), formatter);
 
+        // 2. 鑾峰彇褰撳墠绯荤粺鐨� LocalTime锛堝寘鍚椂鍒嗙锛�
+        LocalTime currentTime = LocalTime.now();
+
+        // 3. 鍚堝苟 LocalDate 鍜屽綋鍓� LocalTime 涓� LocalDateTime
+        LocalDateTime localDateTime = LocalDateTime.of(localDate, currentTime);
+        timingTask.setCreateTime(localDateTime);
         // 璁剧疆鍒涘缓浜轰俊鎭拰榛樿鍊�
         if (Objects.isNull(timingTaskDto.getId())) {
             timingTask.setRegistrationDate(LocalDate.now());
@@ -127,7 +137,6 @@
             // 璁$畻棣栨鎵ц鏃堕棿
             LocalDateTime firstExecutionTime = calculateFirstExecutionTime(timingTask);
             timingTask.setNextExecutionTime(firstExecutionTime);
-
             int result = timingTaskMapper.insert(timingTask);
             if (result > 0) {
                 // 鏂板鎴愬姛鍚庢坊鍔犲埌璋冨害鍣�
@@ -135,6 +144,8 @@
             }
             return result;
         } else {
+
+
             int result = timingTaskMapper.updateById(timingTask);
             if (result > 0) {
                 // 鏇存柊鎴愬姛鍚庨噸鏂拌皟搴︿换鍔�
diff --git a/src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerRecordController.java b/src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerRecordController.java
index 09237a5..8c7116e 100644
--- a/src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerRecordController.java
+++ b/src/main/java/com/ruoyi/measuringinstrumentledger/controller/MeasuringInstrumentLedgerRecordController.java
@@ -8,6 +8,7 @@
 import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.measuringinstrumentledger.pojo.MeasuringInstrumentLedgerRecord;
 import com.ruoyi.measuringinstrumentledger.service.MeasuringInstrumentLedgerRecordService;
+import io.jsonwebtoken.lang.Collections;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -16,6 +17,7 @@
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.util.List;
 
 /**
  * @author :yys
@@ -50,6 +52,14 @@
         return AjaxResult.error();
     }
 
+    @DeleteMapping("/delete")
+    @ApiOperation("璁¢噺鍣ㄥ叿鍙拌处璁板綍-鍒犻櫎")
+    @Log(title = "璁¢噺鍣ㄥ叿鍙拌处璁板綍-鍒犻櫎", businessType = BusinessType.DELETE)
+    public AjaxResult delete(@RequestBody List<Long> ids) {
+        if(Collections.isEmpty(ids)) return AjaxResult.error("璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁");
+        return AjaxResult.success(measuringInstrumentLedgerRecordService.removeBatchByIds(ids));
+    }
+
     /**
      * 瀵煎嚭璁¢噺鍣ㄥ叿鍙拌处
      */
diff --git a/src/main/java/com/ruoyi/procurementrecord/controller/ProcurementExceptionRecordController.java b/src/main/java/com/ruoyi/procurementrecord/controller/ProcurementExceptionRecordController.java
new file mode 100644
index 0000000..d9bc6fc
--- /dev/null
+++ b/src/main/java/com/ruoyi/procurementrecord/controller/ProcurementExceptionRecordController.java
@@ -0,0 +1,46 @@
+package com.ruoyi.procurementrecord.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+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.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.procurementrecord.dto.*;
+import com.ruoyi.procurementrecord.mapper.ProcurementExceptionRecordMapper;
+import com.ruoyi.procurementrecord.pojo.ProcurementExceptionRecord;
+import com.ruoyi.procurementrecord.service.ProcurementRecordService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * @author :yys
+ * @date : 2025/7/7 14:32
+ */
+@RestController
+@Api(tags = "閲囪喘寮傚父璁板綍")
+@RequestMapping("/procurementExceptionRecord")
+public class ProcurementExceptionRecordController extends BaseController {
+
+
+    @Autowired
+    private ProcurementExceptionRecordMapper procurementExceptionRecordMapper;
+
+    @PostMapping("/add")
+    @Transactional
+    public AjaxResult add(@RequestBody ProcurementExceptionRecord procurementExceptionRecord) {
+        return AjaxResult.success(procurementExceptionRecordMapper.insert(procurementExceptionRecord));
+    }
+
+    @PostMapping("/update")
+    @Transactional
+    public AjaxResult updatePro(@RequestBody ProcurementExceptionRecord procurementExceptionRecord) {
+        return AjaxResult.success(procurementExceptionRecordMapper.updateById(procurementExceptionRecord));
+    }
+}
diff --git a/src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java b/src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java
index f056f6d..9ce1661 100644
--- a/src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java
+++ b/src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordController.java
@@ -3,6 +3,8 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.basic.pojo.ProductModel;
+import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.aspectj.lang.annotation.Log;
@@ -38,6 +40,18 @@
     private ProcurementRecordService procurementRecordService;
 
 
+    /**
+     * 閫氳繃閿�鍞骇鍝乮d鑾峰彇鍏ュ簱鏁伴噺
+     * @param salesProductId
+     * @return
+     */
+    @GetMapping("/getProcurementAmount")
+    @ApiOperation(value = "閫氳繃閿�鍞骇鍝乮d鑾峰彇鍏ュ簱鏁伴噺")
+    public AjaxResult getProcurementAmount(@RequestParam("salesProductId") Long salesProductId) {
+        return AjaxResult.success(procurementRecordService.getProcurementAmount(salesProductId));
+    }
+
+
     @GetMapping("/productlist")
     @Log(title = "閲囪喘鍏ュ簱-鍏ュ簱绠$悊-鏂板鍏ュ簱鏌ヨ", businessType = BusinessType.OTHER)
     public AjaxResult list(ProcurementDto procurementDto) {
@@ -68,7 +82,7 @@
         return procurementRecordService.updateCustom(customStorage);
     }
 
-    @DeleteMapping("/deleteCustom")
+    @Delete("/delteCustom")
     @Log(title = "鑷畾涔夊叆搴�-鍏ュ簱绠$悊-鍒犻櫎鍏ュ簱", businessType = BusinessType.DELETE)
     @Transactional
     public AjaxResult deleteCustom(@RequestBody List<Long> ids) {
@@ -89,12 +103,7 @@
         return AjaxResult.success(procurementRecordService.updateManagement(procurementDto));
     }
 
-    @PostMapping("/updateManagementByCustom")
-    @Log(title = "鑷畾涔夊叆搴�-搴撳瓨鍙拌处-淇敼", businessType = BusinessType.UPDATE)
-    @Transactional
-    public AjaxResult updateManagementByCustom(@RequestBody ProcurementManagementUpdateDto procurementDto) {
-        return AjaxResult.success(procurementRecordService.updateManagementByCustom(procurementDto));
-    }
+
 
     @GetMapping("/detailManagementByCustom")
     @ApiOperation(value = "鑷畾涔夊叆搴�-璇︽儏")
@@ -125,12 +134,24 @@
         IPage<ProcurementPageDto> result = procurementRecordService.listPage(page, procurementDto);
         return AjaxResult.success(result);
     }
-
+    @GetMapping("/listReport")
+    @ApiOperation(value = "鏌ヨ搴撳瓨鍥捐〃鏁版嵁")
+    public AjaxResult listReport() {
+        return AjaxResult.success(procurementRecordService.getReportList());
+    }
     @GetMapping("/listPageByProduction")
     @Log(title = "鐢熶骇鍏ュ簱-鍏ュ簱绠$悊-鍏ュ簱鏌ヨ", businessType = BusinessType.OTHER)
     @ApiOperation(value = "鍏ュ簱鏌ヨ")
     public AjaxResult listPageByProduction(Page page, ProcurementPageDto procurementDto) {
         IPage<ProcurementPageDto> result = procurementRecordService.listPageByProduction(page, procurementDto);
+        return AjaxResult.success(result);
+    }
+
+    @GetMapping("/listPageByProductProduction")
+    @Log(title = "鐢熶骇鍏ュ簱-鍏ュ簱绠$悊-鐢熶骇鍏ュ簱鏌ヨ", businessType = BusinessType.OTHER)
+    @ApiOperation(value = "鍏ュ簱鏌ヨ")
+    public AjaxResult listPageByProductProduction(Page page, ProcurementPageDto procurementDto) {
+        IPage<ProcurementPageDto> result = procurementRecordService.listPageByProductProduction(page, procurementDto);
         return AjaxResult.success(result);
     }
 
@@ -222,35 +243,16 @@
      * @param response
      */
     @PostMapping("/exportTwo")
-    public void exportTwo(HttpServletResponse response,@RequestBody List<CustomStorage> customStorage) {
-        if(CollectionUtils.isEmpty(customStorage)){
-            customStorage = customStorageMapper.selectList(null);
-        }
-        for (CustomStorage storage : customStorage) {
-            // nginx 鍓嶇璁块棶鍥剧墖
-            storage.setUrl("http://114.132.189.42:9044"+storage.getUrl());
-        }
+    public void exportTwo(HttpServletResponse response) {
+        List<CustomStorage> customStorages = customStorageMapper.selectList(null);
         ExcelUtil<CustomStorage> util = new ExcelUtil<CustomStorage>(CustomStorage.class);
-        util.exportExcel(response, customStorage, "鍏ュ簱鍙拌处");
+        util.exportExcel(response, customStorages, "鍏ュ簱鍙拌处");
     }
 
-    /**
-     * 鍏ュ簱锛屽嚭搴撶鐞嗚嚜瀹氫箟瀵煎嚭锛屼繚瀛樻枃浠跺埌鏈湴杩斿洖璺緞
-     * @param customStorage
-     */
-    @PostMapping("/exportTwoSave")
-    public AjaxResult exportTwoSave(@RequestBody List<CustomStorage> customStorage) {
-        if(CollectionUtils.isEmpty(customStorage)){
-            customStorage = customStorageMapper.selectList(null);
-        }
-        for (CustomStorage storage : customStorage) {
-            // nginx 鍓嶇璁块棶鍥剧墖
-            storage.setUrl("http://114.132.189.42:9044" + storage.getUrl());
-        }
-        ExcelUtil<CustomStorage> util = new ExcelUtil<CustomStorage>(CustomStorage.class);
-
-        return util.exportExcel(customStorage,"鍏ュ簱鍙拌处" , "鍏ュ簱鍙拌处");
+    @GetMapping("/listPageProductionStock")
+    @Log(title = "搴撳瓨绠$悊-鎴愬搧搴撳瓨", businessType = BusinessType.OTHER)
+    public AjaxResult listPageProductionStock(Page page) {
+        IPage<ProductModel> result = procurementRecordService.listPageProductionStock(page);
+        return AjaxResult.success(result);
     }
-
-
 }
diff --git a/src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordOutController.java b/src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordOutController.java
index 3f71288..1fb594b 100644
--- a/src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordOutController.java
+++ b/src/main/java/com/ruoyi/procurementrecord/controller/ProcurementRecordOutController.java
@@ -52,6 +52,13 @@
         return AjaxResult.success(result);
     }
 
+    @GetMapping("/listPageBySemiProduct")
+    @Log(title = "鐢熶骇鍑哄簱-鍑哄簱鍙拌处-鍑哄簱鏌ヨ", businessType = BusinessType.OTHER)
+    public AjaxResult listPageBySemiProduct(Page page, ProcurementRecordOutPageDto procurementDto) {
+        IPage<ProcurementRecordOutPageDto> result = procurementRecordOutService.listPageBySemiProduct(page, procurementDto);
+        return AjaxResult.success(result);
+    }
+
     @GetMapping("/listPageByCustom")
     @Log(title = "鑷畾涔夊嚭搴�-鍑哄簱鍙拌处-鍑哄簱鏌ヨ", businessType = BusinessType.OTHER)
     public AjaxResult listPageByCustom(Page page, ProcurementRecordOutPageDto procurementDto) {
@@ -85,7 +92,7 @@
     public void exportOne(HttpServletResponse response) {
         List<ProcurementRecordOutPageDto> list = procurementRecordOutMapper.listOne();
         ExcelUtil<ProcurementRecordOutPageDto> util = new ExcelUtil<>(ProcurementRecordOutPageDto.class);
-        util.exportExcel(response, list, "閲囪喘鍑哄簱鍙拌处");
+        util.exportExcel(response, list, "鐢熶骇鍑哄簱鍙拌处");
     }
 
     /**
@@ -96,7 +103,7 @@
     public void exportTwo(HttpServletResponse response) {
         List<ProcurementRecordOutPageDto> list = procurementRecordOutMapper.listTwo();
         ExcelUtil<ProcurementRecordOutPageDto> util = new ExcelUtil<>(ProcurementRecordOutPageDto.class);
-        util.exportExcel(response, list, "鎴愬搧鍑哄簱鍙拌处");
+        util.exportExcel(response, list, "鐢熶骇鍑哄簱鍙拌处");
     }
 
 }
diff --git a/src/main/java/com/ruoyi/procurementrecord/dto/Details.java b/src/main/java/com/ruoyi/procurementrecord/dto/Details.java
index 29e5217..28d8698 100644
--- a/src/main/java/com/ruoyi/procurementrecord/dto/Details.java
+++ b/src/main/java/com/ruoyi/procurementrecord/dto/Details.java
@@ -28,4 +28,5 @@
      * 缇庡厓姣忎欢
      */
     private BigDecimal dollarPrice;
+    private Long productModelId; // 鍩虹浜у搧id
 }
diff --git a/src/main/java/com/ruoyi/procurementrecord/dto/InventoryInformationDto.java b/src/main/java/com/ruoyi/procurementrecord/dto/InventoryInformationDto.java
new file mode 100644
index 0000000..2396b29
--- /dev/null
+++ b/src/main/java/com/ruoyi/procurementrecord/dto/InventoryInformationDto.java
@@ -0,0 +1,28 @@
+package com.ruoyi.procurementrecord.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 瀛樿揣鏍哥畻淇℃伅Dto-璧勪骇鎶ヨ〃
+ */
+@Data
+public class InventoryInformationDto {
+    /**
+     * 鎬诲簱瀛樻暟閲�
+     */
+    private Integer totalInventoryCount;
+    /**
+     * 鎬诲簱瀛橀噾棰�
+     */
+    private BigDecimal totalInventoryValue;
+    /**
+     * 搴撳瓨鍙樺姩鏁伴噺
+     */
+    private Integer inventoryChangeCount;
+    /**
+     * 搴撳瓨鍙樺姩閲戦
+     */
+    private BigDecimal inventoryChangeValue;
+}
diff --git a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementAddDto.java b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementAddDto.java
index b232f48..73deac5 100644
--- a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementAddDto.java
+++ b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementAddDto.java
@@ -22,5 +22,8 @@
     private Integer type;
 
     private String typeName;
+    private Integer purchaseLedgerId;
+
+
 
 }
diff --git a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDto.java b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDto.java
index 3e40f86..89aa64e 100644
--- a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDto.java
+++ b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDto.java
@@ -54,7 +54,7 @@
     @Excel(name = "瀹㈡埛鍚嶇О")
     private String customerName;
 
-    private String salesLedgerProductId;
+    private Long salesLedgerProductId;
 
     /**
      * 鍑哄叆搴撴暟閲�
@@ -120,6 +120,11 @@
      */
     @Excel(name = "浜у搧澶х被")
     private String productCategory;
+     /**
+     * 浜у搧id
+     */
+    @Excel(name = "浜у搧id")
+    private Long productId;
 
     /**
      * 瑙勬牸鍨嬪彿
diff --git a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDtoCopy.java b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDtoCopy.java
index 61b0e88..a328c1a 100644
--- a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDtoCopy.java
+++ b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementPageDtoCopy.java
@@ -51,7 +51,9 @@
      */
     private String customerName;
 
-    private String salesLedgerProductId;
+    private Long salesLedgerProductId;
+
+
 
     /**
      * 鍑哄叆搴撴暟閲�
@@ -133,6 +135,11 @@
      */
     @Excel(name = "浜у搧澶х被")
     private String productCategory;
+     /**
+     * 浜у搧id
+     */
+    @Excel(name = "浜у搧id")
+    private Long productId;
 
     /**
      * 瑙勬牸鍨嬪彿
diff --git a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutAdd.java b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutAdd.java
index 9124e75..78a2f04 100644
--- a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutAdd.java
+++ b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutAdd.java
@@ -24,4 +24,6 @@
      */
     private Integer type;
 
+    private Long productModelId;// 鍩虹浜у搧ID
+
 }
diff --git a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutPageDto.java b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutPageDto.java
index 7c9c5f6..1209e63 100644
--- a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutPageDto.java
+++ b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutPageDto.java
@@ -6,6 +6,7 @@
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.util.Date;
 
 /**
  * @author :yys
diff --git a/src/main/java/com/ruoyi/procurementrecord/mapper/ProcurementExceptionRecordMapper.java b/src/main/java/com/ruoyi/procurementrecord/mapper/ProcurementExceptionRecordMapper.java
new file mode 100644
index 0000000..31dd4dc
--- /dev/null
+++ b/src/main/java/com/ruoyi/procurementrecord/mapper/ProcurementExceptionRecordMapper.java
@@ -0,0 +1,9 @@
+package com.ruoyi.procurementrecord.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.procurementrecord.pojo.ProcurementExceptionRecord;
+
+
+public interface ProcurementExceptionRecordMapper extends BaseMapper<ProcurementExceptionRecord> {
+
+}
diff --git a/src/main/java/com/ruoyi/procurementrecord/mapper/ProcurementRecordMapper.java b/src/main/java/com/ruoyi/procurementrecord/mapper/ProcurementRecordMapper.java
index 183d62c..5ba27b2 100644
--- a/src/main/java/com/ruoyi/procurementrecord/mapper/ProcurementRecordMapper.java
+++ b/src/main/java/com/ruoyi/procurementrecord/mapper/ProcurementRecordMapper.java
@@ -9,6 +9,7 @@
 import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
 import org.apache.ibatis.annotations.Param;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -39,4 +40,13 @@
     IPage<ProcurementPageDto> listPageByProduction(Page page, @Param("req") ProcurementPageDto procurementDto);
 
     IPage<ProcurementPageDtoCopy> listPageCopyByProduction(Page page, @Param("req") ProcurementPageDto procurementDto);
+
+    IPage<ProcurementPageDtoCopy> listPagePRS(Page page, @Param("req") ProcurementPageDto procurementDto);
+
+    BigDecimal getSumQuantity(@Param("productModelId") Long productModelId);
+
+    IPage<ProcurementPageDto> listPageByProductProduction(Page page, @Param("req") ProcurementPageDto procurementDto);
+
+
+
 }
diff --git a/src/main/java/com/ruoyi/procurementrecord/mapper/ProcurementRecordOutMapper.java b/src/main/java/com/ruoyi/procurementrecord/mapper/ProcurementRecordOutMapper.java
index 6cd9dab..eebd7cc 100644
--- a/src/main/java/com/ruoyi/procurementrecord/mapper/ProcurementRecordOutMapper.java
+++ b/src/main/java/com/ruoyi/procurementrecord/mapper/ProcurementRecordOutMapper.java
@@ -7,6 +7,7 @@
 import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut;
 import org.apache.ibatis.annotations.Param;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -26,4 +27,10 @@
     IPage<ProcurementRecordOutPageDto> listPageByProduct(Page page,@Param("req") ProcurementRecordOutPageDto procurementDto);
 
     IPage<ProcurementRecordOutPageDto> listPageByCustom(Page page,@Param("req") ProcurementRecordOutPageDto procurementDto);
+
+    BigDecimal getSumQuantity(@Param("productModelId") Long productModelId);
+
+    ProcurementRecordOut selectCode(@Param("format") String format);
+
+    IPage<ProcurementRecordOutPageDto> listPageBySemiProduct(Page page,@Param("req") ProcurementRecordOutPageDto procurementDto);
 }
diff --git a/src/main/java/com/ruoyi/procurementrecord/pojo/CustomStorage.java b/src/main/java/com/ruoyi/procurementrecord/pojo/CustomStorage.java
index 82175f6..496c3d1 100644
--- a/src/main/java/com/ruoyi/procurementrecord/pojo/CustomStorage.java
+++ b/src/main/java/com/ruoyi/procurementrecord/pojo/CustomStorage.java
@@ -37,41 +37,59 @@
     @Excel(name = "鍏ュ簱鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
     private Date inboundDate;
 
+    /**
+     * 缂栧彿
+     */
+    @Excel(name = "缂栧彿")
+    private String code;
+
     @TableField(exist = false)
     private String timeStr;
 
+    /**
+     * 寰呭嚭搴撴暟閲�
+     */
+    @Excel(name = "寰呭嚭搴撴暟閲�")
+    @TableField(exist = false)
+    private BigDecimal inboundNum0;
+    /**
+     * 鍑哄簱鏁伴噺
+     */
+    @Excel(name = "鍑哄簱鏁伴噺")
+    @TableField(exist = false)
+    private BigDecimal totalInboundNum = BigDecimal.ZERO;
     // 鐗╁搧绫诲瀷
-//    @Excel(name = "鐗╁搧绫诲瀷")
+    @Excel(name = "鐗╁搧绫诲瀷")
     private String itemType;
     // 鍏ュ簱鎵规
-//    @Excel(name = "鍏ュ簱鎵规")
+    @Excel(name = "鍏ュ簱鎵规")
     private String inboundBatches;
     // 鍏ュ簱鏁伴噺
     @Excel(name = "鍏ュ簱鏁伴噺")
     private BigDecimal inboundNum;
     // 渚涘簲鍟嗗悕绉�
-//    @Excel(name = "渚涘簲鍟嗗悕绉�")
+    @Excel(name = "渚涘簲鍟嗗悕绉�")
     private String supplierName;
     // 浜у搧澶х被
-    @Excel(name = "浜у搧鍚嶇О")
+    @Excel(name = "浜у搧澶х被")
     private String productCategory;
     // 瑙勬牸鍨嬪彿
-    @Excel(name = "浜у搧楂樺害")
+    @Excel(name = "瑙勬牸鍨嬪彿")
     private String specificationModel;
     // 鍗曚綅
-//    @Excel(name = "鍗曚綅")
+    @Excel(name = "鍗曚綅")
     private String unit;
     // 鍚◣鍗曚环
-    @Excel(name = "鍗曚环(鍏�)/浠�")
+    @Excel(name = "鍚◣鍗曚环")
     private BigDecimal taxInclusiveUnitPrice;
     // 鍚◣鎬讳环
-//    @Excel(name = "鍚◣鎬讳环")
+    @Excel(name = "鍚◣鎬讳环")
     private BigDecimal taxInclusiveTotalPrice;
     // 绋庣巼(%)
-//    @Excel(name = "绋庣巼(%)")
+    @Excel(name = "绋庣巼(%)")
     private BigDecimal taxRate;
     // 涓嶅惈绋庢�讳环
-//    @Excel(name = "涓嶅惈绋庢�讳环")
+    @Excel(name = "涓嶅惈绋庢�讳环")
     private BigDecimal taxExclusiveTotalPrice;
     /**
      * 鍏ュ簱鐢ㄦ埛
@@ -102,8 +120,8 @@
      * 鍏ュ簱鏃堕棿
      */
     @TableField(fill = FieldFill.INSERT)
-//    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
-//    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
     private LocalDateTime createTime;
 
     /**
@@ -116,8 +134,8 @@
      * 淇敼鏃堕棿
      */
     @TableField(fill = FieldFill.INSERT_UPDATE)
-//    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-//    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime updateTime;
 
     /**
@@ -140,4 +158,5 @@
      */
     @Excel(name = "鍗曚环(缇庡厓)/浠�")
     private BigDecimal dollarPrice;
+
 }
diff --git a/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementExceptionRecord.java b/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementExceptionRecord.java
new file mode 100644
index 0000000..d9e7cc7
--- /dev/null
+++ b/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementExceptionRecord.java
@@ -0,0 +1,54 @@
+package com.ruoyi.procurementrecord.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Builder;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@TableName("procurement_exception_record")
+@Data
+@Builder
+public class ProcurementExceptionRecord {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 閲囪喘鍙拌处id
+     */
+    private Integer purchaseLedgerId;
+    /**
+     * 寮傚父鎻忚堪
+     */
+    private String exceptionReason;
+
+    /**
+     * 寮傚父鏁伴噺
+     */
+    private BigDecimal exceptionNum;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 淇敼鑰�
+     */
+    private Long updateUser;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 绉熸埛ID
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+}
diff --git a/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordOut.java b/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordOut.java
index 7f1cde6..6c3b1b9 100644
--- a/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordOut.java
+++ b/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordOut.java
@@ -89,4 +89,9 @@
     @TableField(fill = FieldFill.INSERT)
     private Long tenantId;
 
+    /**
+     * 浜у搧ID
+     */
+    private Long productModelId;
+
 }
diff --git a/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java b/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java
index c2b251f..b9bfb2c 100644
--- a/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java
+++ b/src/main/java/com/ruoyi/procurementrecord/pojo/ProcurementRecordStorage.java
@@ -97,6 +97,11 @@
     private Long tenantId;
 
     /**
+     * 浜у搧ID
+     */
+    private Long productModelId;
+
+    /**
      * 姣忕鏁伴噺
      */
     private Integer boxNum;
diff --git a/src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordOutService.java b/src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordOutService.java
index a8fb7eb..31fc05e 100644
--- a/src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordOutService.java
+++ b/src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordOutService.java
@@ -27,4 +27,6 @@
     IPage<ProcurementRecordOutPageDto> listPageByProduct(Page page, ProcurementRecordOutPageDto procurementDto);
 
     IPage<ProcurementRecordOutPageDto> listPageByCustom(Page page, ProcurementRecordOutPageDto procurementDto);
+
+    IPage<ProcurementRecordOutPageDto> listPageBySemiProduct(Page page, ProcurementRecordOutPageDto procurementDto);
 }
diff --git a/src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java b/src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java
index 180fc07..4c3ffee 100644
--- a/src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java
+++ b/src/main/java/com/ruoyi/procurementrecord/service/ProcurementRecordService.java
@@ -3,12 +3,14 @@
 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.basic.pojo.ProductModel;
 import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.procurementrecord.dto.*;
 import com.ruoyi.procurementrecord.pojo.CustomStorage;
 import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
 
 import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 
@@ -55,7 +57,10 @@
 
     int updateManagementByCustom(ProcurementManagementUpdateDto procurementDto);
 
-    CustomStorage detailManagementByCustom(ProcurementManagementUpdateDto procurementDto);
+    BigDecimal getProcurementAmount(Long salesProductId);
+    InventoryInformationDto getReportList();
 
-    ProcurementPageDto detail(ProcurementUpdateDto procurementDto);
+    IPage<ProductModel> listPageProductionStock(Page page);
+
+    IPage<ProcurementPageDto> listPageByProductProduction(Page page, ProcurementPageDto procurementDto);
 }
diff --git a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordOutServiceImpl.java b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordOutServiceImpl.java
index 0735a39..1255afd 100644
--- a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordOutServiceImpl.java
+++ b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordOutServiceImpl.java
@@ -10,7 +10,6 @@
 import com.ruoyi.procurementrecord.dto.ProcurementUpdateDto;
 import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper;
 import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut;
-import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
 import com.ruoyi.procurementrecord.service.ProcurementRecordOutService;
 import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.mapper.SysUserMapper;
@@ -22,7 +21,6 @@
 
 import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
-import java.text.DateFormat;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
@@ -71,7 +69,7 @@
         Long aLong = procurementRecordOutMapper.selectCount(procurementRecordLambdaQueryWrapper);
         ProcurementRecordOut.ProcurementRecordOutBuilder procurementRecordOut = ProcurementRecordOut.builder()
                 .procurementRecordStorageId(procurementRecordOutAdd.getId())
-                .code("LS" + dateFormat.format(now) + String.format("%03d", aLong1 + 1))
+                .code("SC" + dateFormat.format(now) + String.format("%03d", aLong1 + 1))
                 .salesLedgerProductId(procurementRecordOutAdd.getSalesLedgerProductId())
                 .inboundBatches(aLong.equals(0L) ? "绗�1鎵规" : "绗�"+ (aLong + 1) + "鎵规")
                 .inboundNum(new BigDecimal(procurementRecordOutAdd.getQuantity()))
@@ -80,7 +78,8 @@
                 .createUser(Long.valueOf(procurementRecordOutAdd.getUserId()))
                 .createBy(sysUser.getNickName())
                 .updateUser(Long.valueOf(procurementRecordOutAdd.getUserId()))
-                .updateTime(LocalDateTime.now());
+                .updateTime(LocalDateTime.now())
+                .productModelId(procurementRecordOutAdd.getProductModelId());
         this.save(procurementRecordOut.build());
         return 0;
     }
@@ -120,4 +119,9 @@
     public IPage<ProcurementRecordOutPageDto> listPageByCustom(Page page, ProcurementRecordOutPageDto procurementDto) {
         return procurementRecordOutMapper.listPageByCustom(page, procurementDto);
     }
+
+    @Override
+    public IPage<ProcurementRecordOutPageDto> listPageBySemiProduct(Page page, ProcurementRecordOutPageDto procurementDto) {
+        return procurementRecordOutMapper.listPageBySemiProduct(page, procurementDto);
+    }
 }
diff --git a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
index 158e243..b5f630c 100644
--- a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
@@ -4,6 +4,9 @@
 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.basic.mapper.ProductModelMapper;
+import com.ruoyi.basic.pojo.ProductModel;
+import com.ruoyi.common.utils.OrderUtils;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.security.LoginUser;
@@ -13,9 +16,10 @@
 import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper;
 import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper;
 import com.ruoyi.procurementrecord.pojo.CustomStorage;
-import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
 import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut;
+import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
 import com.ruoyi.procurementrecord.service.ProcurementRecordService;
+import com.ruoyi.procurementrecord.utils.StockUtils;
 import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.mapper.SysUserMapper;
 import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
@@ -29,7 +33,6 @@
 
 import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
-import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
@@ -49,6 +52,8 @@
     private final ProcurementRecordOutMapper procurementRecordOutMapper;
 
     private final SalesLedgerProductMapper salesLedgerProductMapper;
+    private final StockUtils stockUtils;
+    private final ProductModelMapper productModelMapper;
 
     @Override
     public List<ProcurementDto> listProcurementBySalesLedgerId(ProcurementDto procurementDto) {
@@ -273,7 +278,7 @@
     @Override
     public void exportCopyTwo(HttpServletResponse response,Integer type) {
         LambdaQueryWrapper<CustomStorage> customStorageLambdaQueryWrapper = new LambdaQueryWrapper<>();
-        customStorageLambdaQueryWrapper.groupBy(CustomStorage::getProductCategory, CustomStorage::getSpecificationModel);
+        customStorageLambdaQueryWrapper.groupBy(CustomStorage::getSupplierName, CustomStorage::getProductCategory, CustomStorage::getSpecificationModel);
         List<CustomStorage> list = customStorageMapper.selectList(customStorageLambdaQueryWrapper);
         // 璁$畻寰呭叆搴撴暟閲�
         // 鏌ヨ閲囪喘璁板綍宸插叆搴撴暟閲�
@@ -285,6 +290,7 @@
         }
         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)){
@@ -415,6 +421,68 @@
     }
 
     @Override
+    public InventoryInformationDto getReportList() {
+        InventoryInformationDto inventoryInformationDto = new InventoryInformationDto();
+        IPage<ProcurementPageDto> procurementPageDtoIPage = this.listPage(new Page<>(1, -1), new ProcurementPageDto());
+        if(CollectionUtils.isEmpty(procurementPageDtoIPage.getRecords())){
+            return inventoryInformationDto;
+        }
+        // 璁$畻鎬诲簱瀛樻暟閲�
+        inventoryInformationDto.setTotalInventoryCount(procurementPageDtoIPage.getRecords().stream()
+                .map(ProcurementPageDto::getInboundNum0)
+                .reduce(BigDecimal.ZERO, BigDecimal::add)
+                .intValue());
+        // 璁$畻鎬诲簱瀛橀噾棰�-ProcurementPageDto閲屾瘡涓璞$殑inboundNum0鍊煎拰taxInclusiveUnitPrice鐨勪箻绉紝涔嬪悗鐩稿姞寰楀埌鎬诲簱瀛橀噾棰�
+        BigDecimal totalInventoryValue = procurementPageDtoIPage.getRecords().stream()
+                // 杩囨护绌哄璞★紝閬垮厤NPE
+                .filter(Objects::nonNull)
+                // 澶勭悊姣忎釜瀵硅薄鐨勭┖鍊硷細null杞负0
+                .map(dto -> {
+                    // 鍏ュ簱鏁伴噺锛歯ull 鈫� 0
+                    BigDecimal inboundNum0 = Optional.ofNullable(dto.getInboundNum0()).orElse(BigDecimal.ZERO);
+                    // 鍚◣鍗曚环锛歯ull 鈫� 0
+                    BigDecimal taxInclusiveUnitPrice = Optional.ofNullable(dto.getTaxInclusiveUnitPrice()).orElse(BigDecimal.ZERO);
+                    // 璁$畻鍗曚釜瀵硅薄鐨勫簱瀛橀噾棰濓細鏁伴噺 脳 鍚◣鍗曚环
+                    return inboundNum0.multiply(taxInclusiveUnitPrice);
+                })
+                // 鎵�鏈夊崟涓噾棰濇眰鍜岋紝鍒濆鍊间负0
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        // 璁剧疆鎬诲簱瀛橀噾棰�
+        inventoryInformationDto.setTotalInventoryValue(totalInventoryValue);
+        // 璁$畻搴撳瓨鍙樺姩鏁伴噺-ProcurementPageDto閲屾瘡涓璞$殑inboundNum鍊煎拰inboundNum0鍊肩殑宸�硷紝涔嬪悗鐩稿姞寰楀埌搴撳瓨鍙樺姩鏁伴噺
+        inventoryInformationDto.setInventoryChangeCount(procurementPageDtoIPage.getRecords().stream()
+                // 杩囨护绌哄璞★紝閬垮厤NPE
+                .filter(Objects::nonNull)
+                // 澶勭悊姣忎釜瀵硅薄鐨勭┖鍊硷細null杞负0
+                .map(dto -> {
+                    // 鍏ュ簱鏁伴噺锛歯ull 鈫� 0
+                    BigDecimal inboundNum = Optional.ofNullable(dto.getInboundNum()).orElse(BigDecimal.ZERO);
+                    // 寰呭嚭搴撴暟閲忥細null 鈫� 0
+                    BigDecimal inboundNum0 = Optional.ofNullable(dto.getInboundNum0()).orElse(BigDecimal.ZERO);
+                    // 璁$畻鍗曚釜瀵硅薄鐨勫簱瀛樺彉鍔ㄦ暟閲忥細鏁伴噺 - 寰呭嚭搴撴暟閲�
+                    return inboundNum.subtract(inboundNum0);
+                })
+                // 鎵�鏈夊崟涓彉鍔ㄦ暟閲忔眰鍜岋紝鍒濆鍊间负0
+                .reduce(BigDecimal.ZERO, BigDecimal::add)
+                .intValue());
+        // 璁$畻搴撳瓨鍙樺姩閲戦ProcurementPageDto閲屾瘡涓璞$殑taxInclusiveTotalPrice鍊肩殑鍜�
+        BigDecimal inventoryChangeValue = procurementPageDtoIPage.getRecords().stream()
+                // 杩囨护绌哄璞★紝閬垮厤NPE
+                .filter(Objects::nonNull)
+                // 澶勭悊姣忎釜瀵硅薄鐨勭┖鍊硷細null杞负0
+                .map(dto -> {
+                    // 鍚◣鎬讳环锛歯ull 鈫� 0
+                    BigDecimal taxInclusiveTotalPrice = Optional.ofNullable(dto.getTaxInclusiveTotalPrice()).orElse(BigDecimal.ZERO);
+                    // 璁$畻鍗曚釜瀵硅薄鐨勫叆搴撳簱瀛橀噾棰濓細鍚◣鎬讳环
+                    return taxInclusiveTotalPrice;
+                })
+                // 鎵�鏈夊崟涓彉鍔ㄩ噾棰濇眰鍜岋紝鍒濆鍊间负0
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        // 璁剧疆搴撳瓨鍙樺姩閲戦
+        inventoryInformationDto.setInventoryChangeValue(inventoryChangeValue.subtract(totalInventoryValue));
+        return inventoryInformationDto;
+    }
+    @Override
     public IPage<ProcurementPageDto> listPageByProduction(Page page, ProcurementPageDto procurementDto) {
         IPage<ProcurementPageDto> procurementPageDtoIPage = procurementRecordMapper.listPageByProduction(page, procurementDto);
         List<ProcurementPageDto> procurementPageDtos = procurementPageDtoIPage.getRecords();
@@ -467,6 +535,7 @@
             Long aLong = customStorageMapper.selectCount(null);
             item.setInboundBatches(aLong.equals(0L) ? "绗�1鎵规(鑷畾涔夊叆搴�)" : "绗�"+ (aLong + 1) + "鎵规(鑷畾涔夊叆搴�)" );
             item.setCreateBy(loginUser.getNickName());
+            item.setCode(OrderUtils.countTodayByCreateTime(customStorageMapper, ""));
             customStorageMapper.insert(item);
         });
         return AjaxResult.success("鑷畾涔夊叆搴撴垚鍔�");
@@ -529,57 +598,108 @@
 
     @Override
     public IPage<ProcurementPageDtoCopy> listPageCopyByProduction(Page page, ProcurementPageDto procurementDto) {
-        IPage<ProcurementPageDtoCopy> procurementPageDtoCopyIPage = procurementRecordMapper.listPageCopyByProduction(page, procurementDto);
+        IPage<ProcurementPageDtoCopy> procurementPageDtoCopyIPage = procurementRecordMapper.listPagePRS(page, procurementDto);
         List<ProcurementPageDtoCopy> procurementPageDtoCopyList = procurementPageDtoCopyIPage.getRecords();
+        // 璁$畻寰呭叆搴撴暟閲�
+        // 鏌ヨ閲囪喘璁板綍宸插叆搴撴暟閲�
+        List<Integer> collect = procurementPageDtoCopyList.stream().map(ProcurementPageDtoCopy::getId).collect(Collectors.toList());
+        if(CollectionUtils.isEmpty( collect)){
+            return procurementPageDtoCopyIPage;
+        }
+        // 1. 鏌ヨ閲囪喘璁板綍宸插叆搴撶殑鍑哄簱璁板綍锛堟寜storageId鍒嗙粍锛�
+        LambdaQueryWrapper<ProcurementRecordOut> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect);
+        List<ProcurementRecordOut> recordOutList = procurementRecordOutMapper.selectList(queryWrapper);
 
+        // 2. 鎸塖alesLedgerProductId鍒嗙粍锛岀粺璁℃瘡涓猧d瀵瑰簲鐨勫凡鍑哄簱鏁伴噺鎬诲拰-宸插嚭搴撴暟閲�
+        Map<Integer, BigDecimal> storageIdToTotalOutNumMap = recordOutList.stream()
+                .collect(Collectors.groupingBy(
+                        ProcurementRecordOut::getSalesLedgerProductId,
+                        Collectors.reducing(
+                                BigDecimal.ZERO,
+                                ProcurementRecordOut::getInboundNum,
+                                (a, b) -> a.add(b == null ? BigDecimal.ZERO : b)
+                        )
+                ));
+        // 2. procurementPageDtoCopyList鎸塖alesLedgerProductId鍒嗙粍锛岀粺璁℃瘡涓猧d瀵瑰簲鐨勫凡鍑哄簱鏁伴噺鎬诲拰-鍏ュ簱搴撴暟閲�
+        Map<Long, BigDecimal> storageIdToTotalintNumMap = procurementPageDtoCopyList.stream()
+                .collect(Collectors.groupingBy(
+                        ProcurementPageDtoCopy::getSalesLedgerProductId,
+                        Collectors.reducing(
+                                BigDecimal.ZERO,
+                                ProcurementPageDtoCopy::getInboundNum,
+                                (a, b) -> a.add(b == null ? BigDecimal.ZERO : b)
+                        )
+                ));
+        // 3. 寰幆缁檇to璧嬪��
         for (ProcurementPageDtoCopy dto : procurementPageDtoCopyList) {
-            List<Long> longs = listCopyIds(dto.getIds());
-            LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
-            procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, longs);
-            procurementRecordLambdaQueryWrapper.eq(ProcurementRecordOut::getType, 2);
-            List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper);
-            if(CollectionUtils.isEmpty(procurementRecords)){
-                dto.setInboundNum0(dto.getInboundNum());
-                dto.setTotalInboundNum(BigDecimal.ZERO);
-                return procurementPageDtoCopyIPage;
-            }
-
-            // 璁$畻宸插嚭搴撴暟閲忔�诲拰锛屽苟璁剧疆寰呭嚭搴撴暟閲�
-            BigDecimal totalInboundNum = procurementRecords.stream()
-                    .map(ProcurementRecordOut::getInboundNum)
-                    .reduce(BigDecimal.ZERO, BigDecimal::add);
-            // 鍑哄簱鏁伴噺 = 鎬绘暟閲� - 寰呭嚭搴撴暟閲�
+            Integer storageId = dto.getId();
+            Integer salesLedgerProductId = Integer.valueOf(Math.toIntExact(dto.getSalesLedgerProductId()));
+            // 鑾峰彇褰撳墠salesLedgerProductId瀵瑰簲鐨勫凡鍑哄簱鎬绘暟锛堥粯璁�0锛�
+            BigDecimal totalInboundNum = storageIdToTotalOutNumMap.getOrDefault(salesLedgerProductId, BigDecimal.ZERO);
+            // 宸插嚭搴撴暟閲�
             dto.setTotalInboundNum(totalInboundNum);
-            // 寰呭嚭搴撴暟閲� = 鎬绘暟閲� - 宸插嚭搴撴暟閲�
-            dto.setInboundNum0(dto.getInboundNum().subtract(totalInboundNum));
-            // 搴撳瓨浠峰��
-            if(dto.getUnitPrice() != null){
-                dto.setTotalPrice(dto.getTotalInboundNum().multiply(dto.getUnitPrice()));
-            }
+            // 寰呭嚭搴撴暟閲� = 鎬绘暟閲� - 宸插嚭搴撴暟閲忥紙鎬绘暟閲忕┖鍊煎垯榛樿0锛�
+//            BigDecimal totalNum = dto.getInboundNum() == null ? BigDecimal.ZERO : dto.getInboundNum();
+            BigDecimal totalNum = storageIdToTotalintNumMap.getOrDefault(salesLedgerProductId, BigDecimal.ZERO);
+            dto.setInboundNum(totalNum);
+            dto.setInboundNum0(totalNum.subtract(totalInboundNum));
+
+            // 搴撳瓨浠峰�� = 宸插嚭搴撴暟閲� * 鍗曚环锛堝崟浠风┖鍊煎垯榛樿0锛�
+            BigDecimal unitPrice = dto.getUnitPrice() == null ? BigDecimal.ZERO : dto.getUnitPrice();
+            dto.setTotalPrice(totalInboundNum.multiply(unitPrice));
         }
         return procurementPageDtoCopyIPage;
     }
 
     @Override
     public IPage<CustomStorage> listPageCopyByCustom(Page page, CustomStorage customStorage) {
+//        LambdaQueryWrapper<CustomStorage> customStorageLambdaQueryWrapper = new LambdaQueryWrapper<>();
+//        customStorageLambdaQueryWrapper.groupBy(CustomStorage::getProductCategory, CustomStorage::getSpecificationModel,CustomStorage::getTaxInclusiveUnitPrice);
+//        if(customStorage != null){
+//            if(!StringUtils.isEmpty(customStorage.getSupplierName())){
+//                customStorageLambdaQueryWrapper.like(CustomStorage::getSupplierName, customStorage.getSupplierName());
+//            }
+//            // 绛涢�夊叆搴撴椂闂�
+//            if(customStorage.getInboundDate() != null){
+//                customStorageLambdaQueryWrapper.eq(CustomStorage::getInboundDate, customStorage.getInboundDate());
+//            }
+//            if(!StringUtils.isEmpty(customStorage.getProductCategory())){
+//                customStorageLambdaQueryWrapper.like(CustomStorage::getProductCategory, customStorage.getProductCategory());
+//            }
+//        }
+//        customStorageLambdaQueryWrapper.orderByDesc(CustomStorage::getInboundDate);
         IPage<CustomStorage> pageList = customStorageMapper.listPageCopyByCustom(page, customStorage);
-        List<CustomStorage> procurementPageDtoCopyList = pageList.getRecords();
 
+        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<Long> longs = listCopyIds(dto.getIds());
-            LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
-            procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, longs);
-            procurementRecordLambdaQueryWrapper.eq(ProcurementRecordOut::getType, 3);
-            List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper);
-            if(CollectionUtils.isEmpty(procurementRecords)){
+            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);
-                return pageList;
+                continue;
             }
 
             // 璁$畻宸插嚭搴撴暟閲忔�诲拰锛屽苟璁剧疆寰呭嚭搴撴暟閲�
-            BigDecimal totalInboundNum = procurementRecords.stream()
+            BigDecimal totalInboundNum = collect1.stream()
                     .map(ProcurementRecordOut::getInboundNum)
                     .reduce(BigDecimal.ZERO, BigDecimal::add);
             // 鍑哄簱鏁伴噺 = 鎬绘暟閲� - 寰呭嚭搴撴暟閲�
@@ -621,26 +741,17 @@
     }
 
     @Override
-    public CustomStorage detailManagementByCustom(ProcurementManagementUpdateDto procurementDto) {
-        if(procurementDto == null) return null;
-        return customStorageMapper.selectById(procurementDto.getId());
-    }
-
-    @Override
-    public ProcurementPageDto detail(ProcurementUpdateDto procurementDto) {
-        ProcurementPageDto procurementPageDto = new ProcurementPageDto();
-        if(procurementDto == null) return procurementPageDto;
-        ProcurementRecordStorage procurementRecordStorage = procurementRecordMapper.selectById(procurementDto.getId());
-        if(procurementRecordStorage == null) return procurementPageDto;
-        BeanUtils.copyProperties(procurementRecordStorage, procurementPageDto);
-        SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(procurementRecordStorage.getSalesLedgerProductId());
-        if(salesLedgerProduct != null){
-            procurementPageDto.setProductCategory(salesLedgerProduct.getProductCategory());
-            procurementPageDto.setSpecificationModel(salesLedgerProduct.getSpecificationModel());
-            procurementPageDto.setUnit(salesLedgerProduct.getUnit());
-            procurementPageDto.setTaxInclusiveUnitPrice(salesLedgerProduct.getTaxInclusiveUnitPrice());
+    public BigDecimal getProcurementAmount(Long salesProductId) {
+        LambdaQueryWrapper<ProcurementRecordStorage> procurementRecordStorageLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        procurementRecordStorageLambdaQueryWrapper.eq(ProcurementRecordStorage::getSalesLedgerProductId, salesProductId)
+                .eq(ProcurementRecordStorage::getType, 2);
+        List<ProcurementRecordStorage> procurementRecordStorages = procurementRecordMapper.selectList(procurementRecordStorageLambdaQueryWrapper);
+        if(CollectionUtils.isEmpty( procurementRecordStorages)){
+            return BigDecimal.ZERO;
         }
-        return procurementPageDto;
+        return procurementRecordStorages.stream()
+                .map(ProcurementRecordStorage::getInboundNum)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
     }
 
     @Override
@@ -669,8 +780,18 @@
                     .cartonSpecifications(detail.getCartonSpecifications())
                     .dollarPrice(detail.getDollarPrice())
                     .updateUser(loginUser.getUserId())
-                    .createBy(procurementDto.getNickName());
+                    .createBy(procurementDto.getNickName())
+                    .productModelId(detail.getProductModelId());
             this.save(procurementRecordBuilder.build());
+            // 鍏ュ簱鎴愬姛鍑忔帀閲囪喘鏁伴噺
+//            LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductLambdaQueryWrapper = new LambdaQueryWrapper<>();
+//            salesLedgerProductLambdaQueryWrapper.eq(SalesLedgerProduct::getId, detail.getId());
+//            SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectOne(salesLedgerProductLambdaQueryWrapper);
+//            if(salesLedgerProduct == null){
+//               throw new RuntimeException("鏈壘鍒拌鍟嗗搧");
+//            }
+//            salesLedgerProduct.setQuantity(salesLedgerProduct.getQuantity().subtract(detail.getInboundQuantity()));
+//            salesLedgerProductMapper.updateById(salesLedgerProduct);
         }
         return 1;
     }
@@ -728,16 +849,30 @@
     public IPage<ProcurementPageDtoCopy> listPageCopy(Page page, ProcurementPageDto procurementDto) {
         IPage<ProcurementPageDtoCopy> procurementPageDtoCopyIPage = procurementRecordMapper.listPageCopy(page, procurementDto);
         List<ProcurementPageDtoCopy> procurementPageDtoCopyList = procurementPageDtoCopyIPage.getRecords();
+        // 璁$畻寰呭叆搴撴暟閲�
+        // 鏌ヨ閲囪喘璁板綍宸插叆搴撴暟閲�
+        List<Integer> collect = procurementPageDtoCopyList.stream().map(ProcurementPageDtoCopy::getId).collect(Collectors.toList());
+        if(CollectionUtils.isEmpty( collect)){
+            return procurementPageDtoCopyIPage;
+        }
+        LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, collect);
+        procurementRecordLambdaQueryWrapper.eq(ProcurementRecordOut::getType,1);
+        List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper);
+        if(CollectionUtils.isEmpty( procurementRecords)){
+            return procurementPageDtoCopyIPage;
+        }
         for (ProcurementPageDtoCopy dto : procurementPageDtoCopyList) {
-            List<Long> longs = listCopyIds(dto.getIds());
-            LambdaQueryWrapper<ProcurementRecordOut> procurementRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
-            procurementRecordLambdaQueryWrapper.in(ProcurementRecordOut::getProcurementRecordStorageId, longs);
-            procurementRecordLambdaQueryWrapper.eq(ProcurementRecordOut::getType,1);
-            List<ProcurementRecordOut> procurementRecords = procurementRecordOutMapper.selectList(procurementRecordLambdaQueryWrapper);
-            if(CollectionUtils.isEmpty(procurementRecords)){
+            // 鏍规嵁閲囪喘鍙拌处ID绛涢�夊搴旂殑鍑哄簱璁板綍
+            List<ProcurementRecordOut> collect1 = procurementRecords.stream()
+                    .filter(ProcurementRecordOut -> ProcurementRecordOut.getProcurementRecordStorageId().equals(dto.getId()) && ProcurementRecordOut.getType().equals(1))
+                    .collect(Collectors.toList());
+
+            // 濡傛灉娌℃湁鐩稿叧鐨勫嚭搴撹褰曪紝璺宠繃璇ユ潯鏁版嵁
+            if(CollectionUtils.isEmpty(collect1)){
                 dto.setInboundNum0(dto.getInboundNum());
                 dto.setTotalInboundNum(BigDecimal.ZERO);
-                return procurementPageDtoCopyIPage;
+                continue;
             }
             // 璁$畻宸插嚭搴撴暟閲忔�诲拰锛屽苟璁剧疆寰呭嚭搴撴暟閲�
             BigDecimal totalInboundNum = procurementRecords.stream()
@@ -754,5 +889,22 @@
         }
         return procurementPageDtoCopyIPage;
     }
+    @Override
+    public IPage<ProductModel> listPageProductionStock(Page page) {
+        ProductModel productModel = new ProductModel();
+        IPage<ProductModel> iPage = productModelMapper.listPageProductModel(page, productModel);
+        iPage.getRecords().forEach(item -> {
+            item.setInboundNum(stockUtils.getStockQuantity(item.getId()).get("inboundNum"));
+            item.setOutboundNum(stockUtils.getStockQuantity(item.getId()).get("outboundNum"));
+            item.setStockQuantity(stockUtils.getStockQuantity(item.getId()).get("stockQuantity"));
+        });
+        return iPage;
+    }
+
+    @Override
+    public IPage<ProcurementPageDto> listPageByProductProduction(Page page, ProcurementPageDto procurementDto) {
+        IPage<ProcurementPageDto> procurementPageDtoIPage = procurementRecordMapper.listPageByProductProduction(page, procurementDto);
+        return procurementPageDtoIPage;
+    }
 
 }
diff --git a/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java b/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
new file mode 100644
index 0000000..0d61f87
--- /dev/null
+++ b/src/main/java/com/ruoyi/procurementrecord/utils/StockUtils.java
@@ -0,0 +1,32 @@
+package com.ruoyi.procurementrecord.utils;
+
+import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper;
+import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Component;
+
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.Map;
+
+@Component
+@RequiredArgsConstructor
+public class StockUtils {
+    private final ProcurementRecordOutMapper procurementRecordOutMapper;
+    private final ProcurementRecordMapper procurementRecordMapper;
+
+    // 鑾峰彇鍟嗗搧鍏ュ簱鏁伴噺,鍑哄簱鏁伴噺,鍓╀綑搴撳瓨
+    public Map<String, BigDecimal> getStockQuantity(Long productModelId) {
+        // 鍏ュ簱鏁伴噺
+        BigDecimal sumQuantity = procurementRecordMapper.getSumQuantity(productModelId);
+        // 鍑哄簱鏁伴噺
+        BigDecimal outQuantity = procurementRecordOutMapper.getSumQuantity(productModelId);
+        // 鍓╀綑搴撳瓨
+        BigDecimal stockQuantity = outQuantity.compareTo(sumQuantity) > 0 ? BigDecimal.ZERO : sumQuantity.subtract(outQuantity);
+        Map<String, BigDecimal> stockMap = new HashMap<>();
+        stockMap.put("inboundNum", sumQuantity);
+        stockMap.put("outboundNum", outQuantity);
+        stockMap.put("stockQuantity", stockQuantity);
+        return stockMap;
+    }
+}
diff --git a/src/main/java/com/ruoyi/production/controller/ProcessRouteController.java b/src/main/java/com/ruoyi/production/controller/ProcessRouteController.java
new file mode 100644
index 0000000..31ff3fb
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/controller/ProcessRouteController.java
@@ -0,0 +1,52 @@
+package com.ruoyi.production.controller;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.production.dto.ProcessRouteDto;
+import com.ruoyi.production.pojo.ProcessRoute;
+import com.ruoyi.production.pojo.ProcessRouteItem;
+import com.ruoyi.production.service.ProcessRouteItemService;
+import com.ruoyi.production.service.ProcessRouteService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Arrays;
+
+@RestController
+@RequestMapping("processRoute")
+@Api(tags = "宸ヨ壓璺嚎")
+public class ProcessRouteController {
+
+    @Autowired
+    private ProcessRouteService processRouteService;
+
+    @Autowired
+    private ProcessRouteItemService processRouteItemService;
+
+    @GetMapping("page")
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    public R page(Page<ProcessRouteDto>  page, ProcessRouteDto processRouteDto) {
+        return R.ok(processRouteService.pageProcessRouteDto(page, processRouteDto));
+    }
+
+    @ApiOperation("鏂板宸ヨ壓璺嚎")
+    @PostMapping ()
+    public R add(@RequestBody  ProcessRoute processRoute) {
+        return R.ok(processRouteService.saveProcessRoute(processRoute));
+    }
+    @ApiOperation("淇敼宸ヨ壓璺嚎")
+    @PutMapping ()
+    public R update(@RequestBody  ProcessRoute processRoute) {
+        return R.ok(processRouteService.updateById(processRoute));
+    }
+    @ApiOperation("鍒犻櫎宸ヨ壓璺嚎")
+    @DeleteMapping("/{ids}")
+    public R delete(@PathVariable("ids") Long[] ids) {
+        //鍒犻櫎宸ヨ壓璺嚎璇︽儏
+        processRouteItemService.remove(Wrappers.<ProcessRouteItem>lambdaQuery().in(ProcessRouteItem::getRouteId,Arrays.asList(ids)));
+        return R.ok(processRouteService.removeBatchByIds(Arrays.asList(ids)));
+    }
+}
diff --git a/src/main/java/com/ruoyi/production/controller/ProcessRouteItemController.java b/src/main/java/com/ruoyi/production/controller/ProcessRouteItemController.java
new file mode 100644
index 0000000..451548d
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/controller/ProcessRouteItemController.java
@@ -0,0 +1,53 @@
+package com.ruoyi.production.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+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.framework.web.domain.R;
+import com.ruoyi.production.dto.ProcessRouteItemDto;
+import com.ruoyi.production.pojo.ProcessRoute;
+import com.ruoyi.production.pojo.ProcessRouteItem;
+import com.ruoyi.production.service.ProcessRouteItemService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Arrays;
+import java.util.List;
+
+@RestController
+@RequestMapping("processRouteItem")
+@Api(tags = "宸ヨ壓璺嚎鏄庣粏")
+public class ProcessRouteItemController {
+    @Autowired
+    private ProcessRouteItemService processRouteItemService;
+
+    @GetMapping("list")
+    public R listProcessRouteItemDto(ProcessRouteItemDto processRouteItemDto) {
+        return R.ok(processRouteItemService.listProcessRouteItemDto(processRouteItemDto));
+    }
+
+    @PostMapping ()
+    @ApiOperation("鏂板淇敼")
+    public R addOrUpdate(@RequestBody ProcessRouteItem processRouteItem) {
+        return R.ok(processRouteItemService.saveOrUpdate(processRouteItem));
+    }
+
+    @PostMapping ("/sort")
+    @ApiOperation("鎺掑簭")
+    public R sort(@RequestBody ProcessRouteItem processRouteItem) {
+        return R.ok(processRouteItemService.sort(processRouteItem));
+    }
+
+    @ApiOperation("鍒犻櫎宸ヨ壓璺嚎鏄庣粏")
+    @DeleteMapping("/batchDelete/{id}")
+    @Log(title = "鍒犻櫎", businessType = BusinessType.DELETE)
+    public AjaxResult batchDelete(@PathVariable("id") Long id) {
+        return AjaxResult.success(processRouteItemService.batchDelete(id));
+    }
+}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductBomController.java b/src/main/java/com/ruoyi/production/controller/ProductBomController.java
new file mode 100644
index 0000000..b8d9416
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/controller/ProductBomController.java
@@ -0,0 +1,87 @@
+package com.ruoyi.production.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+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.production.dto.ProductBomDto;
+import com.ruoyi.production.dto.ProductProcessDto;
+import com.ruoyi.production.pojo.ProcessRoute;
+import com.ruoyi.production.pojo.ProductBom;
+import com.ruoyi.production.pojo.ProductProcess;
+import com.ruoyi.production.service.ProcessRouteService;
+import com.ruoyi.production.service.ProductBomService;
+import com.ruoyi.production.service.ProductProcessService;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * <p>
+ * BOM涓昏〃 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-15 09:59:27
+ */
+@RestController
+@RequestMapping("/productBom")
+public class ProductBomController {
+
+    @Autowired
+    private ProductBomService productBomService;
+
+    @Autowired
+    private ProcessRouteService processRouteService;
+
+    @GetMapping("/listPage")
+    @Log(title = "BOM-鍒嗛〉鏌ヨ", businessType = BusinessType.OTHER)
+    @ApiOperation("BOM-鍒嗛〉鏌ヨ")
+    public AjaxResult listPage(Page page, ProductBomDto productBomDto) {
+        IPage<ProductBomDto> listPage = productBomService.listPage(page, productBomDto);
+        return AjaxResult.success(listPage);
+    }
+
+    @ApiModelProperty("鏂板BOM")
+    @PostMapping("/add")
+    @Log(title = "鏂板", businessType = BusinessType.INSERT)
+    public AjaxResult add( @RequestBody ProductBom productBom) {
+        return productBomService.add(productBom);
+    }
+
+    @ApiOperation("鏇存柊BOM")
+    @Log(title = "淇敼", businessType = BusinessType.UPDATE)
+    @PutMapping("/update")
+    public AjaxResult update(@RequestBody ProductBom productBom) {
+        return AjaxResult.success(productBomService.updateById(productBom));
+    }
+
+    @ApiOperation("鍒犻櫎BOM")
+    @DeleteMapping("/batchDelete")
+    @Log(title = "鍒犻櫎", businessType = BusinessType.DELETE)
+    public AjaxResult batchDelete(@RequestBody List<Integer> ids) {
+        List<ProcessRoute> list = processRouteService.list(Wrappers.<ProcessRoute>lambdaQuery().in(ProcessRoute::getBomId, ids));
+        if (list.size()>0){
+            return AjaxResult.error("璇OM宸茬粡瀛樺湪瀵瑰簲鐨勫伐鑹鸿矾绾�,鏃犳硶杩涜鍒犻櫎");
+        }
+        if(CollectionUtils.isEmpty(ids)){
+            return AjaxResult.error("璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�");
+        }
+        return AjaxResult.success(productBomService.removeBatchByIds(ids));
+    }
+
+    @GetMapping("/getByModel")
+    @Log(title = "BOM-鏍规嵁閫夋嫨鐨勮鏍煎瀷鍙穒d鏌ヨ瀛樺湪鐨刡om", businessType = BusinessType.OTHER)
+    @ApiOperation("BOM-鏍规嵁閫夋嫨鐨勮鏍煎瀷鍙穒d鏌ヨ瀛樺湪鐨刡om")
+    public AjaxResult getByModel(Long productModelId) {
+        List<ProductBom> productBoms = productBomService.list(Wrappers.<ProductBom>lambdaQuery().eq(ProductBom::getProductModelId, productModelId));
+        return AjaxResult.success(productBoms);
+    }
+
+}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductOrderController.java b/src/main/java/com/ruoyi/production/controller/ProductOrderController.java
new file mode 100644
index 0000000..658b40a
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/controller/ProductOrderController.java
@@ -0,0 +1,67 @@
+package com.ruoyi.production.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.basic.pojo.Customer;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.production.dto.ProductOrderDto;
+import com.ruoyi.production.pojo.ProcessRoute;
+import com.ruoyi.production.pojo.ProductOrder;
+import com.ruoyi.production.service.ProductOrderService;
+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;
+
+@RequestMapping("productOrder")
+@RestController
+@Api(tags = "鐢熶骇璁㈠崟")
+public class ProductOrderController {
+
+    @Autowired
+    private ProductOrderService productOrderService;
+
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @GetMapping("page")
+    public R page(ProductOrderDto productOrder, Page page) {
+        return R.ok(productOrderService.pageProductOrder(page, productOrder));
+    }
+
+    @ApiOperation("缁戝畾宸ヨ壓璺嚎")
+    @PostMapping("/bindingRoute")
+    public R bindingRoute(@RequestBody ProductOrder productOrder) {
+        return R.ok(productOrderService.bindingRoute(productOrder));
+    }
+
+    @ApiOperation("鏌ヨ瑙勬牸鍨嬪彿瀵瑰簲鐨勫伐鑹鸿矾绾�")
+    @GetMapping("/listProcessRoute")
+    public R listProcessRoute(Long productModelId) {
+        return R.ok(productOrderService.listProcessRoute(productModelId));
+    }
+
+    /**
+     * 瀵煎嚭鐢熶骇璁㈠崟
+     */
+    @Log(title = "鐢熶骇璁㈠崟", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, ProductOrderDto productOrderDto) {
+        List<ProductOrderDto> list;
+        list = productOrderService.pageProductOrder(new Page<>(1, -1), productOrderDto).getRecords();
+        ExcelUtil<ProductOrderDto> util = new ExcelUtil<ProductOrderDto>(ProductOrderDto.class);
+        util.exportExcel(response, list, "鐢熶骇璁㈠崟鏁版嵁");
+    }
+
+    @ApiOperation("鏌ヨ鐢熶骇璁㈠崟瀵瑰簲鐨凚OM")
+    @GetMapping("/listProcessBom")
+    public R listProcessBom(Long orderId) {
+        return R.ok(productOrderService.listProcessBom(orderId));
+    }
+
+
+}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductProcessController.java b/src/main/java/com/ruoyi/production/controller/ProductProcessController.java
new file mode 100644
index 0000000..cff0c60
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/controller/ProductProcessController.java
@@ -0,0 +1,89 @@
+package com.ruoyi.production.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.basic.pojo.Customer;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.device.pojo.DeviceRepair;
+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.oA.pojo.OaProject;
+import com.ruoyi.production.dto.ProductProcessDto;
+import com.ruoyi.production.pojo.ProductProcess;
+import com.ruoyi.production.service.impl.ProductProcessServiceImpl;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+@RestController
+@Api(tags = "宸ュ簭")
+@RequestMapping("/productProcess")
+public class ProductProcessController extends BaseController {
+
+
+    @Autowired
+    private ProductProcessServiceImpl productProcessService;
+
+    @GetMapping("/listPage")
+    @Log(title = "宸ュ簭-鍒嗛〉鏌ヨ", businessType = BusinessType.OTHER)
+    @ApiOperation("宸ュ簭-鍒嗛〉鏌ヨ")
+    public AjaxResult listPage(Page page, ProductProcessDto productProcessDto) {
+        IPage<ProductProcessDto> listPage = productProcessService.listPage(page, productProcessDto);
+        return AjaxResult.success(listPage);
+    }
+
+    @ApiModelProperty("鏂板宸ュ簭")
+    @PostMapping()
+    @Log(title = "鏂板", businessType = BusinessType.INSERT)
+    public AjaxResult add( @RequestBody ProductProcessDto productProcessDto) {
+        return productProcessService.add(productProcessDto);
+    }
+
+    @ApiOperation("鏇存柊宸ュ簭")
+    @Log(title = "淇敼", businessType = BusinessType.UPDATE)
+    @PutMapping("/update")
+    public AjaxResult update(@RequestBody ProductProcess productProcess) {
+        return AjaxResult.success(productProcessService.updateById(productProcess));
+    }
+
+    @ApiOperation("鍒犻櫎宸ュ簭")
+    @DeleteMapping("/batchDelete")
+    @Log(title = "鍒犻櫎", businessType = BusinessType.DELETE)
+    public AjaxResult batchDelete(@RequestBody List<Integer> ids) {
+        if(CollectionUtils.isEmpty(ids)){
+            return AjaxResult.error("璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�");
+        }
+        return AjaxResult.success(productProcessService.removeBatchByIds(ids));
+    }
+
+    @ApiOperation("鏌ヨ鎵�鏈夊伐搴�")
+    @GetMapping("/list")
+    public AjaxResult list() {
+        return AjaxResult.success(productProcessService.list());
+        }
+
+    /**
+     * 瀵煎叆宸ュ簭
+     */
+    @Log(title = "宸ュ簭", businessType = BusinessType.IMPORT)
+    @PostMapping("/importData")
+    public AjaxResult importData(MultipartFile file) throws Exception {
+        return productProcessService.importData(file);
+    }
+
+    @PostMapping("/downloadTemplate")
+    @Log(title = "宸ュ簭-涓嬭浇妯℃澘", businessType = BusinessType.EXPORT)
+    public void downloadTemplate(HttpServletResponse response) {
+        ExcelUtil<ProductProcess> util = new ExcelUtil<ProductProcess>(ProductProcess.class);
+        util.importTemplateExcel(response, "宸ュ簭妯℃澘");
+    }
+}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductProcessRouteController.java b/src/main/java/com/ruoyi/production/controller/ProductProcessRouteController.java
new file mode 100644
index 0000000..bb1b010
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/controller/ProductProcessRouteController.java
@@ -0,0 +1,18 @@
+package com.ruoyi.production.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-15 02:51:09
+ */
+@RestController
+@RequestMapping("/productProcessRoute")
+public class ProductProcessRouteController {
+
+}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductProcessRouteItemController.java b/src/main/java/com/ruoyi/production/controller/ProductProcessRouteItemController.java
new file mode 100644
index 0000000..2d5231d
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/controller/ProductProcessRouteItemController.java
@@ -0,0 +1,78 @@
+package com.ruoyi.production.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.production.dto.ProductProcessRouteItemDto;
+import com.ruoyi.production.mapper.*;
+import com.ruoyi.production.pojo.*;
+import com.ruoyi.production.service.ProductProcessRouteItemService;
+import com.ruoyi.production.service.ProductProcessRouteService;
+import com.ruoyi.production.service.ProductWorkOrderService;
+import com.ruoyi.quality.mapper.QualityInspectMapper;
+import com.ruoyi.quality.pojo.QualityInspect;
+import com.ruoyi.sales.mapper.SalesLedgerMapper;
+import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.sales.pojo.SalesLedger;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@RequestMapping("/productProcessRoute")
+@RestController
+@AllArgsConstructor
+@Api(tags = "鐢熶骇宸ヨ壓璺嚎")
+public class ProductProcessRouteItemController {
+
+
+    private ProductProcessRouteItemService productProcessRouteItemService;
+    private ProductProcessRouteService productProcessRouteService;
+
+    @GetMapping("list")
+    @ApiOperation("鏍规嵁Id鏌ヨ宸ヨ壓璺嚎瀛愯〃")
+    public R list(Long orderId) {
+        return R.ok(productProcessRouteItemService.listItem(orderId));
+    }
+
+    @GetMapping("listMain")
+    @ApiOperation("鏍规嵁Id鏌ヨ宸ヨ壓璺嚎涓昏〃")
+    public R listMain(Long orderId) {
+        return R.ok(productProcessRouteService.listMain(orderId));
+    }
+
+    @PostMapping("/addRouteItem")
+    @ApiOperation("鏂板鐢熶骇璁㈠崟鐨勫伐鑹鸿矾绾胯鎯�")
+    public R addRouteItem(@RequestBody ProductProcessRouteItem productProcessRouteItem) {
+        return productProcessRouteItemService.addRouteItem(productProcessRouteItem);
+    }
+
+    @PostMapping("/updateRouteItem")
+    @ApiOperation("淇敼鐢熶骇璁㈠崟鐨勫伐鑹鸿矾绾胯鎯�")
+    public R updateRouteItem(@RequestBody ProductProcessRouteItem productProcessRouteItem) {
+        return R.ok(productProcessRouteItemService.updateById(productProcessRouteItem));
+    }
+
+    @DeleteMapping("/deleteRouteItem/{id}")
+    @ApiOperation("鍒犻櫎鐢熶骇宸ヨ壓璺嚎")
+    public R deleteRouteItem(@PathVariable("id") Long id) {
+        return productProcessRouteItemService.deleteRouteItem(id);
+    }
+
+    @PostMapping ("/sortRouteItem")
+    @ApiOperation("鎺掑簭")
+    public R sortRouteItem(@RequestBody ProductProcessRouteItem productProcessRouteItem) {
+        return R.ok(productProcessRouteItemService.sortRouteItem(productProcessRouteItem));
+    }
+}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductStructureController.java b/src/main/java/com/ruoyi/production/controller/ProductStructureController.java
new file mode 100644
index 0000000..2f99a00
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/controller/ProductStructureController.java
@@ -0,0 +1,40 @@
+package com.ruoyi.production.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+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.framework.web.domain.R;
+import com.ruoyi.production.dto.ProductProcessDto;
+import com.ruoyi.production.dto.ProductStructureDto;
+import com.ruoyi.production.pojo.ProductStructure;
+import com.ruoyi.production.service.ProductStructureService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Arrays;
+
+@RequestMapping("productStructure")
+@RestController
+@Api(tags = "BOM")
+public class ProductStructureController {
+    @Autowired
+    private ProductStructureService productStructureService;
+
+
+    @ApiOperation("鏂板BOM")
+    @PostMapping()
+    public R addOrUpdate(@RequestBody ProductStructureDto productStructureDto){
+        return R.ok(productStructureService.addProductStructureDto(productStructureDto));
+    }
+
+    @ApiOperation("BOM鏌ョ湅璇︽儏")
+    @GetMapping("/listBybomId/{bomId}")
+    public R listBybomId( @PathVariable("bomId") Long bomId){
+        return R.ok(productStructureService.listBybomId(bomId));
+    }
+}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductWorkOrderController.java b/src/main/java/com/ruoyi/production/controller/ProductWorkOrderController.java
new file mode 100644
index 0000000..f595d98
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/controller/ProductWorkOrderController.java
@@ -0,0 +1,37 @@
+package com.ruoyi.production.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.production.dto.ProductWorkOrderDto;
+import com.ruoyi.production.service.ProductWorkOrderService;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@AllArgsConstructor
+@RequestMapping("/productWorkOrder")
+public class ProductWorkOrderController {
+
+    private ProductWorkOrderService productWorkOrderservice;
+
+
+    /**
+     * 浜у搧宸ュ崟瀹炰綋绫诲垎椤垫煡璇�
+     */
+    @ApiOperation("浜у搧宸ュ崟瀹炰綋绫诲垎椤垫煡璇�")
+    @GetMapping("/page")
+    public R page(Page<ProductWorkOrderDto> page, ProductWorkOrderDto productWorkOrder) {
+        return R.ok(productWorkOrderservice.listPage(page, productWorkOrder));
+    }
+
+    /**
+     * 浜у搧宸ュ崟鏇存柊
+     */
+    @ApiOperation("浜у搧宸ュ崟鏇存柊")
+    @PostMapping ("/updateProductWorkOrder")
+    public R updateProductWorkOrder(@RequestBody ProductWorkOrderDto productWorkOrderDto) {
+        return R.ok(productWorkOrderservice.updateProductWorkOrder(productWorkOrderDto));
+    }
+
+}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductionProductInputController.java b/src/main/java/com/ruoyi/production/controller/ProductionProductInputController.java
new file mode 100644
index 0000000..b4bf7dc
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/controller/ProductionProductInputController.java
@@ -0,0 +1,25 @@
+package com.ruoyi.production.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.production.dto.ProductionProductInputDto;
+import com.ruoyi.production.service.ProductionProductInputService;
+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("productionProductInput")
+@RestController
+@Api(value = "鐢熶骇鎶曞叆")
+public class ProductionProductInputController {
+
+    @Autowired
+    private ProductionProductInputService productionProductInputService;
+
+    @GetMapping("listPage")
+    public R page(Page<ProductionProductInputDto> page, ProductionProductInputDto productionProductInputDto) {
+        return R.ok(productionProductInputService.listPageProductionProductInputDto(page, productionProductInputDto));
+    }
+}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java b/src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java
new file mode 100644
index 0000000..948d6de
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/controller/ProductionProductMainController.java
@@ -0,0 +1,52 @@
+package com.ruoyi.production.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.production.dto.ProductProcessRouteItemDto;
+import com.ruoyi.production.dto.ProductionProductMainDto;
+import com.ruoyi.production.service.ProductionProductMainService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Arrays;
+import java.util.List;
+
+@RequestMapping("productionProductMain")
+@RestController
+@Api(value = "鐢熶骇鎶ュ伐")
+public class ProductionProductMainController {
+
+    @Autowired
+    private ProductionProductMainService productionProductMainService;
+
+    /**
+     * 鎶ュ伐鏌ヨ
+     * @param page
+     * @param productionProductMainDto
+     * @return
+     */
+    @GetMapping("listPage")
+    public R page(Page<ProductionProductMainDto> page, ProductionProductMainDto productionProductMainDto) {
+        return R.ok(productionProductMainService.listPageProductionProductMainDto(page, productionProductMainDto));
+    }
+
+    /**
+     * 鎶ュ伐鏂板鏇存柊
+     * @param productionProductMainDto
+     * @return
+     */
+    @PostMapping("addProductMain")
+    public R addProductMain(@RequestBody ProductionProductMainDto productionProductMainDto) {
+        return R.ok(productionProductMainService.addProductMain(productionProductMainDto));
+    }
+
+    @ApiOperation("鍒犻櫎鎶ュ伐")
+    @DeleteMapping("/delete")
+    @Transactional(rollbackFor = Exception.class)
+    public R delete(@RequestBody ProductionProductMainDto productionProductMainDto) {
+        return R.ok(productionProductMainService.removeProductMain(productionProductMainDto));
+    }
+}
diff --git a/src/main/java/com/ruoyi/production/controller/ProductionProductOutputController.java b/src/main/java/com/ruoyi/production/controller/ProductionProductOutputController.java
new file mode 100644
index 0000000..ca9c1e8
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/controller/ProductionProductOutputController.java
@@ -0,0 +1,27 @@
+package com.ruoyi.production.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.production.dto.ProductionProductInputDto;
+import com.ruoyi.production.dto.ProductionProductOutputDto;
+import com.ruoyi.production.service.ProductionProductInputService;
+import com.ruoyi.production.service.ProductionProductOutputService;
+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("productionProductOutput")
+@RestController
+@Api(value = "鐢熶骇浜у嚭")
+public class ProductionProductOutputController {
+
+    @Autowired
+    private ProductionProductOutputService productionProductOutputService;
+
+    @GetMapping("listPage")
+    public R page(Page<ProductionProductOutputDto> page, ProductionProductOutputDto productionProductOutputDto) {
+        return R.ok(productionProductOutputService.listPageProductionProductOutputDto(page, productionProductOutputDto));
+    }
+}
diff --git a/src/main/java/com/ruoyi/production/controller/SalesLedgerSchedulingController.java b/src/main/java/com/ruoyi/production/controller/SalesLedgerSchedulingController.java
index 5ca3bc2..ae73e64 100644
--- a/src/main/java/com/ruoyi/production/controller/SalesLedgerSchedulingController.java
+++ b/src/main/java/com/ruoyi/production/controller/SalesLedgerSchedulingController.java
@@ -1,5 +1,6 @@
 package com.ruoyi.production.controller;
 
+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.ruoyi.common.utils.poi.ExcelUtil;
@@ -12,14 +13,22 @@
 import com.ruoyi.production.dto.ProductionDispatchAddDto;
 import com.ruoyi.production.dto.SalesLedgerSchedulingDto;
 import com.ruoyi.production.dto.SalesLedgerSchedulingProcessDto;
+import com.ruoyi.production.mapper.SpeculativeTradingInfoMapper;
+import com.ruoyi.production.pojo.SpeculativeTradingInfo;
 import com.ruoyi.production.service.impl.SalesLedgerSchedulingServiceImpl;
+import com.ruoyi.sales.mapper.LossMapper;
+import com.ruoyi.sales.pojo.Loss;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -33,6 +42,70 @@
 
     @Autowired
     private SalesLedgerSchedulingServiceImpl salesLedgerSchedulingService;
+
+
+    @Autowired
+    private SpeculativeTradingInfoMapper speculativeTradingInfoMapper;
+
+    @Autowired
+    private LossMapper lossMapper;
+
+    @GetMapping("/loss")
+    @Log(title = "鐢熶骇绠$悊-鐢熶骇娲惧伐-鎹熻�楃巼", businessType = BusinessType.OTHER)
+    @ApiOperation("鐢熶骇绠$悊-鐢熶骇娲惧伐-鎹熻�楃巼")
+    public AjaxResult loss() {
+        return AjaxResult.success(lossMapper.selectOne(new LambdaQueryWrapper<Loss>().last("limit 1")));
+    }
+
+    @PostMapping("/addLoss")
+    @Log(title = "鐢熶骇绠$悊-鐢熶骇娲惧伐-娣诲姞鎹熻�楃巼", businessType = BusinessType.INSERT)
+    @ApiOperation("鐢熶骇绠$悊-鐢熶骇娲惧伐-娣诲姞鎹熻�楃巼")
+    public AjaxResult addLoss(@RequestBody Loss loss) {
+        lossMapper.insert(loss);
+        return AjaxResult.success("娣诲姞鎹熻�楃巼鎴愬姛");
+    }
+
+    @PostMapping("/updateLoss")
+    @Log(title = "鐢熶骇绠$悊-鐢熶骇娲惧伐-淇敼鎹熻�楃巼", businessType = BusinessType.UPDATE)
+    @ApiOperation("鐢熶骇绠$悊-鐢熶骇娲惧伐-淇敼鎹熻�楃巼")
+    public AjaxResult updateLoss(@RequestBody Loss loss) {
+        lossMapper.updateById(loss);
+        return AjaxResult.success("淇敼鎹熻�楃巼鎴愬姛");
+    }
+
+    @GetMapping("/list")
+    @Log(title = "鐢熶骇绠$悊-鐢熶骇娲惧伐-鐐掓満淇℃伅", businessType = BusinessType.OTHER)
+    @ApiOperation("鐢熶骇绠$悊-鐢熶骇娲惧伐-鐐掓満淇℃伅")
+    public AjaxResult list() {
+        List<SpeculativeTradingInfo> result = speculativeTradingInfoMapper.selectList(null);
+        result.forEach(item -> {
+            item.setCurrentWorkLoad(salesLedgerSchedulingService.getSchedulingNumBySpeculativeTradingName(item.getName()).divide(new BigDecimal(1000),2, RoundingMode.CEILING));
+            item.setVacant(item.getWorkLoad().subtract(item.getCurrentWorkLoad()).setScale(2, RoundingMode.HALF_UP)); //淇濈暀涓や綅灏忔暟
+        });
+        return AjaxResult.success(result);
+    }
+
+    @PostMapping("/addSpeculatTrading")
+    @Log(title = "鐢熶骇绠$悊-鐢熶骇娲惧伐-娣诲姞鐐掓満淇℃伅", businessType = BusinessType.INSERT)
+    @ApiOperation("鐢熶骇绠$悊-鐢熶骇娲惧伐-娣诲姞鐐掓満淇℃伅")
+    public AjaxResult addSpeculatTrading(@RequestBody List<SpeculativeTradingInfo> speculativeTradingInfo) {
+        if(CollectionUtils.isEmpty(speculativeTradingInfo)) return AjaxResult.error("鏁版嵁缁勪笉鑳戒负绌�");
+        speculativeTradingInfo.forEach(item -> {
+            speculativeTradingInfoMapper.insert(item);
+        });
+        return AjaxResult.success("娣诲姞鐐掓満淇℃伅鎴愬姛");
+    }
+
+    @PostMapping("/updateSpeculatTrading")
+    @Log(title = "鐢熶骇绠$悊-鐢熶骇娲惧伐-淇敼鐐掓満淇℃伅", businessType = BusinessType.UPDATE)
+    @ApiOperation("鐢熶骇绠$悊-鐢熶骇娲惧伐-淇敼鐐掓満淇℃伅")
+    public AjaxResult updateSpeculatTrading(@RequestBody List<SpeculativeTradingInfo> speculativeTradingInfo) {
+        if(CollectionUtils.isEmpty(speculativeTradingInfo)) return AjaxResult.error("鏁版嵁缁勪笉鑳戒负绌�");
+        speculativeTradingInfo.forEach(item -> {
+            speculativeTradingInfoMapper.updateById(item);
+        });
+        return AjaxResult.success("淇敼鐐掓満淇℃伅鎴愬姛");
+    }
 
 
     @GetMapping("/listPage")
@@ -69,7 +142,18 @@
     @ApiOperation("鐢熶骇绠$悊-鐢熶骇璁㈠崟-鐢熶骇娲惧伐")
     @Transactional(rollbackFor = Exception.class)
     public AjaxResult productionDispatch(@RequestBody ProductionDispatchAddDto productionDispatchAddDto) {
-        int result = salesLedgerSchedulingService.productionDispatch(productionDispatchAddDto);
+        List<ProductionDispatchAddDto> productionDispatchAddDtoList = new ArrayList<>();
+        productionDispatchAddDtoList.add(productionDispatchAddDto);
+        String result = salesLedgerSchedulingService.productionDispatch(productionDispatchAddDtoList);
+        return AjaxResult.success(result);
+    }
+
+    @PostMapping("/productionDispatchList")
+    @Log(title = "鐢熶骇绠$悊-鐢熶骇璁㈠崟-鑷姩娲惧伐", businessType = BusinessType.INSERT)
+    @ApiOperation("鐢熶骇绠$悊-鐢熶骇璁㈠崟-鑷姩娲惧伐")
+    @Transactional(rollbackFor = Exception.class)
+    public AjaxResult productionDispatchList(@RequestBody List<ProductionDispatchAddDto> productionDispatchAddDto) {
+        String result = salesLedgerSchedulingService.productionDispatch(productionDispatchAddDto);
         return AjaxResult.success(result);
     }
 
diff --git a/src/main/java/com/ruoyi/production/dto/ProcessRouteDto.java b/src/main/java/com/ruoyi/production/dto/ProcessRouteDto.java
new file mode 100644
index 0000000..232a00c
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/dto/ProcessRouteDto.java
@@ -0,0 +1,18 @@
+package com.ruoyi.production.dto;
+
+import com.ruoyi.production.pojo.ProcessRoute;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class ProcessRouteDto extends ProcessRoute {
+
+    private Long productId;
+
+    private String productName;
+
+    @ApiModelProperty("瑙勬牸")
+    private String model;
+
+    private String bomNo;
+}
diff --git a/src/main/java/com/ruoyi/production/dto/ProcessRouteItemDto.java b/src/main/java/com/ruoyi/production/dto/ProcessRouteItemDto.java
new file mode 100644
index 0000000..705354c
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/dto/ProcessRouteItemDto.java
@@ -0,0 +1,31 @@
+package com.ruoyi.production.dto;
+
+import com.ruoyi.production.pojo.ProcessRouteItem;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ProcessRouteItemDto extends ProcessRouteItem {
+
+    @ApiModelProperty(value = "宸ュ簭鍚嶇О")
+    private String processName;
+
+    @ApiModelProperty(value = "宸ヨ壓璺嚎鍚嶇О")
+    private String routeName;
+
+    @ApiModelProperty(value = "鐢熶骇鐐掓満")
+    private String speculativeTradingName;
+
+    @ApiModelProperty(value = "浜у搧鍚嶇О")
+    private String productName;
+
+    @ApiModelProperty(value = "鍗曚綅")
+    private String unit;
+
+    private Long productId;
+
+
+    private String model;
+}
diff --git a/src/main/java/com/ruoyi/production/dto/ProcessSchedulingDto.java b/src/main/java/com/ruoyi/production/dto/ProcessSchedulingDto.java
index 6cf971e..1143abd 100644
--- a/src/main/java/com/ruoyi/production/dto/ProcessSchedulingDto.java
+++ b/src/main/java/com/ruoyi/production/dto/ProcessSchedulingDto.java
@@ -30,7 +30,6 @@
     @ApiModelProperty(value = "鎺掍骇鏁伴噺")
     private BigDecimal schedulingNum;
 
-
     /**
      * 宸ユ椂瀹氶
      */
@@ -38,15 +37,47 @@
     private BigDecimal workHours;
 
     /**
+     * 浜х嚎
+     */
+    @ApiModelProperty(value = "浜х嚎")
+    private String productionLine;
+
+    /**
      * 宸ュ簭
      */
     @ApiModelProperty(value = "宸ュ簭")
     private String process;
+
+
     /**
      * 鎺掍骇鏃ユ湡
      */
     @ApiModelProperty(value = "鎺掍骇鏃ユ湡")
     private String schedulingDate;
 
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value = "澶囨敞")
+    private String remark;
+
+    /**
+     * 鎹熻��
+     */
+    @ApiModelProperty(value = "鎹熻��")
+    private String loss;
+
+    /**
+     * 鍙e懗鍒嗙被
+     */
+    @ApiModelProperty(value = "鍙e懗鍒嗙被")
+    private String type;
+
+    /**
+     * 棰嗙敤
+     */
+    @ApiModelProperty(value = "棰嗙敤")
+    private String receive;
+
 
 }
diff --git a/src/main/java/com/ruoyi/production/dto/ProductBomDto.java b/src/main/java/com/ruoyi/production/dto/ProductBomDto.java
new file mode 100644
index 0000000..ab695ca
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/dto/ProductBomDto.java
@@ -0,0 +1,18 @@
+package com.ruoyi.production.dto;
+
+import com.ruoyi.production.pojo.ProductBom;
+import lombok.Data;
+
+import java.util.List;
+
+//鍒嗛〉鏌ヨ鍥炴樉鏁版嵁
+@Data
+public class ProductBomDto extends ProductBom {
+
+    //浜у搧鍚嶇О
+    private String productName;
+
+    //浜у搧瑙勬牸鍨嬪彿
+    private String productModelName;
+
+}
diff --git a/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java b/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
new file mode 100644
index 0000000..b12803d
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
@@ -0,0 +1,46 @@
+package com.ruoyi.production.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import com.ruoyi.production.pojo.ProductOrder;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@ExcelIgnoreUnannotated
+public class ProductOrderDto extends ProductOrder {
+
+    @ApiModelProperty(value = "閿�鍞悎鍚屽彿")
+    @Excel(name = "閿�鍞悎鍚屽彿")
+    private String salesContractNo;
+
+    @ApiModelProperty(value = "椤圭洰鍚�")
+    @Excel(name = "椤圭洰鍚�")
+    private String projectName;
+
+    @ApiModelProperty(value = "瀹㈡埛鍚嶇О")
+    @Excel(name = "瀹㈡埛鍚嶇О")
+    private String customerName;
+
+    @ApiModelProperty(value = "浜у搧鍚嶇О")
+    @Excel(name = "浜у搧鍚嶇О")
+    private String productCategory;
+
+    @ApiModelProperty(value = "瑙勬牸")
+    @Excel(name = "瑙勬牸")
+    private String specificationModel;
+
+    @ApiModelProperty(value = "宸ヨ壓璺嚎缂栧彿")
+    @Excel(name = "宸ヨ壓璺嚎缂栧彿")
+    private String processRouteCode;
+
+    @ApiModelProperty(value = "瀹屾垚鐘舵��")
+    @Excel(name = "瀹屾垚鐘舵��")
+    private BigDecimal completionStatus;
+
+    @ApiModelProperty(value = "BOM缂栧彿")
+    @Excel(name = "BOM缂栧彿")
+    private String bomNo;
+}
diff --git a/src/main/java/com/ruoyi/production/dto/ProductProcessDto.java b/src/main/java/com/ruoyi/production/dto/ProductProcessDto.java
new file mode 100644
index 0000000..7383a82
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/dto/ProductProcessDto.java
@@ -0,0 +1,13 @@
+package com.ruoyi.production.dto;
+
+import com.ruoyi.production.pojo.ProductProcess;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@ApiModel
+public class ProductProcessDto extends ProductProcess {
+}
diff --git a/src/main/java/com/ruoyi/production/dto/ProductProcessRouteItemDto.java b/src/main/java/com/ruoyi/production/dto/ProductProcessRouteItemDto.java
new file mode 100644
index 0000000..d235ccb
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/dto/ProductProcessRouteItemDto.java
@@ -0,0 +1,27 @@
+package com.ruoyi.production.dto;
+
+import com.ruoyi.production.pojo.ProcessRouteItem;
+import com.ruoyi.production.pojo.ProductProcessRouteItem;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ProductProcessRouteItemDto extends ProductProcessRouteItem {
+
+    @ApiModelProperty(value = "宸ュ簭鍚嶇О")
+    private String processName;
+
+    @ApiModelProperty(value = "浜у搧鍚嶇О")
+    private String productCategory;
+
+    @ApiModelProperty(value = "鍗曚綅")
+    private String unit;
+
+    private Long productId;
+
+    private String productName;
+
+    private String model;
+}
diff --git a/src/main/java/com/ruoyi/production/dto/ProductStructureDto.java b/src/main/java/com/ruoyi/production/dto/ProductStructureDto.java
new file mode 100644
index 0000000..24b783c
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/dto/ProductStructureDto.java
@@ -0,0 +1,22 @@
+package com.ruoyi.production.dto;
+
+import com.ruoyi.production.pojo.ProductStructure;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ProductStructureDto extends ProductStructure {
+
+    @ApiModelProperty(value = "宸ヨ壓鍚嶇О")
+    private String processName;
+    @ApiModelProperty(value = "浜у搧鍚嶇О")
+    private String productName;
+    @ApiModelProperty(value = "浜у搧id")
+    private Long productId;
+
+    private String model;
+
+    private List<ProductStructure> productStructureList;
+}
diff --git a/src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java b/src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java
new file mode 100644
index 0000000..f4ebe75
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java
@@ -0,0 +1,38 @@
+package com.ruoyi.production.dto;
+
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import com.ruoyi.production.pojo.ProductWorkOrder;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class ProductWorkOrderDto extends ProductWorkOrder {
+
+    //浜у搧鍚嶇О
+    @ApiModelProperty(value = "浜у搧鍚嶇О")
+    private String productName;
+
+    //瑙勬牸
+    @ApiModelProperty(value = "瑙勬牸")
+    private String model;
+
+    //宸ュ簭
+    @ApiModelProperty(value = "宸ュ簭")
+    private String processName;
+
+    //鍗曚綅
+    @ApiModelProperty(value = "鍗曚綅")
+    private String unit;
+
+
+    //鐢熶骇璁㈠崟鍙�
+    @ApiModelProperty(value = "鐢熶骇璁㈠崟鍙�")
+    private String productOrderNpsNo;
+
+    @ApiModelProperty(value = "瀹屾垚杩涘害")
+    private BigDecimal completionStatus;
+}
diff --git a/src/main/java/com/ruoyi/production/dto/ProductionDispatchAddDto.java b/src/main/java/com/ruoyi/production/dto/ProductionDispatchAddDto.java
index e78d868..67a6332 100644
--- a/src/main/java/com/ruoyi/production/dto/ProductionDispatchAddDto.java
+++ b/src/main/java/com/ruoyi/production/dto/ProductionDispatchAddDto.java
@@ -1,5 +1,6 @@
 package com.ruoyi.production.dto;
 
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -38,4 +39,19 @@
     @ApiModelProperty(value = "鎺掍骇鏃ユ湡")
     private String schedulingDate;
 
+    /**
+     * 鐢熶骇鐐掓満
+     */
+    private String speculativeTradingName;
+    /**
+     * 浜х嚎
+     */
+    @ApiModelProperty(value = "浜х嚎")
+    private String productionLine;
+
+    /**
+     * 瑙勬牸鍨嬪彿
+     */
+    private String specificationModel;
+
 }
diff --git a/src/main/java/com/ruoyi/production/dto/ProductionProductInputDto.java b/src/main/java/com/ruoyi/production/dto/ProductionProductInputDto.java
new file mode 100644
index 0000000..1e6e02e
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/dto/ProductionProductInputDto.java
@@ -0,0 +1,14 @@
+package com.ruoyi.production.dto;
+
+import com.ruoyi.production.pojo.ProductionProductInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class ProductionProductInputDto extends ProductionProductInput {
+    @ApiModelProperty(value = "鎶ュ伐鍗曞彿")
+    private String productNo;
+
+    @ApiModelProperty(value = "浜у搧鍨嬪彿")
+    private String model;
+}
diff --git a/src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java b/src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java
new file mode 100644
index 0000000..cb34380
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/dto/ProductionProductMainDto.java
@@ -0,0 +1,29 @@
+package com.ruoyi.production.dto;
+
+import com.ruoyi.production.pojo.ProductionProductMain;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+public class ProductionProductMainDto extends ProductionProductMain {
+    @ApiModelProperty(value = "宸ュ崟缂栧彿")
+    private String workOrderNo;
+
+    @ApiModelProperty(value = "宸ュ崟鐘舵��")
+    private String workOrderStatus;
+
+    @ApiModelProperty(value = "鎶ュ伐浜哄憳鏄电О")
+    private String nickName;
+
+    @ApiModelProperty(value = "鎶ュ伐鏁伴噺")
+    private BigDecimal quantity;
+
+    @ApiModelProperty(value = "鏄惁鎶ュ伐")
+    private boolean reportWork;
+
+    @ApiModelProperty(value = "鎶ュ伐id")
+    private Long productMainId;
+}
diff --git a/src/main/java/com/ruoyi/production/dto/ProductionProductOutputDto.java b/src/main/java/com/ruoyi/production/dto/ProductionProductOutputDto.java
new file mode 100644
index 0000000..f98cc80
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/dto/ProductionProductOutputDto.java
@@ -0,0 +1,15 @@
+package com.ruoyi.production.dto;
+
+import com.ruoyi.production.pojo.ProductionProductInput;
+import com.ruoyi.production.pojo.ProductionProductOutput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class ProductionProductOutputDto extends ProductionProductOutput {
+    @ApiModelProperty(value = "鎶ュ伐鍗曞彿")
+    private String productNo;
+
+    @ApiModelProperty(value = "浜у搧鍨嬪彿")
+    private String model;
+}
diff --git a/src/main/java/com/ruoyi/production/dto/ProductionReportDto.java b/src/main/java/com/ruoyi/production/dto/ProductionReportDto.java
index 6b5e164..727decb 100644
--- a/src/main/java/com/ruoyi/production/dto/ProductionReportDto.java
+++ b/src/main/java/com/ruoyi/production/dto/ProductionReportDto.java
@@ -38,4 +38,16 @@
     @ApiModelProperty(value = "鐢熶骇鏃ユ湡")
     private String schedulingDate;
 
+
+    /**
+     * 鍏ュ簱鍗曚环
+     */
+    @ApiModelProperty(value = "鍏ュ簱鍗曚环")
+    private BigDecimal unitPrice;
+
+    /**
+     * 鍏ュ簱鎬讳环
+     */
+    @ApiModelProperty(value = "鍏ュ簱鎬讳环")
+    private BigDecimal totalPrice;
 }
diff --git a/src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingDto.java b/src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingDto.java
index 4e606a1..57d14ab 100644
--- a/src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingDto.java
+++ b/src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingDto.java
@@ -27,6 +27,15 @@
     @ApiModelProperty(value = "閿�鍞彴璐D")
     private Long salesLedgerId;
 
+    @ApiModelProperty(value = "鐢熶骇鎬婚噺(鍗曚綅kg)")
+    private BigDecimal totalProduction;
+
+    /**
+     * 鐢熶骇鐐掓満
+     */
+    @Excel(name = "鐢熶骇鐐掓満")
+    private String speculativeTradingName;
+
     /**
      * 閿�鍞悎鍚屽彿
      */
@@ -116,6 +125,9 @@
     @Excel(name = "鐘舵��")
     private String status;
 
+    @Excel(name = "杩涘害")
+    private BigDecimal progress;
+
     @ApiModelProperty(value = "绉熸埛ID")
     private Long tenantId;
 
diff --git a/src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingProcessDto.java b/src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingProcessDto.java
index 8952455..b04e43e 100644
--- a/src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingProcessDto.java
+++ b/src/main/java/com/ruoyi/production/dto/SalesLedgerSchedulingProcessDto.java
@@ -23,9 +23,22 @@
     @ApiModelProperty(value = "閿�鍞骇鍝両D")
     private Long salesLedgerProductId;
 
+    @ApiModelProperty(value = "鐢熶骇鎬婚噺(鍗曚綅kg)")
+    private BigDecimal totalProduction;
+
     @ApiModelProperty(value = "閿�鍞彴璐D")
     private Long salesLedgerId;
 
+    /**
+     * 鐢熶骇鐐掓満
+     */
+    @Excel(name = "鐢熶骇鐐掓満")
+    private String speculativeTradingName;
+
+    @ApiModelProperty(value = "浜х嚎")
+    @Excel(name = "浜х嚎")
+    private String productionLine;
+
     @ApiModelProperty(value = "寮�濮嬫椂闂�")
     private String entryDateStart;
 
diff --git a/src/main/java/com/ruoyi/production/dto/SalesLedgerWorkDto.java b/src/main/java/com/ruoyi/production/dto/SalesLedgerWorkDto.java
index 055f2a8..3e982e7 100644
--- a/src/main/java/com/ruoyi/production/dto/SalesLedgerWorkDto.java
+++ b/src/main/java/com/ruoyi/production/dto/SalesLedgerWorkDto.java
@@ -65,6 +65,14 @@
     @ApiModelProperty(value = "宸ュ簭")
     @Excel(name = "宸ュ簭")
     private String process;
+
+
+    /**
+     * 浜х嚎
+     */
+    @ApiModelProperty(value = "浜х嚎")
+    @Excel(name = "浜х嚎")
+    private String productionLine;
     /**
      * 鎺掍骇鏃ユ湡
      */
@@ -86,5 +94,40 @@
     @Excel(name = "鐘舵��", readConverterExp = "1=寰呯敓浜�,2=鐢熶骇涓�,3=宸叉姤宸�")
     private String statusName;
 
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty(value = "澶囨敞")
+    @Excel(name = "澶囨敞")
+    private String remark;
+
+    /**
+     * 鎹熻��
+     */
+    @ApiModelProperty(value = "鎹熻��")
+    @Excel(name = "鎹熻��")
+    private String loss;
+
+    /**
+     * 缁戝畾鏈哄櫒
+     */
+    @ApiModelProperty(value = "缁戝畾鏈哄櫒")
+    @Excel(name = "缁戝畾鏈哄櫒")
+    private String speculativeTradingName;
+
+    /**
+     * 鍙e懗鍒嗙被
+     */
+    @ApiModelProperty(value = "鍙e懗鍒嗙被")
+    @Excel(name = "鍙e懗鍒嗙被")
+    private String type;
+
+    /**
+     * 棰嗙敤
+     */
+    @ApiModelProperty(value = "棰嗙敤")
+    @Excel(name = "棰嗙敤")
+    private String receive;
+
 
 }
diff --git a/src/main/java/com/ruoyi/production/mapper/ProcessRouteItemMapper.java b/src/main/java/com/ruoyi/production/mapper/ProcessRouteItemMapper.java
new file mode 100644
index 0000000..394c3a7
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/mapper/ProcessRouteItemMapper.java
@@ -0,0 +1,19 @@
+package com.ruoyi.production.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.production.dto.ProcessRouteItemDto;
+import com.ruoyi.production.pojo.ProcessRouteItem;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface ProcessRouteItemMapper  extends BaseMapper<ProcessRouteItem> {
+
+
+    List<ProcessRouteItemDto> listProcessRouteItemDto(@Param("c") ProcessRouteItemDto processRouteItemDto);
+
+}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProcessRouteMapper.java b/src/main/java/com/ruoyi/production/mapper/ProcessRouteMapper.java
new file mode 100644
index 0000000..493b764
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/mapper/ProcessRouteMapper.java
@@ -0,0 +1,15 @@
+package com.ruoyi.production.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.production.dto.ProcessRouteDto;
+import com.ruoyi.production.pojo.ProcessRoute;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+@Mapper
+public interface ProcessRouteMapper extends BaseMapper<ProcessRoute> {
+
+    IPage<ProcessRouteDto> pageProcessRouteDto(Page<ProcessRouteDto> page,@Param("c") ProcessRouteDto processRouteDto);
+}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductBomMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductBomMapper.java
new file mode 100644
index 0000000..1183335
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/mapper/ProductBomMapper.java
@@ -0,0 +1,26 @@
+package com.ruoyi.production.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.production.dto.ProductBomDto;
+import com.ruoyi.production.dto.ProductProcessDto;
+import com.ruoyi.production.pojo.ProductBom;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * BOM涓昏〃 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-15 09:59:27
+ */
+@Mapper
+public interface ProductBomMapper extends BaseMapper<ProductBom> {
+
+    IPage<ProductBomDto> listPage(Page page, @Param("c") ProductBomDto productBomDto);
+
+    ProductBomDto getById(@Param("bomId") Long bomId);
+}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductOrderMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductOrderMapper.java
new file mode 100644
index 0000000..94d41f3
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/mapper/ProductOrderMapper.java
@@ -0,0 +1,28 @@
+package com.ruoyi.production.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.production.dto.ProductBomDto;
+import com.ruoyi.production.dto.ProductOrderDto;
+import com.ruoyi.production.dto.ProductStructureDto;
+import com.ruoyi.production.pojo.ProcessRoute;
+import com.ruoyi.production.pojo.ProductOrder;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface ProductOrderMapper extends BaseMapper<ProductOrder> {
+
+    IPage<ProductOrderDto> pageProductOrder(Page page, @Param("c") ProductOrderDto productOrder);
+    /**
+     * 鏍规嵁璁㈠崟ID鏌ヨ宸ュ崟鎶ュ伐
+     */
+     ProductOrderDto productMainByOrderId(@Param("c") ProductOrder productOrder);
+
+    List<ProcessRoute> listProcessRoute(@Param("productModelId") Long productModelId);
+
+    List<ProductStructureDto> listProcessBom(@Param("orderId") Long orderId);
+}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductProcessMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductProcessMapper.java
new file mode 100644
index 0000000..f21c308
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/mapper/ProductProcessMapper.java
@@ -0,0 +1,14 @@
+package com.ruoyi.production.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.production.dto.ProductProcessDto;
+import com.ruoyi.production.pojo.ProductProcess;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+@Mapper
+public interface ProductProcessMapper extends BaseMapper<ProductProcess> {
+    IPage<ProductProcessDto> listPage(Page page,@Param("productProcessDto") ProductProcessDto productProcessDto);
+}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductProcessRouteItemMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductProcessRouteItemMapper.java
new file mode 100644
index 0000000..48b38ec
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/mapper/ProductProcessRouteItemMapper.java
@@ -0,0 +1,14 @@
+package com.ruoyi.production.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.production.dto.ProductProcessRouteItemDto;
+import com.ruoyi.production.pojo.ProductProcessRouteItem;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface ProductProcessRouteItemMapper extends BaseMapper<ProductProcessRouteItem> {
+    List<ProductProcessRouteItemDto> listItem(@Param("orderId") Long orderId);
+}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductProcessRouteMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductProcessRouteMapper.java
new file mode 100644
index 0000000..06ae748
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/mapper/ProductProcessRouteMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.production.mapper;
+
+import com.ruoyi.production.dto.ProcessRouteDto;
+import com.ruoyi.production.pojo.ProductProcessRoute;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-15 02:51:09
+ */
+@Mapper
+public interface ProductProcessRouteMapper extends BaseMapper<ProductProcessRoute> {
+
+    ProcessRouteDto listMain(@Param("orderId") Long orderId);
+}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductStructureMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductStructureMapper.java
new file mode 100644
index 0000000..9ab7ba7
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/mapper/ProductStructureMapper.java
@@ -0,0 +1,19 @@
+package com.ruoyi.production.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.production.dto.ProductStructureDto;
+import com.ruoyi.production.pojo.ProductStructure;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface ProductStructureMapper  extends BaseMapper<ProductStructure> {
+
+    List<ProductStructureDto> listBybomId(@Param("bomId") Long bomId);
+
+    List<ProductStructureDto> listByproductModelId(@Param("productModelId") Long productModelId);
+}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductWorkOrderMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductWorkOrderMapper.java
new file mode 100644
index 0000000..93f443e
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/mapper/ProductWorkOrderMapper.java
@@ -0,0 +1,30 @@
+package com.ruoyi.production.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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.production.dto.ProductWorkOrderDto;
+import com.ruoyi.production.pojo.ProductWorkOrder;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+public interface ProductWorkOrderMapper extends BaseMapper<ProductWorkOrder> {
+
+    IPage<ProductWorkOrderDto> pageProductWorkOrder(Page<ProductWorkOrderDto> page, @Param("c") ProductWorkOrderDto productWorkOrder);
+
+    int updatePlanQuantity(Map<String, Object> params);
+
+    /**
+     * 鍥炴粴宸ュ崟璁″垝鏁伴噺锛氫粠production_product_output鍙杚uantity鍔犲洖plan_quantity
+     * @param productMainId
+     * @return
+     */
+    int rollbackPlanQuantity(@Param("productMainId") Long productMainId);
+
+    List<ProductWorkOrderDto> selectProductWorkOrderDtoList();
+}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductionProductInputMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductionProductInputMapper.java
new file mode 100644
index 0000000..78e7d2a
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/mapper/ProductionProductInputMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.production.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.production.dto.ProductionProductInputDto;
+import com.ruoyi.production.pojo.ProductionProductInput;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface ProductionProductInputMapper extends BaseMapper<ProductionProductInput> {
+    IPage<ProductionProductInputDto> listPageProductionProductInputDto(Page page, @Param("c") ProductionProductInputDto productionProductInputDto);
+
+    /**
+     * 鏍规嵁鐢熶骇涓昏〃ID鎵归噺鍒犻櫎鎶曞叆琛ㄦ暟鎹�
+     */
+    int deleteByProductMainIds(@Param("productMainIds") List<Long> productMainIds);
+}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductionProductMainMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductionProductMainMapper.java
new file mode 100644
index 0000000..c9d1268
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/mapper/ProductionProductMainMapper.java
@@ -0,0 +1,22 @@
+package com.ruoyi.production.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.production.dto.ProductionProductMainDto;
+import com.ruoyi.production.pojo.ProductionProductMain;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface ProductionProductMainMapper extends BaseMapper<ProductionProductMain> {
+
+    IPage<ProductionProductMainDto> listPageProductionProductMainDto(Page page, @Param("c") ProductionProductMainDto productionProductMainDto);
+
+    /**
+     * 鏍规嵁宸ュ崟ID鎵归噺鍒犻櫎鐢熶骇涓昏〃鏁版嵁
+     */
+    int deleteByWorkOrderIds(@Param("workOrderIds") List<Long> workOrderIds);
+}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductionProductOutputMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductionProductOutputMapper.java
new file mode 100644
index 0000000..0283d42
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/mapper/ProductionProductOutputMapper.java
@@ -0,0 +1,21 @@
+package com.ruoyi.production.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.production.dto.ProductionProductOutputDto;
+import com.ruoyi.production.pojo.ProductionProductOutput;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface ProductionProductOutputMapper extends BaseMapper<ProductionProductOutput> {
+    IPage<ProductionProductOutputDto> listPageProductionProductOutputDto(Page page, @Param("c") ProductionProductOutputDto productionProductOutputDto);
+
+    /**
+     * 鏍规嵁鐢熶骇涓昏〃ID鎵归噺鍒犻櫎浜у嚭琛ㄦ暟鎹�
+     */
+    int deleteByProductMainIds(@Param("productMainIds") List<Long> productMainIds);
+}
diff --git a/src/main/java/com/ruoyi/production/mapper/SpeculativeTradingInfoMapper.java b/src/main/java/com/ruoyi/production/mapper/SpeculativeTradingInfoMapper.java
new file mode 100644
index 0000000..21d4a11
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/mapper/SpeculativeTradingInfoMapper.java
@@ -0,0 +1,11 @@
+package com.ruoyi.production.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.production.pojo.SpeculativeTradingInfo;
+
+/**
+ * @author :yys
+ * @date : 2025/11/11 15:40
+ */
+public interface SpeculativeTradingInfoMapper extends BaseMapper<SpeculativeTradingInfo> {
+}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProcessRoute.java b/src/main/java/com/ruoyi/production/pojo/ProcessRoute.java
new file mode 100644
index 0000000..2eabc15
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/pojo/ProcessRoute.java
@@ -0,0 +1,44 @@
+package com.ruoyi.production.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@TableName("process_route")
+@Data
+@ApiModel(value = "processRoute", description = "宸ヨ壓璺嚎涓昏〃")
+public class ProcessRoute {
+
+    @ApiModelProperty(value = "搴忓彿")
+    private Long id;
+
+    @ApiModelProperty(value = "浜у搧ID")
+    //product_model
+    private Long productModelId;
+
+    @ApiModelProperty(value = "鎻忚堪")
+    private String description;
+
+    @ApiModelProperty(value = "绉熸埛ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "宸ヨ壓璺嚎缂栫爜")
+    private String processRouteCode;
+
+    @ApiModelProperty(value = "BOM鐨処D")
+    private Long bomId;
+}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProcessRouteItem.java b/src/main/java/com/ruoyi/production/pojo/ProcessRouteItem.java
new file mode 100644
index 0000000..f2ebd44
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/pojo/ProcessRouteItem.java
@@ -0,0 +1,41 @@
+package com.ruoyi.production.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@TableName("process_route_item")
+@ApiModel(value = "processRouteItem", description = "宸ヨ壓璺嚎瀛愯〃")
+public class ProcessRouteItem {
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "宸ヨ壓璺嚎id")
+    private Long routeId;
+
+    @ApiModelProperty(value = "宸ュ簭id")
+    private Long processId;
+
+    @ApiModelProperty(value ="浜у搧id")
+    private Long productModelId;
+
+    @ApiModelProperty(value = "绉熸埛ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    private LocalDateTime createTime;
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value ="鎷栧姩鎺掑簭")
+    private Integer dragSort;
+
+
+}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductBom.java b/src/main/java/com/ruoyi/production/pojo/ProductBom.java
new file mode 100644
index 0000000..802724a
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/pojo/ProductBom.java
@@ -0,0 +1,72 @@
+package com.ruoyi.production.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+/**
+ * <p>
+ * BOM涓昏〃
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-15 09:59:27
+ */
+@Getter
+@Setter
+@TableName("product_bom")
+@ApiModel(value = "ProductBom瀵硅薄", description = "BOM涓昏〃")
+public class ProductBom implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("bom缂栧彿")
+    private String bomNo;
+
+    @ApiModelProperty("浜у搧瑙勬牸id")
+    private Long productModelId;
+
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+
+    @ApiModelProperty("鐗堟湰鍙�")
+    private String version;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("鍒涘缓鑰�")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUser;
+
+    @ApiModelProperty("鏇存柊鑰�")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateUser;
+
+    @ApiModelProperty("绉熸埛ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductOrder.java b/src/main/java/com/ruoyi/production/pojo/ProductOrder.java
new file mode 100644
index 0000000..c729ea9
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/pojo/ProductOrder.java
@@ -0,0 +1,100 @@
+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.Api;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("product_order")
+public class ProductOrder  implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 閿�鍞彴璐d
+     */
+    @ApiModelProperty(value = "閿�鍞彴璐d")
+    private Long salesLedgerId;
+
+    /**
+     * 閿�鍞彴璐︿骇鍝乮d(sales_ledger_product)
+     */
+    @ApiModelProperty(value = "閿�鍞彴璐︿骇鍝乮d")
+    private Long productModelId;
+
+    /**
+     * 宸ヨ壓璺嚎id
+     */
+    @ApiModelProperty(value = "宸ヨ壓璺嚎id")
+    private Long routeId;
+
+    /**
+     * 鐢熶骇璁㈠崟鍙�
+     */
+    @ApiModelProperty(value = "鐢熶骇璁㈠崟鍙�")
+    @Excel(name = "鐢熶骇璁㈠崟鍙�")
+    private String npsNo;
+
+    /**
+     * 绉熸埛id
+     */
+    @ApiModelProperty(value = "绉熸埛id")
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+
+    //鍒涘缓鏃堕棿
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "鍒涘缓鏃堕棿")
+    private LocalDateTime createTime;
+
+    //淇敼鏃堕棿
+    @ApiModelProperty(value = "淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+
+    /**
+     * 闇�姹傛暟閲�
+     */
+    @ApiModelProperty(value = "闇�姹傛暟閲�")
+    @Excel(name = "闇�姹傛暟閲�")
+    private BigDecimal quantity;
+
+    /**
+     * 瀹屾垚鏁伴噺
+     */
+    @ApiModelProperty(value = "瀹屾垚鏁伴噺")
+    @Excel(name = "瀹屾垚鏁伴噺")
+    private BigDecimal completeQuantity;
+
+    @Excel(name = "寮�濮嬫椂闂�")
+    @ApiModelProperty(value = "寮�濮嬫椂闂�")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime startTime;
+
+    @ApiModelProperty(value = "缁撴潫鏃堕棿")
+    @Excel(name = "缁撴潫鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime endTime;
+
+
+
+}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductProcess.java b/src/main/java/com/ruoyi/production/pojo/ProductProcess.java
new file mode 100644
index 0000000..d25f9cf
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/pojo/ProductProcess.java
@@ -0,0 +1,74 @@
+package com.ruoyi.production.pojo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@TableName("product_process")
+@Data
+@ExcelIgnoreUnannotated
+@ApiModel(value = "productProcess", description = "宸ュ簭琛�")
+public class ProductProcess implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 宸ュ簭鍚嶇О
+     */
+    @Excel(name = "宸ュ簭鍚嶇О")
+    private String name;
+
+    /**
+     * 宸ュ簭缂栧彿
+     */
+    @Excel(name = "宸ュ簭缂栧彿")
+    private String no;
+
+    /**
+     * 澶囨敞
+     */
+    @Excel(name = "澶囨敞")
+    private String remark;
+
+
+    /**
+     * 宸ヨ祫瀹氶
+     */
+    @Excel(name = "宸ヨ祫瀹氶")
+    private BigDecimal salaryQuota;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    /**
+     * 绉熸埛ID
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+
+
+}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductProcessRoute.java b/src/main/java/com/ruoyi/production/pojo/ProductProcessRoute.java
new file mode 100644
index 0000000..fac6d15
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/pojo/ProductProcessRoute.java
@@ -0,0 +1,61 @@
+package com.ruoyi.production.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-15 02:51:09
+ */
+@Getter
+@Setter
+@TableName("product_process_route")
+@ApiModel(value = "ProductProcessRoute瀵硅薄", description = "")
+public class ProductProcessRoute implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty("浜у搧id")
+    //product_model
+    private Long productModelId;
+
+    @ApiModelProperty("鎻忚堪")
+    private String description;
+
+    @ApiModelProperty("绉熸埛id")
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+
+    @ApiModelProperty("褰曞叆鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("鍏宠仈bom鐨刬d")
+    private Long bomId;
+
+    @ApiModelProperty("宸ヨ壓璺嚎缂栫爜")
+    private String processRouteCode;
+
+    @ApiModelProperty("鐢熶骇璁㈠崟鐨刬d")
+    private Long productOrderId;
+}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductProcessRouteItem.java b/src/main/java/com/ruoyi/production/pojo/ProductProcessRouteItem.java
new file mode 100644
index 0000000..4b6762c
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/pojo/ProductProcessRouteItem.java
@@ -0,0 +1,41 @@
+package com.ruoyi.production.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@TableName("product_process_route_item")
+public class ProductProcessRouteItem {
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "鐢熶骇璁㈠崟id(product_order_id)")
+    private Long productOrderId;
+
+    @ApiModelProperty(value = "鐢熶骇璁㈠崟鐨勫伐鑹鸿矾绾縤d(product_process_route)")
+    private Long productRouteId;
+
+    @ApiModelProperty(value = "宸ュ簭id")
+    private Long processId;
+
+    @ApiModelProperty(value ="浜у搧id")
+    private Long productModelId;
+
+    @ApiModelProperty(value = "绉熸埛ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    private LocalDateTime createTime;
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value ="鎷栧姩鎺掑簭")
+    private Integer dragSort;
+
+}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductStructure.java b/src/main/java/com/ruoyi/production/pojo/ProductStructure.java
new file mode 100644
index 0000000..de0d605
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/pojo/ProductStructure.java
@@ -0,0 +1,56 @@
+package com.ruoyi.production.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@TableName("product_structure")
+@Data
+@ApiModel(value = "ProductStructure", description = "BOM瀛愯〃")
+public class ProductStructure {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 浜у搧鍚嶇О
+     */
+    private Long productModelId;
+
+    /**
+     * 宸ュ簭id
+     */
+    private Long processId;
+
+    /**
+     * 鍗曚綅浜у嚭闇�瑕佹暟閲�
+     */
+    private BigDecimal unitQuantity;
+
+    /**
+     * 闇�姹傛暟閲�
+     */
+    private BigDecimal demandedQuantity;
+
+    /**
+     * 鍗曚綅
+     */
+    private String unit;
+
+    /**
+     * 绉熸埛ID
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+
+    /**
+     * 鍏宠仈BOMid
+     */
+    private Long bomId;
+
+
+}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java b/src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java
new file mode 100644
index 0000000..4efc694
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java
@@ -0,0 +1,125 @@
+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.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * 浜у搧宸ュ崟瀹炰綋绫�
+ * 瀵瑰簲鏁版嵁搴撹〃锛歱roduct_work_order
+ */
+@Data
+@TableName("product_work_order")
+public class ProductWorkOrder implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 涓婚敭id
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 宸ヨ壓璺嚎椤圭洰id
+     */
+    @ApiModelProperty(value = "宸ヨ壓璺嚎椤圭洰id")
+    private Long productProcessRouteItemId;
+
+    /**
+     * 鐢熶骇璁㈠崟id
+     */
+    @ApiModelProperty(value = "鐢熶骇璁㈠崟id")
+    private Long productOrderId;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty(value = "淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+    /**
+     * 宸ュ崟缂栧彿
+     */
+    @ApiModelProperty(value = "宸ュ崟缂栧彿")
+    private String workOrderNo;
+
+    /**
+     * 鐘舵��  1 寰呯‘璁�  2 寰呯敓浜� 3鐢熶骇涓� 4宸插畬鎴�
+     */
+    @ApiModelProperty(value = "鐘舵��  1 寰呯‘璁�  2 寰呯敓浜� 3鐢熶骇涓� 4宸插畬鎴�")
+    private Integer status;
+
+    /**
+     * 绉熸埛id
+     */
+    @ApiModelProperty(value = "绉熸埛id")
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+
+    /**
+     * 璁″垝寮�濮嬫椂闂�
+     */
+    @ApiModelProperty(value = "璁″垝寮�濮嬫椂闂�")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate planStartTime;
+
+    /**
+     * 璁″垝缁撴潫鏃堕棿
+     */
+    @ApiModelProperty(value = "璁″垝缁撴潫鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate planEndTime;
+
+    /**
+     * 瀹為檯寮�濮嬫椂闂�
+     */
+    @ApiModelProperty(value = "瀹為檯寮�濮嬫椂闂�")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate actualStartTime;
+
+    /**
+     * 瀹為檯缁撴潫鏃堕棿
+     */
+    @ApiModelProperty(value = "瀹為檯缁撴潫鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate actualEndTime;
+
+    /**
+     * 闇�姹傞噺
+     */
+    @ApiModelProperty(value = "闇�姹傛暟閲�")
+    private BigDecimal planQuantity;
+
+    /**
+     * 瀹屾垚鏁伴噺
+     */
+    @ApiModelProperty(value = "瀹屾垚鏁伴噺")
+    private BigDecimal completeQuantity;
+
+
+}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionProductInput.java b/src/main/java/com/ruoyi/production/pojo/ProductionProductInput.java
new file mode 100644
index 0000000..c938170
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionProductInput.java
@@ -0,0 +1,32 @@
+package com.ruoyi.production.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("production_product_input")
+public class ProductionProductInput {
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "鎶ュ伐id")
+    private Long productMainId;
+
+    @ApiModelProperty(value = "浜у搧id")
+    private Long productModelId;
+
+    @ApiModelProperty(value = "鏁伴噺")
+    private BigDecimal quantity;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "绉熸埛ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java b/src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java
new file mode 100644
index 0000000..3dbe688
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionProductMain.java
@@ -0,0 +1,45 @@
+package com.ruoyi.production.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@TableName("production_product_main")
+public class ProductionProductMain {
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "鎶ュ伐鍗曞彿")
+    private String productNo;
+
+    @ApiModelProperty(value = "鎶ュ伐浜哄憳id")
+    private Long userId;
+
+    @ApiModelProperty(value = "鎶ュ伐浜哄憳")
+    private String userName;
+
+    @ApiModelProperty(value = "鐢熶骇椤圭洰id")
+    private Long productProcessRouteItemId;
+
+    @ApiModelProperty(value = "宸ュ崟id")
+    private Long workOrderId;
+
+    @ApiModelProperty(value = "鎶ュ伐鐘舵��")
+    private Integer status;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @TableField(fill = FieldFill.UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "绉熸埛ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+}
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductionProductOutput.java b/src/main/java/com/ruoyi/production/pojo/ProductionProductOutput.java
new file mode 100644
index 0000000..20e52ad
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/pojo/ProductionProductOutput.java
@@ -0,0 +1,32 @@
+package com.ruoyi.production.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("production_product_output")
+public class ProductionProductOutput {
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty(value = "鎶ュ伐id")
+    private Long productMainId;
+
+    @ApiModelProperty(value = "浜у搧id")
+    private Long productModelId;
+
+    @ApiModelProperty(value = "鏁伴噺")
+    private BigDecimal quantity;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "绉熸埛ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+}
diff --git a/src/main/java/com/ruoyi/production/pojo/SalesLedgerScheduling.java b/src/main/java/com/ruoyi/production/pojo/SalesLedgerScheduling.java
index 937ff7f..ac86061 100644
--- a/src/main/java/com/ruoyi/production/pojo/SalesLedgerScheduling.java
+++ b/src/main/java/com/ruoyi/production/pojo/SalesLedgerScheduling.java
@@ -1,6 +1,7 @@
 package com.ruoyi.production.pojo;
 
 import com.baomidou.mybatisplus.annotation.*;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import lombok.Builder;
 import lombok.Data;
 
@@ -38,6 +39,16 @@
     private Long schedulingUserId;
 
     /**
+     * 鐢熶骇鐐掓満
+     */
+    private String speculativeTradingName;
+
+    /**
+     * 浜х嚎
+     */
+    private String productionLine;
+
+    /**
      * 娲惧伐浜哄悕绉�
      */
     private String schedulingUserName;
diff --git a/src/main/java/com/ruoyi/production/pojo/SalesLedgerWork.java b/src/main/java/com/ruoyi/production/pojo/SalesLedgerWork.java
index b722105..42d9e95 100644
--- a/src/main/java/com/ruoyi/production/pojo/SalesLedgerWork.java
+++ b/src/main/java/com/ruoyi/production/pojo/SalesLedgerWork.java
@@ -1,6 +1,7 @@
 package com.ruoyi.production.pojo;
 
 import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Builder;
 import lombok.Data;
 
@@ -67,6 +68,12 @@
      * 宸ュ簭
      */
     private String process;
+
+
+    /**
+     * 浜х嚎
+     */
+    private String productionLine;
     /**
      * 鎺掍骇鏃ユ湡
      */
@@ -78,6 +85,26 @@
     private Integer status;
 
     /**
+     * 澶囨敞
+     */
+    private String remark;
+
+    /**
+     * 鎹熻��
+     */
+    private String loss;
+
+    /**
+     * 鍙e懗鍒嗙被
+     */
+    private String type;
+
+    /**
+     * 棰嗙敤
+     */
+    private String receive;
+
+    /**
      * 鍒涘缓鑰�
      */
     @TableField(fill = FieldFill.INSERT)
diff --git a/src/main/java/com/ruoyi/production/pojo/SpeculativeTradingInfo.java b/src/main/java/com/ruoyi/production/pojo/SpeculativeTradingInfo.java
new file mode 100644
index 0000000..4ac0567
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/pojo/SpeculativeTradingInfo.java
@@ -0,0 +1,81 @@
+package com.ruoyi.production.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * @author :yys
+ * @date : 2025/11/11 15:38
+ */
+@TableName("speculative_trading_info")
+@Data
+public class SpeculativeTradingInfo {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 鐐掓満鍚嶇О
+     */
+    private String name;
+
+    /**
+     * 鐐掓満宸ヤ綔閲�(鍗曚綅kg)
+     */
+    private BigDecimal workLoad;
+
+
+    /**
+     * 鎺掑簭
+     */
+    private Integer sort;
+
+    /**
+     * 鐐掓満姝e湪宸ヤ綔閲�(鍗曚綅kg)
+     */
+    @TableField(exist = false)
+    private BigDecimal currentWorkLoad;
+
+    /**
+     * 鐐掓満绌轰綑宸ヤ綔閲�(鍗曚綅kg)
+     */
+    @TableField(exist = false)
+    private BigDecimal vacant;
+
+    /**
+     * 鍒涘缓鑰�
+     */
+    @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;
+
+
+}
diff --git a/src/main/java/com/ruoyi/production/service/ProcessRouteItemService.java b/src/main/java/com/ruoyi/production/service/ProcessRouteItemService.java
new file mode 100644
index 0000000..3299048
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/ProcessRouteItemService.java
@@ -0,0 +1,18 @@
+package com.ruoyi.production.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.framework.web.domain.R;
+import com.ruoyi.production.dto.ProcessRouteItemDto;
+import com.ruoyi.production.pojo.ProcessRouteItem;
+
+import java.util.List;
+
+public interface ProcessRouteItemService extends IService<ProcessRouteItem> {
+    List<ProcessRouteItemDto> listProcessRouteItemDto( ProcessRouteItemDto processRouteItemDto);
+
+    int sort(ProcessRouteItem processRouteItem);
+
+    String batchDelete(Long id);
+}
diff --git a/src/main/java/com/ruoyi/production/service/ProcessRouteService.java b/src/main/java/com/ruoyi/production/service/ProcessRouteService.java
new file mode 100644
index 0000000..bd26b0b
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/ProcessRouteService.java
@@ -0,0 +1,15 @@
+package com.ruoyi.production.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.production.dto.ProcessRouteDto;
+import com.ruoyi.production.pojo.ProcessRoute;
+import io.swagger.models.auth.In;
+
+public interface ProcessRouteService extends IService<ProcessRoute> {
+
+    IPage<ProcessRouteDto> pageProcessRouteDto(Page<ProcessRouteDto> page, ProcessRouteDto processRouteDto);
+
+    Integer saveProcessRoute(ProcessRoute processRoute);
+}
diff --git a/src/main/java/com/ruoyi/production/service/ProductBomService.java b/src/main/java/com/ruoyi/production/service/ProductBomService.java
new file mode 100644
index 0000000..0736338
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/ProductBomService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.production.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.production.dto.ProductBomDto;
+import com.ruoyi.production.dto.ProductProcessDto;
+import com.ruoyi.production.pojo.ProductBom;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * BOM涓昏〃 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-15 09:59:27
+ */
+public interface ProductBomService extends IService<ProductBom> {
+
+    IPage<ProductBomDto> listPage(Page page, ProductBomDto productBomDto);
+
+    AjaxResult add(ProductBom productBom);
+}
diff --git a/src/main/java/com/ruoyi/production/service/ProductOrderService.java b/src/main/java/com/ruoyi/production/service/ProductOrderService.java
new file mode 100644
index 0000000..78a3de1
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/ProductOrderService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.production.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.production.dto.ProductBomDto;
+import com.ruoyi.production.dto.ProductOrderDto;
+import com.ruoyi.production.dto.ProductStructureDto;
+import com.ruoyi.production.pojo.ProcessRoute;
+import com.ruoyi.production.pojo.ProductOrder;
+
+import java.util.List;
+
+
+public interface ProductOrderService extends IService<ProductOrder> {
+
+    IPage<ProductOrderDto> pageProductOrder(Page page, ProductOrderDto productOrder);
+
+    int bindingRoute(ProductOrder productOrder);
+
+    List<ProcessRoute> listProcessRoute(Long productModelId);
+
+    List<ProductStructureDto> listProcessBom(Long orderId);
+}
diff --git a/src/main/java/com/ruoyi/production/service/ProductProcessRouteItemService.java b/src/main/java/com/ruoyi/production/service/ProductProcessRouteItemService.java
new file mode 100644
index 0000000..c37eea1
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/ProductProcessRouteItemService.java
@@ -0,0 +1,18 @@
+package com.ruoyi.production.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.production.dto.ProductProcessRouteItemDto;
+import com.ruoyi.production.pojo.ProductProcessRouteItem;
+
+import java.util.List;
+
+public interface ProductProcessRouteItemService extends IService<ProductProcessRouteItem> {
+    List<ProductProcessRouteItemDto> listItem(Long orderId);
+
+    R deleteRouteItem(Long id);
+
+    R addRouteItem(ProductProcessRouteItem productProcessRouteItem);
+
+    int sortRouteItem(ProductProcessRouteItem productProcessRouteItem);
+}
diff --git a/src/main/java/com/ruoyi/production/service/ProductProcessRouteService.java b/src/main/java/com/ruoyi/production/service/ProductProcessRouteService.java
new file mode 100644
index 0000000..238aa1e
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/ProductProcessRouteService.java
@@ -0,0 +1,18 @@
+package com.ruoyi.production.service;
+
+import com.ruoyi.production.dto.ProcessRouteDto;
+import com.ruoyi.production.pojo.ProductProcessRoute;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-15 02:51:09
+ */
+public interface ProductProcessRouteService extends IService<ProductProcessRoute> {
+
+    ProcessRouteDto listMain(Long orderId);
+}
diff --git a/src/main/java/com/ruoyi/production/service/ProductProcessService.java b/src/main/java/com/ruoyi/production/service/ProductProcessService.java
new file mode 100644
index 0000000..a5ab6c3
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/ProductProcessService.java
@@ -0,0 +1,26 @@
+package com.ruoyi.production.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.device.pojo.DeviceRepair;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.production.dto.*;
+import com.ruoyi.production.pojo.ProductProcess;
+import com.ruoyi.production.pojo.SalesLedgerScheduling;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * @author :yys
+ * @date : 2025/7/21 14:39
+ */
+public interface ProductProcessService extends IService<ProductProcess> {
+    IPage<ProductProcessDto> listPage(Page page, ProductProcessDto productProcessDto);
+
+    AjaxResult add(ProductProcessDto productProcessDto);
+
+    AjaxResult importData(MultipartFile file);
+}
diff --git a/src/main/java/com/ruoyi/production/service/ProductStructureService.java b/src/main/java/com/ruoyi/production/service/ProductStructureService.java
new file mode 100644
index 0000000..b85a040
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/ProductStructureService.java
@@ -0,0 +1,17 @@
+package com.ruoyi.production.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.basic.dto.ProductModelDto;
+import com.ruoyi.production.dto.ProductStructureDto;
+import com.ruoyi.production.pojo.ProductStructure;
+
+import java.util.List;
+
+public interface ProductStructureService extends IService<ProductStructure> {
+
+
+    Boolean addProductStructureDto(ProductStructureDto productStructureDto);
+
+    List<ProductStructureDto> listBybomId(Long bomId);
+
+}
diff --git a/src/main/java/com/ruoyi/production/service/ProductWorkOrderService.java b/src/main/java/com/ruoyi/production/service/ProductWorkOrderService.java
new file mode 100644
index 0000000..392230e
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/ProductWorkOrderService.java
@@ -0,0 +1,15 @@
+package com.ruoyi.production.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.production.dto.ProductWorkOrderDto;
+import com.ruoyi.production.pojo.ProductWorkOrder;
+
+public interface ProductWorkOrderService extends IService<ProductWorkOrder>{
+
+    IPage<ProductWorkOrderDto> listPage(Page<ProductWorkOrderDto> page, ProductWorkOrderDto productWorkOrder);
+
+    int updateProductWorkOrder(ProductWorkOrderDto productWorkOrderDto);
+
+}
diff --git a/src/main/java/com/ruoyi/production/service/ProductionProductInputService.java b/src/main/java/com/ruoyi/production/service/ProductionProductInputService.java
new file mode 100644
index 0000000..1af1772
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/ProductionProductInputService.java
@@ -0,0 +1,11 @@
+package com.ruoyi.production.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.production.dto.ProductionProductInputDto;
+import com.ruoyi.production.pojo.ProductionProductInput;
+
+public interface ProductionProductInputService extends IService<ProductionProductInput> {
+    IPage<ProductionProductInputDto> listPageProductionProductInputDto(Page page, ProductionProductInputDto productionProductInputDto);
+}
diff --git a/src/main/java/com/ruoyi/production/service/ProductionProductMainService.java b/src/main/java/com/ruoyi/production/service/ProductionProductMainService.java
new file mode 100644
index 0000000..0980cae
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/ProductionProductMainService.java
@@ -0,0 +1,19 @@
+package com.ruoyi.production.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.production.dto.ProcessRouteItemDto;
+import com.ruoyi.production.dto.ProductOrderDto;
+import com.ruoyi.production.dto.ProductionProductMainDto;
+import com.ruoyi.production.pojo.ProductionProductMain;
+
+import java.util.List;
+
+public interface ProductionProductMainService extends IService<ProductionProductMain> {
+    IPage<ProductionProductMainDto> listPageProductionProductMainDto(Page page, ProductionProductMainDto productionProductMainDto);
+
+    Boolean addProductMain(ProductionProductMainDto productionProductMainDto);
+
+    Boolean removeProductMain(ProductionProductMainDto productionProductMainDto);
+}
diff --git a/src/main/java/com/ruoyi/production/service/ProductionProductOutputService.java b/src/main/java/com/ruoyi/production/service/ProductionProductOutputService.java
new file mode 100644
index 0000000..dea72b5
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/ProductionProductOutputService.java
@@ -0,0 +1,11 @@
+package com.ruoyi.production.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.production.dto.ProductionProductOutputDto;
+import com.ruoyi.production.pojo.ProductionProductOutput;
+
+public interface ProductionProductOutputService extends IService<ProductionProductOutput> {
+    IPage<ProductionProductOutputDto> listPageProductionProductOutputDto(Page page, ProductionProductOutputDto productionProductOutputDto);
+}
diff --git a/src/main/java/com/ruoyi/production/service/SalesLedgerSchedulingService.java b/src/main/java/com/ruoyi/production/service/SalesLedgerSchedulingService.java
index 2387e87..813553a 100644
--- a/src/main/java/com/ruoyi/production/service/SalesLedgerSchedulingService.java
+++ b/src/main/java/com/ruoyi/production/service/SalesLedgerSchedulingService.java
@@ -22,7 +22,7 @@
 
     void export(HttpServletResponse response);
 
-    int productionDispatch(ProductionDispatchAddDto productionDispatchAddDto);
+    String productionDispatch(List<ProductionDispatchAddDto> productionDispatchAddDto);
 
     IPage<SalesLedgerSchedulingProcessDto> listPageProcess(Page page, SalesLedgerSchedulingProcessDto salesLedgerSchedulingDto);
 
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProcessRouteItemServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProcessRouteItemServiceImpl.java
new file mode 100644
index 0000000..5614366
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/impl/ProcessRouteItemServiceImpl.java
@@ -0,0 +1,90 @@
+package com.ruoyi.production.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.production.dto.ProcessRouteItemDto;
+import com.ruoyi.production.mapper.ProcessRouteItemMapper;
+import com.ruoyi.production.pojo.ProcessRouteItem;
+import com.ruoyi.production.service.ProcessRouteItemService;
+import lombok.AllArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Service
+@AllArgsConstructor
+@Transactional(rollbackFor = Exception.class)
+public class ProcessRouteItemServiceImpl extends ServiceImpl<ProcessRouteItemMapper, ProcessRouteItem> implements ProcessRouteItemService {
+
+    @Autowired
+    private  ProcessRouteItemMapper processRouteItemMapper;
+
+    @Override
+    public List<ProcessRouteItemDto> listProcessRouteItemDto(ProcessRouteItemDto processRouteItemDto) {
+        return processRouteItemMapper.listProcessRouteItemDto( processRouteItemDto);
+    }
+
+    //鎺掑簭
+    @Override
+    public int sort(ProcessRouteItem processRouteItem) {
+        //鏌ヨ琚敼鍔ㄧ殑杩欐潯鏁版嵁
+        ProcessRouteItem oldProcessRouteItem = processRouteItemMapper.selectById(processRouteItem.getId());
+        //鏌ヨ璇ュ伐鑹鸿矾绾跨殑鎵�鏈夊伐搴忓苟鎸夌収椤哄簭鎺掑簭
+        List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(Wrappers.<ProcessRouteItem>lambdaQuery()
+                .eq(ProcessRouteItem::getRouteId, oldProcessRouteItem.getRouteId())
+                .orderByAsc(ProcessRouteItem::getDragSort));
+        // 鑾峰彇鐩爣浣嶇疆锛堢Щ鍔ㄥ埌绗嚑涓箣鍚庯級
+        Integer targetPosition = processRouteItem.getDragSort();
+        if (targetPosition != null && targetPosition >= 0) {
+            // 绉诲姩鍏冪礌鍒版柊鐨勪綅缃�
+            processRouteItems.remove(oldProcessRouteItem);
+            processRouteItems.add(targetPosition-1, oldProcessRouteItem);
+            // 鏇存柊鎵�鏈夊彈褰卞搷鐨勬帓搴忓瓧娈�
+            for (int i = 0; i < processRouteItems.size(); i++) {
+                ProcessRouteItem item = processRouteItems.get(i);
+                if (!item.getId().equals(oldProcessRouteItem.getId())) {
+                    // 妫�鏌ユ槸鍚﹂渶瑕佹洿鏂版帓搴忓��
+                    if (item.getDragSort() != i+1) {
+                        item.setDragSort(i+1);
+                        processRouteItemMapper.updateById(item);
+                    }
+                } else {
+                    // 鏇存柊鍘熻褰曠殑鏂版帓搴忎綅缃�
+                    oldProcessRouteItem.setDragSort(targetPosition);
+                    processRouteItemMapper.updateById(oldProcessRouteItem);
+                }
+            }
+            return 1;
+        }
+        return 0;
+    }
+
+    @Override
+    public String batchDelete(Long id) {
+        // 鏌ヨ瑕佸垹闄ょ殑鏁版嵁
+        ProcessRouteItem deleteProcessRouteItem = processRouteItemMapper.selectById(id);
+        if (deleteProcessRouteItem == null) {
+            return "鍒犻櫎澶辫触锛屾湭鎵惧埌瀵瑰簲鏁版嵁";
+        }
+        Long routeId = deleteProcessRouteItem.getRouteId();
+        // 鍒犻櫎鎸囧畾鏁版嵁
+        processRouteItemMapper.deleteById(id);
+        // 鏌ヨ璇ュ伐鑹鸿矾绾跨殑鎵�鏈夊伐搴忓苟鎸夌収椤哄簭鎺掑簭
+        List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(Wrappers.<ProcessRouteItem>lambdaQuery()
+                .eq(ProcessRouteItem::getRouteId, routeId)
+                .orderByAsc(ProcessRouteItem::getDragSort));
+        // 閲嶆柊璁剧疆鎺掑簭鍊硷紝浣垮簭鍙疯繛缁�
+        for (int i = 0; i < processRouteItems.size(); i++) {
+            ProcessRouteItem item = processRouteItems.get(i);
+            if (!item.getDragSort().equals(i+1)) {
+                item.setDragSort(i+1);
+                processRouteItemMapper.updateById(item);
+            }
+        }
+        return "鍒犻櫎鎴愬姛";
+    }
+}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
new file mode 100644
index 0000000..a5427d2
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/impl/ProcessRouteServiceImpl.java
@@ -0,0 +1,43 @@
+package com.ruoyi.production.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.production.dto.ProcessRouteDto;
+import com.ruoyi.production.mapper.ProcessRouteMapper;
+import com.ruoyi.production.pojo.ProcessRoute;
+import com.ruoyi.production.service.ProcessRouteService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+
+@Service
+@AllArgsConstructor
+@Slf4j
+public class ProcessRouteServiceImpl extends ServiceImpl<ProcessRouteMapper, ProcessRoute> implements ProcessRouteService {
+
+    @Autowired
+    private ProcessRouteMapper processRouteMapper;
+
+    @Override
+    public IPage<ProcessRouteDto> pageProcessRouteDto(Page<ProcessRouteDto> page, ProcessRouteDto processRouteDto) {
+
+        return processRouteMapper.pageProcessRouteDto(page, processRouteDto);
+    }
+
+    @Override
+    public Integer saveProcessRoute(ProcessRoute processRoute) {
+        this.save(processRoute);
+        String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+        String idStr = String.format("%06d", processRoute.getId());
+        String newProductCode = "GYLX" + dateStr + idStr;
+        // 鏇存柊鏁版嵁搴撲腑鐨刾roductCode
+        processRoute.setProcessRouteCode(newProductCode);
+        return processRouteMapper.updateById(processRoute);
+    }
+}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java
new file mode 100644
index 0000000..d519593
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductBomServiceImpl.java
@@ -0,0 +1,49 @@
+package com.ruoyi.production.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.production.dto.ProductBomDto;
+import com.ruoyi.production.dto.ProductProcessDto;
+import com.ruoyi.production.pojo.ProductBom;
+import com.ruoyi.production.mapper.ProductBomMapper;
+import com.ruoyi.production.pojo.ProductProcess;
+import com.ruoyi.production.service.ProductBomService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * BOM涓昏〃 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-15 09:59:27
+ */
+@Service
+public class ProductBomServiceImpl extends ServiceImpl<ProductBomMapper, ProductBom> implements ProductBomService {
+
+    @Autowired
+    private ProductBomMapper productBomMapper;
+
+    @Override
+    public IPage<ProductBomDto> listPage(Page page, ProductBomDto productBomDto) {
+        return productBomMapper.listPage(page,productBomDto);
+    }
+
+    @Override
+    public AjaxResult add(ProductBom productBom) {
+        boolean save = productBomMapper.insert(productBom) > 0;
+        if (save) {
+            // 鏍规嵁id鐢熸垚no瀛楁锛欸X + 8浣嶆暟瀛楋紙涓嶈冻8浣嶅墠闈㈣ˉ0锛�
+            String no = "BM." + String.format("%05d", productBom.getId());
+            productBom.setBomNo(no);
+            productBomMapper.updateById(productBom);
+            return AjaxResult.success();
+        }
+        return AjaxResult.error();
+    }
+}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
new file mode 100644
index 0000000..075815c
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
@@ -0,0 +1,111 @@
+package com.ruoyi.production.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+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.production.dto.ProductBomDto;
+import com.ruoyi.production.dto.ProductOrderDto;
+import com.ruoyi.production.dto.ProductStructureDto;
+import com.ruoyi.production.mapper.*;
+import com.ruoyi.production.pojo.*;
+import com.ruoyi.production.service.ProcessRouteService;
+import com.ruoyi.production.service.ProductOrderService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+
+@Service
+public class ProductOrderServiceImpl extends ServiceImpl<ProductOrderMapper, ProductOrder> implements ProductOrderService {
+
+    @Autowired
+    private ProductOrderMapper productOrderMapper;
+
+    @Autowired
+    private ProcessRouteMapper processRouteMapper;
+
+    @Autowired
+    private ProductProcessRouteMapper productProcessRouteMapper;
+
+    @Autowired
+    private ProcessRouteItemMapper processRouteItemMapper;
+
+    @Autowired
+    private ProductProcessRouteItemMapper productProcessRouteItemMapper;
+
+    @Autowired
+    private ProductWorkOrderMapper productWorkOrderMapper;
+
+
+    @Override
+    public IPage<ProductOrderDto> pageProductOrder(Page page, ProductOrderDto productOrder) {
+        return productOrderMapper.pageProductOrder(page, productOrder);
+    }
+
+    @Override
+    public int bindingRoute(ProductOrder productOrder) {
+        //鏂板鐢熶骇璁㈠崟涓嬬殑宸ヨ壓璺嚎涓昏〃
+        ProcessRoute processRoute = processRouteMapper.selectById(productOrder.getRouteId());
+        ProductProcessRoute productProcessRoute = new ProductProcessRoute();
+        productProcessRoute.setProductModelId(processRoute.getProductModelId());
+        productProcessRoute.setProcessRouteCode(processRoute.getProcessRouteCode());
+        productProcessRoute.setProductOrderId(productOrder.getId());
+        productProcessRoute.setBomId(processRoute.getBomId());
+        productProcessRouteMapper.insert(productProcessRoute);
+        //鏂板鐢熶骇璁㈠崟涓嬬殑宸ヨ壓璺嚎瀛愯〃
+        List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(new QueryWrapper<ProcessRouteItem>().lambda().eq(ProcessRouteItem::getRouteId, processRoute.getId()));
+        // 鐢熸垚褰撳墠鏃ユ湡鐨勫墠缂�锛氬勾鏈堟棩
+        String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+        for (ProcessRouteItem processRouteItem : processRouteItems) {
+            ProductProcessRouteItem productProcessRouteItem = new ProductProcessRouteItem();
+            productProcessRouteItem.setProductModelId(processRouteItem.getProductModelId());
+            productProcessRouteItem.setProcessId(processRouteItem.getProcessId());
+            productProcessRouteItem.setProductOrderId(productOrder.getId());
+            productProcessRouteItem.setProductRouteId(productProcessRoute.getId());
+            int insert = productProcessRouteItemMapper.insert(productProcessRouteItem);
+            if (insert > 0) {
+                // 鏌ヨ浠婃棩宸插瓨鍦ㄧ殑鏈�澶у伐鍗曞彿
+                QueryWrapper<ProductWorkOrder> queryWrapper = new QueryWrapper<>();
+                queryWrapper.likeRight("work_order_no", datePrefix)
+                        .orderByDesc("work_order_no")
+                        .last("LIMIT 1");
+                ProductWorkOrder lastWorkOrder = productWorkOrderMapper.selectOne(queryWrapper);
+                int sequenceNumber = 1; // 榛樿搴忓彿
+                if (lastWorkOrder != null && lastWorkOrder.getWorkOrderNo() != null) {
+                    String lastNo = lastWorkOrder.getWorkOrderNo().toString();
+                    if (lastNo.startsWith(datePrefix)) {
+                        String seqStr = lastNo.substring(datePrefix.length());
+                        try {
+                            sequenceNumber = Integer.parseInt(seqStr) + 1;
+                        } catch (NumberFormatException e) {
+                            sequenceNumber = 1;
+                        }
+                    }
+                }
+                // 鐢熸垚瀹屾暣鐨勫伐鍗曞彿
+                String workOrderNoStr = String.format("%s%03d", datePrefix, sequenceNumber);
+                ProductWorkOrder productWorkOrder = new ProductWorkOrder();
+                productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
+                productWorkOrder.setProductOrderId(productOrder.getId());
+                productWorkOrder.setPlanQuantity(productOrder.getQuantity());
+                productWorkOrder.setWorkOrderNo(workOrderNoStr);
+                productWorkOrder.setStatus(1);
+                productWorkOrderMapper.insert(productWorkOrder);
+            }
+        }
+        return productOrderMapper.updateById(productOrder);
+    }
+
+    @Override
+    public List<ProcessRoute> listProcessRoute(Long productModelId) {
+        return productOrderMapper.listProcessRoute(productModelId);
+    }
+
+    @Override
+    public List<ProductStructureDto> listProcessBom(Long orderId) {
+        return productOrderMapper.listProcessBom(orderId);
+    }
+}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteItemServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteItemServiceImpl.java
new file mode 100644
index 0000000..6c87939
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteItemServiceImpl.java
@@ -0,0 +1,206 @@
+package com.ruoyi.production.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.production.dto.ProductProcessRouteItemDto;
+import com.ruoyi.production.mapper.*;
+import com.ruoyi.production.pojo.*;
+import com.ruoyi.production.service.ProductProcessRouteItemService;
+import com.ruoyi.quality.mapper.QualityInspectMapper;
+import com.ruoyi.quality.pojo.QualityInspect;
+import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import lombok.AllArgsConstructor;
+import org.apache.poi.ss.formula.functions.T;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Service
+@Transactional(rollbackFor = Exception.class)
+@AllArgsConstructor
+public class ProductProcessRouteItemServiceImpl extends ServiceImpl<ProductProcessRouteItemMapper, ProductProcessRouteItem> implements ProductProcessRouteItemService {
+
+
+    private ProductProcessRouteItemMapper productProcessRouteItemMapper;
+
+    private ProductionProductMainMapper productionProductMainMapper;
+
+    private ProductionProductInputMapper productionProductInputMapper;
+
+    private ProductionProductOutputMapper productionProductOutputMapper;
+
+    private QualityInspectMapper qualityInspectMapper;
+
+    private SalesLedgerProductionAccountingMapper salesLedgerProductionAccountingMapper;
+
+    private ProductWorkOrderMapper productWorkOrderMapper;
+
+    private ProductOrderMapper productOrderMapper;
+
+    private ProductProcessRouteMapper productProcessRouteMapper;
+
+    private SalesLedgerProductMapper salesLedgerProductMapper;
+
+
+    @Override
+    public List<ProductProcessRouteItemDto> listItem(Long orderId) {
+        return productProcessRouteItemMapper.listItem(orderId);
+    }
+
+    @Override
+    public R deleteRouteItem(Long id) {
+        Long routeItemId = id;
+        try {
+            // 鏌ヨ宸ュ崟
+            ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectOne(
+                    new LambdaQueryWrapper<ProductWorkOrder>()
+                            .eq(ProductWorkOrder::getProductProcessRouteItemId, routeItemId)
+                            .last("LIMIT 1")
+            );
+            if (productWorkOrder == null) {
+                throw new RuntimeException("鍒犻櫎澶辫触锛氭湭鎵惧埌鍏宠仈鐨勭敓浜у伐鍗�");
+            }
+            Long workOrderId = productWorkOrder.getId();
+            Long productOrderId = productWorkOrder.getProductOrderId();
+            // 鏌ヨ鐢熶骇涓昏〃
+            List<ProductionProductMain> productionProductMains = productionProductMainMapper.selectList(
+                    new LambdaQueryWrapper<ProductionProductMain>()
+                            .eq(ProductionProductMain::getWorkOrderId, workOrderId)
+            );
+            if (!productionProductMains.isEmpty()) {
+                // 鎵归噺鍒犻櫎瀛愯〃
+                for (ProductionProductMain main : productionProductMains) {
+                    Long mainId = main.getId();
+                    // 鍒犻櫎鎶曞叆
+                    productionProductInputMapper.delete(new LambdaQueryWrapper<ProductionProductInput>()
+                            .eq(ProductionProductInput::getProductMainId, mainId));
+                    // 鍒犻櫎浜у嚭
+                    productionProductOutputMapper.delete(new LambdaQueryWrapper<ProductionProductOutput>()
+                            .eq(ProductionProductOutput::getProductMainId, mainId));
+                    // 鍒犻櫎璐ㄦ
+                    qualityInspectMapper.delete(new LambdaQueryWrapper<QualityInspect>()
+                            .eq(QualityInspect::getProductMainId, mainId));
+                }
+            }
+            //  鍒犻櫎鎶ュ伐锛堢敓浜т富琛級
+            productionProductMainMapper.delete(new LambdaQueryWrapper<ProductionProductMain>()
+                    .eq(ProductionProductMain::getWorkOrderId, workOrderId));
+            // 鏌ヨ璁㈠崟 + 鍒犻櫎鏍哥畻
+            ProductOrder productOrder = productOrderMapper.selectById(productOrderId);
+            if (productOrder != null && productOrder.getSalesLedgerId() != null) {
+                salesLedgerProductionAccountingMapper.delete(new LambdaQueryWrapper<SalesLedgerProductionAccounting>()
+                        .eq(SalesLedgerProductionAccounting::getSalesLedgerId, productOrder.getSalesLedgerId()));
+            }
+            // 鍒犻櫎鍏宠仈宸ュ崟
+            productWorkOrderMapper.delete(new LambdaQueryWrapper<ProductWorkOrder>()
+                    .eq(ProductWorkOrder::getProductProcessRouteItemId, routeItemId));
+
+            // 鍒犻櫎涓昏〃鏁版嵁
+            ProductProcessRouteItem deleteProductProcessRouteItem = productProcessRouteItemMapper.selectById(routeItemId);
+            Long productRouteId = deleteProductProcessRouteItem.getProductRouteId();
+            // 鍒犻櫎鎸囧畾鏁版嵁
+            productProcessRouteItemMapper.deleteById(id);
+            // 鏌ヨ璇ュ伐鑹鸿矾绾跨殑鎵�鏈夊伐搴忓苟鎸夌収椤哄簭鎺掑簭
+            List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery()
+                    .eq(ProductProcessRouteItem::getProductRouteId, productRouteId)
+                    .orderByAsc(ProductProcessRouteItem::getDragSort));
+            // 閲嶆柊璁剧疆鎺掑簭鍊硷紝浣垮簭鍙疯繛缁�
+            for (int i = 0; i < productProcessRouteItems.size(); i++) {
+                ProductProcessRouteItem item = productProcessRouteItems.get(i);
+                if (!item.getDragSort().equals(i + 1)) {
+                    item.setDragSort(i + 1);
+                    productProcessRouteItemMapper.updateById(item);
+                }
+            }
+            return R.ok();
+        } catch (Exception e) {
+            throw new RuntimeException("鍒犻櫎鐢熶骇宸ヨ壓璺嚎澶辫触锛�" + e.getMessage());
+        }
+    }
+
+    @Override
+    public R addRouteItem(ProductProcessRouteItem productProcessRouteItem) {
+        ProductOrder productOrder = productOrderMapper.selectById(productProcessRouteItem.getProductOrderId());
+        int insert = productProcessRouteItemMapper.insert(productProcessRouteItem);
+        // 鐢熸垚褰撳墠鏃ユ湡鐨勫墠缂�锛氬勾鏈堟棩
+        String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+        if (insert > 0) {
+            // 鏌ヨ浠婃棩宸插瓨鍦ㄧ殑鏈�澶у伐鍗曞彿
+            QueryWrapper<ProductWorkOrder> queryWrapper = new QueryWrapper<>();
+            queryWrapper.likeRight("work_order_no", datePrefix)
+                    .orderByDesc("work_order_no")
+                    .last("LIMIT 1");
+            ProductWorkOrder lastWorkOrder = productWorkOrderMapper.selectOne(queryWrapper);
+            int sequenceNumber = 1; // 榛樿搴忓彿
+            if (lastWorkOrder != null && lastWorkOrder.getWorkOrderNo() != null) {
+                String lastNo = lastWorkOrder.getWorkOrderNo().toString();
+                if (lastNo.startsWith(datePrefix)) {
+                    String seqStr = lastNo.substring(datePrefix.length());
+                    try {
+                        sequenceNumber = Integer.parseInt(seqStr) + 1;
+                    } catch (NumberFormatException e) {
+                        sequenceNumber = 1;
+                    }
+                }
+            }
+            // 鐢熸垚瀹屾暣鐨勫伐鍗曞彿
+            String workOrderNoStr = String.format("%s%03d", datePrefix, sequenceNumber);
+            ProductWorkOrder productWorkOrder = new ProductWorkOrder();
+            productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
+            productWorkOrder.setProductOrderId(productProcessRouteItem.getProductOrderId());
+            productWorkOrder.setPlanQuantity(productOrder.getQuantity());
+            productWorkOrder.setWorkOrderNo(workOrderNoStr);
+            productWorkOrder.setStatus(1);
+            productWorkOrderMapper.insert(productWorkOrder);
+        }
+        return R.ok();
+    }
+
+    @Override
+    public int sortRouteItem(ProductProcessRouteItem productProcessRouteItem) {
+        //鏌ヨ琚敼鍔ㄧ殑杩欐潯鏁版嵁
+        ProductProcessRouteItem oldProductProcessRouteItem = productProcessRouteItemMapper.selectById(productProcessRouteItem.getId());
+        //鏌ヨ璇ュ伐鑹鸿矾绾跨殑鎵�鏈夊伐搴忓苟鎸夌収椤哄簭鎺掑簭
+        List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery()
+                .eq(ProductProcessRouteItem::getProductRouteId, oldProductProcessRouteItem.getProductRouteId())
+                .orderByAsc(ProductProcessRouteItem::getDragSort));
+        // 鑾峰彇鐩爣浣嶇疆锛堢Щ鍔ㄥ埌绗嚑涓箣鍚庯級
+        Integer targetPosition = productProcessRouteItem.getDragSort();
+        if (targetPosition != null && targetPosition >= 0) {
+            // 绉诲姩鍏冪礌鍒版柊鐨勪綅缃�
+            productProcessRouteItems.remove(oldProductProcessRouteItem);
+            productProcessRouteItems.add(targetPosition-1, oldProductProcessRouteItem);
+            // 鏇存柊鎵�鏈夊彈褰卞搷鐨勬帓搴忓瓧娈�
+            for (int i = 0; i < productProcessRouteItems.size(); i++) {
+                ProductProcessRouteItem item = productProcessRouteItems.get(i);
+                if (!item.getId().equals(oldProductProcessRouteItem.getId())) {
+                    // 妫�鏌ユ槸鍚﹂渶瑕佹洿鏂版帓搴忓��
+                    if (item.getDragSort() != i+1) {
+                        item.setDragSort(i+1);
+                        productProcessRouteItemMapper.updateById(item);
+                    }
+                } else {
+                    // 鏇存柊鍘熻褰曠殑鏂版帓搴忎綅缃�
+                    oldProductProcessRouteItem.setDragSort(targetPosition);
+                    productProcessRouteItemMapper.updateById(oldProductProcessRouteItem);
+                }
+            }
+            return 1;
+        }
+        return 0;
+    }
+
+}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteServiceImpl.java
new file mode 100644
index 0000000..f5b2e92
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteServiceImpl.java
@@ -0,0 +1,29 @@
+package com.ruoyi.production.service.impl;
+
+import com.ruoyi.production.dto.ProcessRouteDto;
+import com.ruoyi.production.pojo.ProductProcessRoute;
+import com.ruoyi.production.mapper.ProductProcessRouteMapper;
+import com.ruoyi.production.service.ProductProcessRouteService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-15 02:51:09
+ */
+@Service
+public class ProductProcessRouteServiceImpl extends ServiceImpl<ProductProcessRouteMapper, ProductProcessRoute> implements ProductProcessRouteService {
+
+    @Autowired
+    private ProductProcessRouteMapper productProcessRouteMapper;
+
+    @Override
+    public ProcessRouteDto listMain(Long orderId) {
+        return productProcessRouteMapper.listMain(orderId);
+    }
+}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductProcessServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductProcessServiceImpl.java
new file mode 100644
index 0000000..6a8cf73
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductProcessServiceImpl.java
@@ -0,0 +1,63 @@
+package com.ruoyi.production.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.basic.pojo.Customer;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.production.dto.ProductProcessDto;
+import com.ruoyi.production.mapper.ProductProcessMapper;
+import com.ruoyi.production.pojo.ProductProcess;
+import com.ruoyi.production.service.ProductProcessService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+@Service
+public class ProductProcessServiceImpl extends ServiceImpl<ProductProcessMapper, ProductProcess> implements ProductProcessService {
+    @Autowired
+    private ProductProcessMapper productProcessMapper;
+
+    @Override
+    public IPage<ProductProcessDto> listPage(Page page, ProductProcessDto productProcessDto) {
+        return productProcessMapper.listPage(page, productProcessDto);
+    }
+
+    @Override
+    public AjaxResult add(ProductProcessDto productProcessDto) {
+        ProductProcess productProcess = new ProductProcess();
+        BeanUtils.copyProperties(productProcessDto,productProcess);
+        boolean save = productProcessMapper.insert(productProcess) > 0;
+        if (save && ObjectUtils.isNotNull(productProcessDto.getNo())) {
+            // 鏍规嵁id鐢熸垚no瀛楁锛欸X + 8浣嶆暟瀛楋紙涓嶈冻8浣嶅墠闈㈣ˉ0锛�
+            String no = "GX" + String.format("%08d", productProcess.getId());
+            productProcess.setNo(no);
+
+            productProcessMapper.updateById(productProcess);
+            return AjaxResult.success();
+        }
+        return AjaxResult.error();
+    }
+
+    @Override
+    public AjaxResult importData(MultipartFile file) {
+        try {
+            ExcelUtil<ProductProcess> util = new ExcelUtil<ProductProcess>(ProductProcess.class);
+            List<ProductProcess> productProcessList = util.importExcel(file.getInputStream());
+            if(CollectionUtils.isEmpty(productProcessList)){
+                return AjaxResult.warn("妯℃澘閿欒鎴栧鍏ユ暟鎹负绌�");
+            }
+            this.saveOrUpdateBatch(productProcessList);
+            return AjaxResult.success(true);
+        }catch (Exception e){
+            e.printStackTrace();
+            return AjaxResult.error("瀵煎叆澶辫触");
+        }
+    }
+}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java
new file mode 100644
index 0000000..310a723
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductStructureServiceImpl.java
@@ -0,0 +1,51 @@
+package com.ruoyi.production.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.basic.dto.ProductModelDto;
+import com.ruoyi.basic.dto.ProductTreeDto;
+import com.ruoyi.basic.mapper.ProductMapper;
+import com.ruoyi.basic.mapper.ProductModelMapper;
+import com.ruoyi.basic.pojo.Product;
+import com.ruoyi.basic.pojo.ProductModel;
+import com.ruoyi.production.dto.ProductStructureDto;
+import com.ruoyi.production.mapper.ProductBomMapper;
+import com.ruoyi.production.mapper.ProductStructureMapper;
+import com.ruoyi.production.pojo.ProductStructure;
+import com.ruoyi.production.service.ProductStructureService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+@RequiredArgsConstructor
+@Slf4j
+public class ProductStructureServiceImpl extends ServiceImpl<ProductStructureMapper, ProductStructure> implements ProductStructureService {
+
+    @Autowired
+    private  ProductStructureMapper productStructureMapper;
+
+
+
+    @Override
+    public Boolean addProductStructureDto(ProductStructureDto productStructureDto) {
+        this.remove(new QueryWrapper<ProductStructure>().lambda().eq(ProductStructure::getBomId, productStructureDto.getBomId()));
+        productStructureDto.getProductStructureList().forEach(productStructure -> {
+            productStructure.setBomId(productStructureDto.getBomId());
+        });
+        return this.saveBatch(productStructureDto.getProductStructureList());
+    }
+
+    @Override
+    public List<ProductStructureDto> listBybomId(Long bomId) {
+        List<ProductStructureDto> tree = productStructureMapper.listBybomId(bomId);
+        return tree;
+
+    }
+}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderServiceImpl.java
new file mode 100644
index 0000000..6f70e7c
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductWorkOrderServiceImpl.java
@@ -0,0 +1,32 @@
+package com.ruoyi.production.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.production.dto.ProductWorkOrderDto;
+import com.ruoyi.production.mapper.ProductWorkOrderMapper;
+import com.ruoyi.production.pojo.ProductWorkOrder;
+import com.ruoyi.production.service.ProductWorkOrderService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+@AllArgsConstructor
+@Transactional(rollbackFor = Exception.class)
+public class ProductWorkOrderServiceImpl extends ServiceImpl<ProductWorkOrderMapper, ProductWorkOrder> implements ProductWorkOrderService {
+
+    private ProductWorkOrderMapper productWorkOrdermapper;
+
+    @Override
+    public IPage<ProductWorkOrderDto> listPage(Page<ProductWorkOrderDto> page, ProductWorkOrderDto productWorkOrder) {
+        return productWorkOrdermapper.pageProductWorkOrder(page, productWorkOrder);
+    }
+
+    @Override
+    public int updateProductWorkOrder(ProductWorkOrderDto productWorkOrderDto) {
+        return productWorkOrdermapper.updateById(productWorkOrderDto);
+    }
+
+}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionProductInputServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionProductInputServiceImpl.java
new file mode 100644
index 0000000..49765c0
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductInputServiceImpl.java
@@ -0,0 +1,24 @@
+package com.ruoyi.production.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.production.dto.ProductionProductInputDto;
+import com.ruoyi.production.mapper.ProductionProductInputMapper;
+import com.ruoyi.production.pojo.ProductionProductInput;
+import com.ruoyi.production.service.ProductionProductInputService;
+import lombok.AllArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+@AllArgsConstructor
+public class ProductionProductInputServiceImpl extends ServiceImpl<ProductionProductInputMapper, ProductionProductInput> implements ProductionProductInputService {
+    @Autowired
+    private ProductionProductInputMapper productionProductInputMapper;
+
+    @Override
+    public IPage<ProductionProductInputDto> listPageProductionProductInputDto(Page page, ProductionProductInputDto productionProductInputDto) {
+        return productionProductInputMapper.listPageProductionProductInputDto(page, productionProductInputDto);
+    }
+}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
new file mode 100644
index 0000000..c4d2ba5
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -0,0 +1,299 @@
+package com.ruoyi.production.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+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.basic.mapper.ProductMapper;
+import com.ruoyi.basic.mapper.ProductModelMapper;
+import com.ruoyi.basic.pojo.Product;
+import com.ruoyi.basic.pojo.ProductModel;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.bean.BeanUtils;
+import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper;
+import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut;
+import com.ruoyi.procurementrecord.utils.StockUtils;
+import com.ruoyi.production.controller.ProductWorkOrderController;
+import com.ruoyi.production.dto.ProductStructureDto;
+import com.ruoyi.production.dto.ProductionProductMainDto;
+import com.ruoyi.production.mapper.*;
+import com.ruoyi.production.pojo.*;
+import com.ruoyi.production.service.ProductionProductMainService;
+import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.quality.mapper.QualityInspectMapper;
+import com.ruoyi.quality.mapper.QualityInspectParamMapper;
+import com.ruoyi.quality.mapper.QualityTestStandardMapper;
+import com.ruoyi.quality.pojo.QualityInspect;
+import com.ruoyi.quality.pojo.QualityInspectParam;
+import com.ruoyi.quality.pojo.QualityTestStandard;
+import io.swagger.models.auth.In;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import com.ruoyi.production.mapper.ProductionProductMainMapper;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+@AllArgsConstructor
+public class ProductionProductMainServiceImpl extends ServiceImpl<ProductionProductMainMapper, ProductionProductMain> implements ProductionProductMainService {
+
+    private final ProcurementRecordOutMapper procurementRecordOutMapper;
+    private ProductionProductMainMapper productionProductMainMapper;
+
+    private ProductWorkOrderController productWorkOrderController;
+
+    private ProductWorkOrderMapper productWorkOrderMapper;
+
+    private ProductProcessRouteItemMapper productProcessRouteItemMapper;
+
+    private ProductionProductOutputMapper productionProductOutputMapper;
+
+    private ProcessRouteItemMapper processRouteItemMapper;
+
+    private ProductModelMapper productModelMapper;
+
+    private QualityInspectMapper qualityInspectMapper;
+
+    private ProductProcessMapper productProcessMapper;
+
+    private ProductMapper productMapper;
+
+    private QualityTestStandardMapper qualityTestStandardMapper;
+
+    private QualityInspectParamMapper qualityInspectParamMapper;
+
+    private ProductStructureMapper productStructureMapper;
+
+    private ProductionProductInputMapper productionProductInputMapper;
+
+    private ProductOrderMapper productOrderMapper;
+
+    private SalesLedgerProductionAccountingMapper salesLedgerProductionAccountingMapper;
+
+    private StockUtils stockUtils;
+
+
+    @Override
+    public IPage<ProductionProductMainDto> listPageProductionProductMainDto(Page page, ProductionProductMainDto productionProductMainDto) {
+        return productionProductMainMapper.listPageProductionProductMainDto(page, productionProductMainDto);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean addProductMain(ProductionProductMainDto dto) {
+        if (dto == null) {
+            throw new RuntimeException("鍙傛暟涓嶈兘涓虹┖");
+        }
+
+        SysUser user = SecurityUtils.getLoginUser().getUser();
+
+
+        // 鏂板閫昏緫
+        ProductionProductMain productionProductMain = new ProductionProductMain();
+        ProductProcessRouteItem productProcessRouteItem = productProcessRouteItemMapper.selectById(dto.getProductProcessRouteItemId());
+        if (productProcessRouteItem == null) {
+            throw new RuntimeException("宸ヨ壓璺嚎椤逛笉瀛樺湪");
+        }
+
+        String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+
+        QueryWrapper<ProductionProductMain> queryWrapper = new QueryWrapper<>();
+        queryWrapper.select("MAX(product_no) as maxNo")
+                .likeRight("product_no", datePrefix);
+
+        List<Map<String, Object>> resultList = productionProductMainMapper.selectMaps(queryWrapper);
+
+        int sequenceNumber = 1;
+        if (resultList != null && !resultList.isEmpty()) {
+            Map<String, Object> result = resultList.get(0);
+
+            if (result != null) {
+                Object maxNoObj = result.get("maxNo");
+                if (maxNoObj != null) {
+                    String lastNo = maxNoObj.toString();
+                    System.out.println("lastNo: " + lastNo);
+
+                    if (lastNo.startsWith(datePrefix)) {
+                        try {
+                            String seqStr = lastNo.substring(datePrefix.length());
+                            sequenceNumber = Integer.parseInt(seqStr) + 1;
+                        } catch (NumberFormatException e) {
+                            sequenceNumber = 1;
+                        }
+                    }
+                }
+            }
+        }
+
+        String productNo = String.format("%s%03d", datePrefix, sequenceNumber);
+        productionProductMain.setProductNo(productNo);
+        productionProductMain.setUserId(user.getUserId());
+        productionProductMain.setProductProcessRouteItemId(dto.getProductProcessRouteItemId());
+        productionProductMain.setWorkOrderId(dto.getWorkOrderId());
+        productionProductMain.setStatus(0);
+        // 娣诲姞鎶ュ伐涓昏〃
+        int insert = productionProductMainMapper.insert(productionProductMain);
+
+        //鏇存柊宸ュ崟
+        if (insert > 0) {
+            Map<String, Object> params = new HashMap<>();
+            params.put("workOrderId", dto.getWorkOrderId());
+            params.put("deductQuantity", dto.getQuantity());
+
+            productWorkOrderMapper.updatePlanQuantity(params);
+        }
+        ProductProcess productProcess = productProcessMapper.selectById(productProcessRouteItem.getProcessId());
+        ProductModel productModel = productProcessRouteItem.getProductModelId() != null ?
+                productModelMapper.selectById(productProcessRouteItem.getProductModelId()) : null;
+
+        if (productModel != null) {
+            Product product = productMapper.selectById(productModel.getProductId());
+            int inspectType = "缁勮".equals(productProcess.getName()) ? 2 : 1;
+
+            QualityInspect qualityInspect = new QualityInspect();
+            qualityInspect.setProductId(product.getId());
+            qualityInspect.setProductName(product.getProductName());
+            qualityInspect.setModel(productModel.getModel());
+            qualityInspect.setUnit(productModel.getUnit());
+            qualityInspect.setQuantity(dto.getQuantity());
+            qualityInspect.setProcess(productProcess.getName());
+            qualityInspect.setInspectState(0);
+            qualityInspect.setInspectType(inspectType);
+            qualityInspect.setProductMainId(productionProductMain.getId());
+            qualityInspect.setProductModelId(productModel.getId());
+            qualityInspectMapper.insert(qualityInspect);
+
+            qualityTestStandardMapper.selectList(
+                    new LambdaQueryWrapper<QualityTestStandard>()
+                            .eq(QualityTestStandard::getProductId, product.getId())
+            ).forEach(standard -> {
+                QualityInspectParam param = new QualityInspectParam();
+                BeanUtils.copyProperties(standard, param);
+                param.setId(null);
+                param.setInspectId(qualityInspect.getId());
+                qualityInspectParamMapper.insert(param);
+            });
+        }
+        // 娣诲姞鎶曞叆
+        if (productModel != null) {
+            List<ProductStructureDto> productStructureDtos = productStructureMapper.listByproductModelId(productModel.getId());
+            for (ProductStructureDto productStructureDto : productStructureDtos) {
+                ProductModel productModel1 = productModelMapper.selectById(productStructureDto.getProductModelId());
+                Product product = productMapper.selectById(productModel1.getProductId());
+                BigDecimal stockQuantity = stockUtils.getStockQuantity(productModel1.getId()).get("stockQuantity");
+                if (!(stockQuantity.compareTo(BigDecimal.ZERO) > 0)) {
+                    throw new RuntimeException(product.getProductName() + "搴撳瓨涓�0");
+                }
+                if (stockQuantity.compareTo(productStructureDto.getUnitQuantity().multiply(dto.getQuantity())) < 0) {
+                    throw new RuntimeException(product.getProductName() + "搴撳瓨涓嶈冻");
+                }
+                ProductionProductInput productionProductInput = new ProductionProductInput();
+                productionProductInput.setProductModelId(productStructureDto.getProductModelId());
+                productionProductInput.setQuantity(productStructureDto.getUnitQuantity().multiply(dto.getQuantity()));
+                productionProductInput.setProductMainId(productionProductMain.getId());
+                productionProductInputMapper.insert(productionProductInput);
+
+
+                DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyyMMdd");
+                LocalDate now = LocalDate.now();
+                ProcurementRecordOut procurementRecordOut1 = procurementRecordOutMapper.selectCode(dateFormat.format(now));
+                Long aLong = procurementRecordOut1 == null ? 1L : Long.valueOf(procurementRecordOut1.getCode().split("LS"+dateFormat.format(now))[1]);
+                //娣诲姞鍑哄簱澶勭悊
+                ProcurementRecordOut.ProcurementRecordOutBuilder procurementRecordOut = ProcurementRecordOut.builder()
+                        .procurementRecordStorageId(0)
+                        .code("LS" + dateFormat.format(now) + String.format("%03d", aLong + 1))
+                        .salesLedgerProductId(0)
+                        .inboundBatches(aLong.equals(0L) ? "绗�1鎵规" : "绗�"+ (aLong + 1) + "鎵规")
+                        .inboundNum(productionProductInput.getQuantity())
+                        .type(4)
+                        .createTime(LocalDateTime.now())
+                        .createUser(user.getUserId())
+                        .createBy(user.getNickName())
+                        .updateUser(user.getUserId())
+                        .updateTime(LocalDateTime.now())
+                        .productModelId(productModel1.getId());
+                procurementRecordOutMapper.insert(procurementRecordOut.build());
+            }
+        }
+
+        // 娣诲姞浜у嚭
+        ProductionProductOutput productionProductOutput = new ProductionProductOutput();
+        productionProductOutput.setProductMainId(productionProductMain.getId());
+        productionProductOutput.setProductModelId(productProcessRouteItem.getProductModelId());
+        productionProductOutput.setQuantity(dto.getQuantity() != null ? dto.getQuantity() : BigDecimal.ZERO);
+        productionProductOutputMapper.insert(productionProductOutput);
+
+        // 鑾峰彇鐢熶骇璁㈠崟
+        ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(dto.getWorkOrderId());
+        List<ProductionProductMain> productionProductMains = productionProductMainMapper.selectList(new QueryWrapper<ProductionProductMain>().lambda().eq(ProductionProductMain::getWorkOrderId, dto.getWorkOrderId()));
+
+        if (productionProductMains.isEmpty()) {
+            productWorkOrder.setActualStartTime(LocalDate.now());
+        }
+        ProductOrder productOrder = productOrderMapper.selectById(productWorkOrder.getProductOrderId());
+        if (productOrder == null) {
+            throw new RuntimeException("鐢熶骇璁㈠崟涓嶅瓨鍦�");
+        }
+        // 娣诲姞鐢熶骇鏍哥畻
+        SalesLedgerProductionAccounting salesLedgerProductionAccounting = SalesLedgerProductionAccounting.builder()
+                .salesLedgerWorkId(productionProductMain.getId())
+                .salesLedgerSchedulingId(0L)
+                .salesLedgerId(productOrder.getSalesLedgerId())
+                .salesLedgerProductId(productOrder.getProductModelId())
+                .schedulingUserId(user.getUserId())
+                .schedulingUserName(user.getNickName())
+                .finishedNum(dto.getQuantity() != null ? dto.getQuantity() : BigDecimal.ZERO)
+                .workHours(productProcess.getSalaryQuota())
+                .process(productProcess.getName())
+                .schedulingDate(LocalDate.now())
+                .tenantId(dto.getTenantId())
+                .build();
+        salesLedgerProductionAccountingMapper.insert(salesLedgerProductionAccounting);
+
+        return true;
+    }
+
+    @Override
+    @Transactional
+    public Boolean removeProductMain(ProductionProductMainDto dto) {
+        Long id = dto.getId();
+
+        // 鏇存柊宸ュ崟
+        productWorkOrderMapper.rollbackPlanQuantity(id);
+        // 鍒犻櫎璐ㄦ鍙傛暟鍜岃川妫�璁板綍
+        qualityInspectMapper.selectList(
+                new LambdaQueryWrapper<QualityInspect>()
+                        .eq(QualityInspect::getProductMainId, id)
+        ).forEach(q -> {
+            qualityInspectParamMapper.delete(
+                    new LambdaQueryWrapper<QualityInspectParam>()
+                            .eq(QualityInspectParam::getInspectId, q.getId()));
+            qualityInspectMapper.deleteById(q.getId());
+        });
+
+        // 鍒犻櫎浜у嚭璁板綍
+        productionProductOutputMapper.delete(new LambdaQueryWrapper<ProductionProductOutput>()
+                .eq(ProductionProductOutput::getProductMainId, id)
+        );
+
+        // 鍒犻櫎鍏宠仈鐨勬牳绠楁暟鎹�
+        salesLedgerProductionAccountingMapper.delete(
+                new LambdaQueryWrapper<SalesLedgerProductionAccounting>()
+                        .eq(SalesLedgerProductionAccounting::getSalesLedgerWorkId, id)
+        );
+
+        // 鍒犻櫎涓昏〃
+        return productionProductMainMapper.deleteById(id) > 0;
+    }
+}
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionProductOutputServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionProductOutputServiceImpl.java
new file mode 100644
index 0000000..654b9af
--- /dev/null
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductOutputServiceImpl.java
@@ -0,0 +1,24 @@
+package com.ruoyi.production.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.production.dto.ProductionProductOutputDto;
+import com.ruoyi.production.mapper.ProductionProductOutputMapper;
+import com.ruoyi.production.pojo.ProductionProductOutput;
+import com.ruoyi.production.service.ProductionProductOutputService;
+import lombok.AllArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+@AllArgsConstructor
+public class ProductionProductOutputServiceImpl extends ServiceImpl<ProductionProductOutputMapper, ProductionProductOutput> implements ProductionProductOutputService {
+    @Autowired
+    private ProductionProductOutputMapper productionProductOutputMapper;
+
+    @Override
+    public IPage<ProductionProductOutputDto> listPageProductionProductOutputDto(Page page, ProductionProductOutputDto productionProductOutputDto) {
+        return productionProductOutputMapper.listPageProductionProductOutputDto(page, productionProductOutputDto);
+    }
+}
diff --git a/src/main/java/com/ruoyi/production/service/impl/SalesLedgerProductionAccountingServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/SalesLedgerProductionAccountingServiceImpl.java
index ffefd66..c6224cd 100644
--- a/src/main/java/com/ruoyi/production/service/impl/SalesLedgerProductionAccountingServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/SalesLedgerProductionAccountingServiceImpl.java
@@ -22,6 +22,8 @@
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import java.math.BigDecimal;
+
 /**
  * @author :yys
  * @date : 2025/7/21 14:41
@@ -36,9 +38,29 @@
     @Override
     public IPage<SalesLedgerProductionAccountingDto> listPage(Page page, SalesLedgerProductionAccountingDto salesLedgerProductionAccountingDto) {
         IPage<SalesLedgerProductionAccountingDto> list = salesLedgerProductionAccountingMapper.listPage(page, salesLedgerProductionAccountingDto);
+        list.getRecords().forEach(item -> {
+            String[] split = item.getSpecificationModel().split("\\*");
+            if(split.length == 2 && isNumeric(split[1])){
+                // 璁$畻宸ヨ祫 = 宸ユ椂瀹氶 * 鏁伴噺 * 瑙勬牸
+                item.setWages(item.getWages().multiply(new BigDecimal(split[1])));
+            }
+        });
         return list;
     }
 
+    public static boolean isNumeric(String str) {
+        if (str == null || str.isEmpty()) {
+            return false;
+        }
+        // 閬嶅巻瀛楃涓茬殑姣忎釜瀛楃锛屾鏌ユ槸鍚︿负鏁板瓧
+        for (int i = 0; i < str.length(); i++) {
+            if (!Character.isDigit(str.charAt(i))) {
+                return false;
+            }
+        }
+        return true;
+    }
+
     @Override
     public void export(HttpServletResponse response) {
         Page page =  new Page(-1,-1);
diff --git a/src/main/java/com/ruoyi/production/service/impl/SalesLedgerSchedulingServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/SalesLedgerSchedulingServiceImpl.java
index 13dd28e..2ebc028 100644
--- a/src/main/java/com/ruoyi/production/service/impl/SalesLedgerSchedulingServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/SalesLedgerSchedulingServiceImpl.java
@@ -4,29 +4,42 @@
 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.DateUtils;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.procurementrecord.dto.ProcurementRecordOutPageDto;
+import com.ruoyi.framework.security.LoginUser;
 import com.ruoyi.production.dto.*;
 import com.ruoyi.production.mapper.SalesLedgerSchedulingMapper;
 import com.ruoyi.production.mapper.SalesLedgerWorkMapper;
+import com.ruoyi.production.mapper.SpeculativeTradingInfoMapper;
 import com.ruoyi.production.pojo.SalesLedgerScheduling;
 import com.ruoyi.production.pojo.SalesLedgerWork;
+import com.ruoyi.production.pojo.SpeculativeTradingInfo;
 import com.ruoyi.production.service.SalesLedgerSchedulingService;
 import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.mapper.SysUserMapper;
+import com.ruoyi.sales.mapper.LossMapper;
+import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.sales.pojo.Loss;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
 import lombok.RequiredArgsConstructor;
 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.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 
 /**
@@ -45,7 +58,7 @@
     @Override
     public IPage<SalesLedgerSchedulingDto> listPage(Page page, SalesLedgerSchedulingDto salesLedgerSchedulingDto) {
         IPage<SalesLedgerSchedulingDto> list = salesLedgerSchedulingMapper.listPage(page, salesLedgerSchedulingDto);
-        if(list.getTotal() == 0){
+        if(CollectionUtils.isEmpty(list.getRecords())){
             return list;
         }
         Set<Long> collect = list.getRecords().stream().map(SalesLedgerSchedulingDto::getSalesLedgerProductId).collect(Collectors.toSet());
@@ -60,6 +73,16 @@
                     .filter(j -> j.getSalesLedgerProductId().equals(i.getSalesLedgerProductId()))
                     .map(SalesLedgerWork::getFinishedNum)
                     .reduce(BigDecimal.ZERO, BigDecimal::add));
+
+            // 璁$畻鐢熶骇鎬婚噺 = 瑙勬牸 * 鏁伴噺 / 1000
+            String[] split = i.getSpecificationModel().split("\\*");
+            if(split.length == 2 && isNumeric(split[0]) && isNumeric(split[1])){
+                BigDecimal multiply = new BigDecimal(split[0])
+                        .multiply(new BigDecimal(split[1])
+                                .multiply(i.getQuantity()).divide(new BigDecimal(1000),2, RoundingMode.CEILING));
+                i.setTotalProduction(multiply);
+            }
+
             // 鐘舵�� = 鏁伴噺鍜屽畬宸ユ暟閲忔瘮杈�
             if(i.getSuccessNum().compareTo(new BigDecimal(0)) == 0){
                 i.setStatus("鏈紑濮�");
@@ -68,8 +91,24 @@
             }else{
                 i.setStatus("鐢熶骇涓�");
             }
+            // 杩涘害淇濈暀涓や綅灏忔暟
+            i.setProgress(i.getSchedulingNum().divide(i.getQuantity(),4,RoundingMode.CEILING).multiply(new BigDecimal(100)));
+
         });
         return list;
+    }
+
+    public static boolean isNumeric(String str) {
+        if (str == null || str.isEmpty()) {
+            return false;
+        }
+        // 閬嶅巻瀛楃涓茬殑姣忎釜瀛楃锛屾鏌ユ槸鍚︿负鏁板瓧
+        for (int i = 0; i < str.length(); i++) {
+            if (!Character.isDigit(str.charAt(i))) {
+                return false;
+            }
+        }
+        return true;
     }
 
     @Override
@@ -104,39 +143,182 @@
 
     private final SysUserMapper sysUserMapper;
 
+    private final SpeculativeTradingInfoMapper speculativeTradingInfoMapper;
+
     @Override
-    public int productionDispatch(ProductionDispatchAddDto productionDispatchAddDto) {
-        SysUser sysUser = sysUserMapper.selectUserById(productionDispatchAddDto.getSchedulingUserId());
-        if(sysUser == null) throw new RuntimeException("鎺掍骇浜轰笉瀛樺湪");
-        SalesLedgerScheduling salesLedgerScheduling = SalesLedgerScheduling.builder()
-                .salesLedgerId(productionDispatchAddDto.getSalesLedgerId())
-                .salesLedgerProductId(productionDispatchAddDto.getSalesLedgerProductId())
-                .schedulingUserId(productionDispatchAddDto.getSchedulingUserId())
-                .schedulingUserName(sysUser.getNickName())
-                .schedulingNum(productionDispatchAddDto.getSchedulingNum())
-                .schedulingDate(LocalDate.parse(productionDispatchAddDto.getSchedulingDate(), DateTimeFormatter.ISO_LOCAL_DATE))
-                .status(1)
-                .build();
-        return salesLedgerSchedulingMapper.insert(salesLedgerScheduling);
+    public String productionDispatch(List<ProductionDispatchAddDto> productionDispatchAddDtoList) {
+        int i = 0;
+        int successNum = 0;
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        for (ProductionDispatchAddDto productionDispatchAddDto : productionDispatchAddDtoList) {
+            SysUser sysUser = sysUserMapper.selectUserById(productionDispatchAddDto.getSchedulingUserId() == null ? loginUser.getUser().getUserId() : productionDispatchAddDto.getSchedulingUserId());
+            if(sysUser == null){
+                i++;
+                continue;
+            }
+            // 鑾峰彇绌轰綑鐐掓満
+            String[] split = productionDispatchAddDto.getSpeculativeTradingName().split(",");
+            if(split != null && split.length == 0){
+                i++;
+                continue;
+            }
+            List<SpeculativeTradingInfo> speculativeTradingInfos = speculativeTradingInfoMapper.selectList(new LambdaQueryWrapper<SpeculativeTradingInfo>()
+                    .in(SpeculativeTradingInfo::getName, Arrays.asList(split))
+                    .orderByAsc(SpeculativeTradingInfo::getSort));
+            if(CollectionUtils.isEmpty(speculativeTradingInfos)){
+                i++;
+                continue;
+            }
+            AtomicReference<String> name = new AtomicReference<>("");  //闇�瑕佺粦瀹氱殑鐐掓満
+            //閫氳繃瑙勬牸鍨嬪彿鍜屾帓浜ф暟閲忚绠楁湰娆$敓浜т骇閲�
+            String[] split1 = productionDispatchAddDto.getSpecificationModel().split("\\*");
+            if(split1.length != 2){
+                i++;
+                continue;
+            }
+            // 鏈鐢熶骇浜ч噺
+            BigDecimal productionNum = new BigDecimal(split1[0])
+                    .multiply(new BigDecimal(split1[1]).multiply(productionDispatchAddDto.getSchedulingNum()));
+            // 澶氫釜鐐掓満鎯呭喌
+            if(speculativeTradingInfos.size() > 1){
+                for (SpeculativeTradingInfo speculativeTradingInfo : speculativeTradingInfos) {
+                    // 鑾峰彇璇ョ倰鏈烘鍦ㄦ帓浜ч噺
+                    BigDecimal schedulingNumBySpeculativeTradingName = getSchedulingNumBySpeculativeTradingName(speculativeTradingInfo.getName());
+                    // 濡傛灉璇ョ倰鏈烘�婚噺(鍗曚綅kg闇�瑕佷箻1000) - 姝e湪鎺掍骇閲� >=鏈鐢熶骇浜ч噺灏卞垎閰嶆鐐掓満
+                    if(speculativeTradingInfo.getWorkLoad().multiply(new BigDecimal(1000)).subtract(schedulingNumBySpeculativeTradingName).compareTo(productionNum) >= 0){
+                        name.set(speculativeTradingInfo.getName());
+                        break;
+                    }
+                }
+            }else{
+                // 鍗曚釜鐐掓満鎯呭喌
+                name.set(speculativeTradingInfos.get(0).getName());
+            }
+            if(name.get().isEmpty()){
+                i++;
+                continue;
+            }
+            String productionLine = "";
+            switch (name.get()){
+                    case "鐐掓満1":
+                    productionLine = "浜х嚎1";
+                    break;
+                    case "鐐掓満2":
+                    productionLine = "浜х嚎2";
+                    break;
+                    case "鐐掓満3":
+                    productionLine = "浜х嚎3";
+                    break;
+                    case "鐐掓満4":
+                    productionLine = "浜х嚎4";
+                    break;
+            }
+            SalesLedgerScheduling salesLedgerScheduling = SalesLedgerScheduling.builder()
+                    .salesLedgerId(productionDispatchAddDto.getSalesLedgerId())
+                    .salesLedgerProductId(productionDispatchAddDto.getSalesLedgerProductId())
+                    .speculativeTradingName(name.get())
+                    .productionLine(productionLine)
+                    .schedulingUserId(sysUser.getUserId())
+                    .schedulingUserName(sysUser.getNickName())
+                    .schedulingNum(productionDispatchAddDto.getSchedulingNum())
+                    .schedulingDate(productionDispatchAddDto.getSchedulingDate() == null ? LocalDate.now() : LocalDate.parse(productionDispatchAddDto.getSchedulingDate(), DateTimeFormatter.ofPattern("yyyy-MM-dd")))
+                    .status(1)
+                    .build();
+            salesLedgerSchedulingMapper.insert(salesLedgerScheduling);
+            successNum++;
+        }
+
+        return "娲惧伐鎴愬姛鏁伴噺" + successNum + "锛屽け璐ユ暟閲�" + i;
+    }
+
+    private final SalesLedgerProductMapper salesLedgerProductMapper;
+
+    /**
+     *閫氳繃鐐掓満鍚嶇О鑾峰彇褰撳ぉ姝e湪鎺掍骇閲�
+     * @return
+     */
+    public BigDecimal getSchedulingNumBySpeculativeTradingName(String speculativeTradingName){
+        LambdaQueryWrapper<SalesLedgerScheduling> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(SalesLedgerScheduling::getSpeculativeTradingName, speculativeTradingName)
+                .eq(SalesLedgerScheduling::getSchedulingDate, LocalDate.now());
+        List<SalesLedgerScheduling> salesLedgerSchedulings = salesLedgerSchedulingMapper.selectList(queryWrapper);
+        if(CollectionUtils.isEmpty(salesLedgerSchedulings)){
+            return BigDecimal.ZERO;
+        }
+        List<Long> collect = salesLedgerSchedulings.stream().map(SalesLedgerScheduling::getSalesLedgerProductId).collect(Collectors.toList());
+        List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(new LambdaQueryWrapper<SalesLedgerProduct>()
+                .in(SalesLedgerProduct::getId, collect));
+        if(CollectionUtils.isEmpty(salesLedgerProducts)) return BigDecimal.ZERO;
+        AtomicInteger totalNum = new AtomicInteger(0); //鎬绘暟
+        salesLedgerSchedulings.forEach(item ->{
+            List<SalesLedgerProduct> collect1 = salesLedgerProducts.stream()
+                    .filter(j -> j.getId().equals(item.getSalesLedgerProductId()))
+                    .collect(Collectors.toList());
+            if(!CollectionUtils.isEmpty(collect1)){
+                SalesLedgerProduct salesLedgerProduct = collect1.get(0);
+                // 鏍规嵁浜у搧瑙勬牸 * 鎺掍骇鏁伴噺 鑾峰彇鏈鐢熶骇浜ч噺骞剁疮璁�
+                String[] split = salesLedgerProduct.getSpecificationModel().split("\\*");
+                BigDecimal productionNum = new BigDecimal(split[0])
+                        .multiply(new BigDecimal(split[1]).multiply(item.getSchedulingNum()));
+                totalNum.addAndGet(productionNum.intValue());
+            }
+        });
+        // 闇�瑕� / 鎹熻�楃巼
+        Loss loss = lossMapper.selectOne(new LambdaQueryWrapper<Loss>().last("limit 1"));
+        BigDecimal lossNum = loss == null ? new BigDecimal(6) : loss.getRate(); //娌℃湁鎹熻�楃巼鍒欓粯璁や负6
+
+        return new BigDecimal(totalNum.get()).multiply(new BigDecimal(100)).divide(lossNum, 2,RoundingMode.HALF_UP);
+    }
+
+    private final LossMapper lossMapper;
+
+
+    /**
+     *閫氳繃鎵归噺鐐掓満鍚嶇О鑾峰彇褰撳ぉ姝e湪鎺掍骇閲�
+     * @return
+     */
+    public BigDecimal getSchedulingNumBySpeculativeTradingNameList(List<String> speculativeTradingName){
+        LambdaQueryWrapper<SalesLedgerScheduling> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(SalesLedgerScheduling::getSpeculativeTradingName, speculativeTradingName)
+                .eq(SalesLedgerScheduling::getSchedulingDate, LocalDate.now());
+        List<SalesLedgerScheduling> salesLedgerSchedulings = salesLedgerSchedulingMapper.selectList(queryWrapper);
+        if(CollectionUtils.isEmpty(salesLedgerSchedulings)){
+            return BigDecimal.ZERO;
+        }
+        List<Long> collect = salesLedgerSchedulings.stream().map(SalesLedgerScheduling::getSalesLedgerProductId).collect(Collectors.toList());
+        List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(new LambdaQueryWrapper<SalesLedgerProduct>()
+                .in(SalesLedgerProduct::getId, collect));
+        if(CollectionUtils.isEmpty(salesLedgerProducts)) return BigDecimal.ZERO;
+        AtomicInteger totalNum = new AtomicInteger(0); //鎬绘暟
+        salesLedgerSchedulings.forEach(item ->{
+            List<SalesLedgerProduct> collect1 = salesLedgerProducts.stream()
+                    .filter(j -> j.getId().equals(item.getSalesLedgerProductId()))
+                    .collect(Collectors.toList());
+            if(!CollectionUtils.isEmpty(collect1)){
+                SalesLedgerProduct salesLedgerProduct = collect1.get(0);
+                // 鏍规嵁浜у搧瑙勬牸 * 鎺掍骇鏁伴噺 鑾峰彇鏈鐢熶骇浜ч噺骞剁疮璁�
+                String[] split = salesLedgerProduct.getSpecificationModel().split("\\*");
+                BigDecimal productionNum = new BigDecimal(split[0])
+                        .multiply(new BigDecimal(split[1]).multiply(item.getSchedulingNum()));
+                totalNum.addAndGet(productionNum.intValue());
+            }
+        });
+        return new BigDecimal(totalNum.get());
     }
 
     @Override
     public IPage<SalesLedgerSchedulingProcessDto> listPageProcess(Page page, SalesLedgerSchedulingProcessDto salesLedgerSchedulingDto) {
         IPage<SalesLedgerSchedulingProcessDto> list = salesLedgerSchedulingMapper.listPageProcess(page, salesLedgerSchedulingDto);
-//        Set<Long> collect = list.getRecords().stream().map(SalesLedgerSchedulingProcessDto::getId).collect(Collectors.toSet());
-//        if(CollectionUtils.isEmpty(collect)) return list;
-//        LambdaQueryWrapper<SalesLedgerWork> salesLedgerWorkLambdaQueryWrapper = new LambdaQueryWrapper<>();
-//        salesLedgerWorkLambdaQueryWrapper.in(SalesLedgerWork::getSalesLedgerSchedulingId, collect)
-//                .ne(SalesLedgerWork::getStatus, 1);
-//        List<SalesLedgerWork> salesLedgerWorks = salesLedgerWorkMapper.selectList(salesLedgerWorkLambdaQueryWrapper);
-//        list.getRecords().forEach(i -> {
-//            // 鑾峰彇瀹屾垚鏁伴噺
-//            i.setSuccessNum(salesLedgerWorks
-//                    .stream()
-//                    .filter(j -> j.getSalesLedgerSchedulingId().equals(i.getId()))
-//                    .map(SalesLedgerWork::getFinishedNum)
-//                    .reduce(BigDecimal.ZERO, BigDecimal::add));
-//        });
+        list.getRecords().forEach(i -> {
+            // 璁$畻鐢熶骇鎬婚噺 = 瑙勬牸 * 鏁伴噺 / 1000
+            String[] split = i.getSpecificationModel().split("\\*");
+            if(split.length == 2 && isNumeric(split[0]) && isNumeric(split[1])){
+                BigDecimal multiply = new BigDecimal(split[0])
+                        .multiply(new BigDecimal(split[1])
+                                .multiply(i.getSuccessNum()).divide(new BigDecimal(1000),2, RoundingMode.CEILING));
+                i.setTotalProduction(multiply);
+            }
+        });
         return list;
     }
 
@@ -161,10 +343,10 @@
             SysUser sysUser = sysUserMapper.selectUserById(processSchedulingDto.getSchedulingUserId());
             if(sysUser == null) throw new RuntimeException("鎺掍骇浜轰笉瀛樺湪");
             salesLedgerScheduling.setFinishedNum(salesLedgerScheduling.getFinishedNum().add(processSchedulingDto.getSchedulingNum()));
-            LambdaQueryWrapper<SalesLedgerWork> salesLedgerWorkLambdaQueryWrapper = new LambdaQueryWrapper<>();
-            salesLedgerWorkLambdaQueryWrapper.eq(SalesLedgerWork::getSalesLedgerSchedulingId, salesLedgerScheduling.getId())
-                    .ne(SalesLedgerWork::getStatus, 1);
-            List<SalesLedgerWork> salesLedgerWorks = salesLedgerWorkMapper.selectList(salesLedgerWorkLambdaQueryWrapper);
+//            LambdaQueryWrapper<SalesLedgerWork> salesLedgerWorkLambdaQueryWrapper = new LambdaQueryWrapper<>();
+//            salesLedgerWorkLambdaQueryWrapper.eq(SalesLedgerWork::getSalesLedgerSchedulingId, salesLedgerScheduling.getId())
+//                    .ne(SalesLedgerWork::getStatus, 1);
+//            List<SalesLedgerWork> salesLedgerWorks = salesLedgerWorkMapper.selectList(salesLedgerWorkLambdaQueryWrapper);
             if(salesLedgerScheduling.getSchedulingNum().compareTo(salesLedgerScheduling.getFinishedNum()) < 0){
                 throw new RuntimeException("褰撳墠鎺掍骇鏁伴噺澶т簬寰呮帓浜ф暟閲忥紝璇蜂粩缁嗘牳瀵癸紒");
             }
@@ -177,6 +359,11 @@
             SalesLedgerWork.SalesLedgerWorkBuilder salesLedgerWorkBuilder = SalesLedgerWork.builder()
                     .salesLedgerSchedulingId(salesLedgerScheduling.getId())
                     .salesLedgerId(salesLedgerScheduling.getSalesLedgerId())
+                    .remark(processSchedulingDto.getRemark())
+                    .productionLine(processSchedulingDto.getProductionLine())
+                    .type(processSchedulingDto.getType())
+                    .loss(processSchedulingDto.getLoss())
+                    .receive(processSchedulingDto.getReceive())
                     .salesLedgerProductId(salesLedgerScheduling.getSalesLedgerProductId())
                     .schedulingUserId(salesLedgerScheduling.getSchedulingUserId())
                     .schedulingUserName(sysUser.getNickName())
diff --git a/src/main/java/com/ruoyi/production/service/impl/SalesLedgerWorkServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/SalesLedgerWorkServiceImpl.java
index bf35f8a..2135a8b 100644
--- a/src/main/java/com/ruoyi/production/service/impl/SalesLedgerWorkServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/SalesLedgerWorkServiceImpl.java
@@ -4,7 +4,14 @@
 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.SecurityUtils;
+import com.ruoyi.framework.security.LoginUser;
 import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.procurementrecord.dto.Details;
+import com.ruoyi.procurementrecord.dto.ProcurementAddDto;
+import com.ruoyi.procurementrecord.dto.ProcurementRecordOutAdd;
+import com.ruoyi.procurementrecord.service.impl.ProcurementRecordOutServiceImpl;
+import com.ruoyi.procurementrecord.service.impl.ProcurementRecordServiceImpl;
 import com.ruoyi.production.dto.ProductionReportDto;
 import com.ruoyi.production.dto.SalesLedgerWorkDto;
 import com.ruoyi.production.mapper.SalesLedgerProductionAccountingMapper;
@@ -15,14 +22,19 @@
 import com.ruoyi.production.service.SalesLedgerWorkService;
 import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.mapper.SysUserMapper;
+import com.ruoyi.sales.mapper.LossMapper;
+import com.ruoyi.sales.pojo.Loss;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -39,13 +51,46 @@
 
     private final SysUserMapper sysUserMapper;
 
+    private final LossMapper lossMapper;
+
     private final SalesLedgerProductionAccountingMapper salesLedgerProductionAccountingMapper;
 
     @Override
     public IPage<SalesLedgerWorkDto> listPage(Page page, SalesLedgerWorkDto salesLedgerWorkDto) {
         IPage<SalesLedgerWorkDto> iPage = salesLedgerWorkMapper.listPage(page, salesLedgerWorkDto);
+        List<Loss> losses = lossMapper.selectList(null);
+        if(!CollectionUtils.isEmpty(losses)){
+            iPage.getRecords().forEach(item -> {
+                String[] split = item.getSpecificationModel().split("\\*");
+                if(split.length == 2 && isNumeric(split[1]) && isNumeric(split[0])){
+                    // 璁$畻鎹熻�楋紙100000浠h〃 鎹熻�楃殑 100 鍜� 鍗曚綅杞崲鐨�1000锛�
+                    BigDecimal divide = new BigDecimal(split[0])
+                            .multiply(new BigDecimal(split[1]))
+                            .multiply(item.getFinishedNum())
+                            .multiply(losses.get(0).getRate())
+                            .divide(new BigDecimal(100000), 2, RoundingMode.HALF_UP);
+                    item.setLoss(divide.toString());
+                }
+
+            });
+        }
         return iPage;
     }
+
+    public static boolean isNumeric(String str) {
+        if (str == null || str.isEmpty()) {
+            return false;
+        }
+        // 閬嶅巻瀛楃涓茬殑姣忎釜瀛楃锛屾鏌ユ槸鍚︿负鏁板瓧
+        for (int i = 0; i < str.length(); i++) {
+            if (!Character.isDigit(str.charAt(i))) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    private final ProcurementRecordServiceImpl procurementRecordService;
 
     @Override
     public int productionReport(ProductionReportDto productionReportDto) {
@@ -66,7 +111,7 @@
                 .salesLedgerWorkId(salesLedgerWork.getId())
                 .salesLedgerSchedulingId(salesLedgerWork.getSalesLedgerSchedulingId())
                 .salesLedgerId(salesLedgerWork.getSalesLedgerId())
-                .salesLedgerProductId(salesLedgerWork.getSalesLedgerProductId())
+                .salesLedgerProductId((long)salesLedgerWork.getSalesLedgerProductId())
                 .schedulingUserId(sysUser.getUserId())
                 .schedulingUserName(sysUser.getNickName())
                 .finishedNum(productionReportDto.getFinishedNum())
@@ -74,6 +119,22 @@
                 .process(salesLedgerWork.getProcess())
                 .schedulingDate(LocalDate.parse(productionReportDto.getSchedulingDate(), DateTimeFormatter.ISO_LOCAL_DATE));
         salesLedgerProductionAccountingMapper.insert(builder.build());
+        // 鐢熶骇鎶ュ伐鎴愬姛 -> 鍏ュ簱
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto();
+        procurementRecordOutAdd.setType(2);
+        procurementRecordOutAdd.setTypeName("鐢熶骇鍏ュ簱");
+        procurementRecordOutAdd.setNickName(loginUser.getNickName());
+        List<Details> details = new ArrayList<>();
+        Details details1 = new Details();
+        details1.setInboundQuantity(productionReportDto.getFinishedNum());
+        details1.setId(Integer.parseInt(salesLedgerWork.getSalesLedgerProductId().toString()));
+        details1.setUnitPrice(productionReportDto.getUnitPrice());
+        details1.setTotalPrice(productionReportDto.getTotalPrice());
+        details.add(details1);
+        procurementRecordOutAdd.setDetails(details);
+        procurementRecordService.add(procurementRecordOutAdd);
+
         return 0;
     }
 
diff --git a/src/main/java/com/ruoyi/project/monitor/service/impl/SysJobServiceImpl.java b/src/main/java/com/ruoyi/project/monitor/service/impl/SysJobServiceImpl.java
index fb2191e..2db6b22 100644
--- a/src/main/java/com/ruoyi/project/monitor/service/impl/SysJobServiceImpl.java
+++ b/src/main/java/com/ruoyi/project/monitor/service/impl/SysJobServiceImpl.java
@@ -37,7 +37,7 @@
     @PostConstruct
     public void init() throws SchedulerException, TaskException
     {
-        scheduler.clear();
+//        scheduler.clear();
         List<SysJob> jobList = jobMapper.selectJobAll();
         for (SysJob job : jobList)
         {
diff --git a/src/main/java/com/ruoyi/project/system/controller/SysUserController.java b/src/main/java/com/ruoyi/project/system/controller/SysUserController.java
index 14618a9..4ddd819 100644
--- a/src/main/java/com/ruoyi/project/system/controller/SysUserController.java
+++ b/src/main/java/com/ruoyi/project/system/controller/SysUserController.java
@@ -5,6 +5,7 @@
 import javax.servlet.http.HttpServletResponse;
 
 import com.ruoyi.project.system.domain.vo.SysUserDeptVo;
+import com.ruoyi.project.system.mapper.SysUserMapper;
 import com.ruoyi.project.system.service.*;
 import org.apache.commons.lang3.ArrayUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -67,6 +68,17 @@
         return getDataTable(list);
     }
 
+    /**
+     * 鑾峰彇鐢ㄦ埛鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:list')")
+    @GetMapping("/listAll")
+    public AjaxResult listAll(SysUser user)
+    {
+        List<SysUser> list = userService.selectUserList(user);
+        return AjaxResult.success(list);
+    }
+
     @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.EXPORT)
     @PreAuthorize("@ss.hasPermi('system:user:export')")
     @PostMapping("/export")
diff --git a/src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java b/src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java
index 550fa51..5b0f56d 100644
--- a/src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java
+++ b/src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java
@@ -49,6 +49,14 @@
     public SysUser selectUserByUserName(String userName);
 
     /**
+     * 閫氳繃鏄电О鏌ヨ鐢ㄦ埛
+     *
+     * @param nickName 鐢ㄦ埛鍚�
+     * @return 鐢ㄦ埛瀵硅薄淇℃伅
+     */
+    public SysUser selectUserByNickName(String nickName);
+
+    /**
      * 閫氳繃鐢ㄦ埛ID鏌ヨ鐢ㄦ埛
      * 
      * @param userId 鐢ㄦ埛ID
diff --git a/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java b/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
index fca4277..1d76fe2 100644
--- a/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
+++ b/src/main/java/com/ruoyi/purchase/controller/PurchaseLedgerController.java
@@ -1,5 +1,6 @@
 package com.ruoyi.purchase.controller;
 
+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.ruoyi.common.utils.poi.ExcelUtil;
@@ -11,14 +12,19 @@
 import com.ruoyi.purchase.dto.PurchaseLedgerDto;
 import com.ruoyi.purchase.pojo.PurchaseLedger;
 import com.ruoyi.purchase.service.IPurchaseLedgerService;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import com.ruoyi.sales.service.ISalesLedgerProductService;
 import com.ruoyi.sales.service.ISalesLedgerService;
+import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.math.BigDecimal;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 閲囪喘鍙拌处Controller
@@ -29,10 +35,12 @@
 @RestController
 @RequestMapping("/purchase/ledger")
 @AllArgsConstructor
+@Api(tags = "111")
 public class PurchaseLedgerController extends BaseController {
     private IPurchaseLedgerService purchaseLedgerService;
 
     private ISalesLedgerService salesLedgerService;
+    private ISalesLedgerProductService salesLedgerProductService;
 
     /**
      * 鏌ヨ閲囪喘鍙拌处鍒楄〃
@@ -77,7 +85,42 @@
     public AjaxResult addOrEditPurchase(@RequestBody PurchaseLedgerDto purchaseLedgerDto) throws IOException {
         return toAjax(purchaseLedgerService.addOrEditPurchase(purchaseLedgerDto));
     }
+    /**
+     * 鏂板閲囪喘妯℃澘
+     */
+    @PostMapping("/addPurchaseTemplate")
+    public AjaxResult addPurchaseTemplate(@RequestBody PurchaseLedgerDto purchaseLedgerDto) throws IOException {
+        return toAjax(purchaseLedgerService.addPurchaseTemplate(purchaseLedgerDto));
+    }
+    /**
+     * 鏌ヨ閲囪喘妯℃澘
+     */
+    @ApiOperation("/2222")
+    @GetMapping("/getPurchaseTemplateList")
+    public AjaxResult getPurchaseTemplateList() {
+        PurchaseLedgerDto purchaseLedgerDto = new PurchaseLedgerDto();
+        purchaseLedgerDto.setApprovalStatus(3);
+        IPage<PurchaseLedgerDto> purchaseLedgerDtoIPage = purchaseLedgerService.selectPurchaseLedgerListPage(new Page(1, -1), purchaseLedgerDto);
+        List<PurchaseLedgerDto> purchaseLedgers = purchaseLedgerDtoIPage.getRecords();
 
+        purchaseLedgers.forEach(purchaseLedgerDto1 -> {
+            LambdaQueryWrapper<SalesLedgerProduct> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(SalesLedgerProduct::getSalesLedgerId, purchaseLedgerDto1.getId())
+                    .eq(SalesLedgerProduct::getType, 2);
+            List<SalesLedgerProduct> list = salesLedgerProductService.list(queryWrapper);
+            if (!list.isEmpty()) {
+                purchaseLedgerDto1.setProductData(list);
+            }
+        });
+        return AjaxResult.success(purchaseLedgers);
+    }
+    /**
+     * 淇敼閲囪喘鍙拌处瀹℃壒鐘舵��
+     */
+    @PostMapping("/updateApprovalStatus")
+    public AjaxResult addOrEditPurchase(@RequestBody PurchaseLedger purchaseLedger){
+        return toAjax(purchaseLedgerService.updateById(purchaseLedger));
+    }
     /**
      * 鏌ヨ閲囪喘鍙拌处鍜屼骇鍝佺埗瀛愬垪琛�
      */
@@ -149,7 +192,15 @@
      */
     @GetMapping("/listPage")
     public AjaxResult listPage(Page page, PurchaseLedgerDto purchaseLedger) {
-         return AjaxResult.success(purchaseLedgerService.selectPurchaseLedgerListPage(page ,purchaseLedger));
+        IPage<PurchaseLedgerDto> purchaseLedgerDtoIPage = purchaseLedgerService.selectPurchaseLedgerListPage(page ,purchaseLedger);
+        //杩囨护鎺塧pprovalStatus=3鐨勮褰�
+        purchaseLedgerDtoIPage.getRecords().removeIf(purchaseLedgerDto -> purchaseLedgerDto.getApprovalStatus() == 3);
+        purchaseLedgerDtoIPage.getRecords().forEach(purchaseLedgerDto -> {
+            if (purchaseLedgerDto.getUnReceiptPaymentAmount().compareTo(BigDecimal.ZERO) == 0) {
+                purchaseLedgerDto.setUnReceiptPaymentAmount(purchaseLedgerDto.getContractAmount());
+            }
+        });
+         return AjaxResult.success(purchaseLedgerDtoIPage);
     }
 
     @ApiOperation("鐢熸垚閲囪喘搴忓垪鍙�")
diff --git a/src/main/java/com/ruoyi/purchase/controller/TicketRegistrationController.java b/src/main/java/com/ruoyi/purchase/controller/TicketRegistrationController.java
index d4fd91b..ecd50bc 100644
--- a/src/main/java/com/ruoyi/purchase/controller/TicketRegistrationController.java
+++ b/src/main/java/com/ruoyi/purchase/controller/TicketRegistrationController.java
@@ -26,6 +26,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.core.parameters.P;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -127,17 +128,22 @@
      */
     @Log(title = "鏉ョエ鐧昏", businessType = BusinessType.INSERT)
     @PostMapping("/addOrUpdateRegistration")
-    public AjaxResult addOrUpdateRegistration(@RequestBody TicketRegistrationDto ticketRegistrationDto) throws IOException {
-        return toAjax(ticketRegistrationService.addOrUpdateRegistration(ticketRegistrationDto));
+    @Transactional(rollbackFor = Exception.class)
+    public AjaxResult addOrUpdateRegistration(@RequestBody List<TicketRegistrationDto> ticketRegistrationDto) throws IOException {
+        if(CollectionUtils.isEmpty(ticketRegistrationDto)) return AjaxResult.error("璇烽�夋嫨瑕佷繚瀛樼殑璁板綍");
+        for (TicketRegistrationDto ticketRegistrationDto1 : ticketRegistrationDto) {
+            ticketRegistrationService.addOrUpdateRegistration(ticketRegistrationDto1);
+        }
+        return toAjax(1);
     }
 
 
-    @GetMapping("/getProductRecordById")
-    public AjaxResult getProductRecordById(Long id) {
-        if (id == null) {
+    @PostMapping("/getProductRecordById")
+    public AjaxResult getProductRecordById(@RequestBody ProductRecordDto productRecordDto) {
+        if (productRecordDto.getId() == null) {
             return AjaxResult.error("鍙傛暟閿欒");
         }
-        return AjaxResult.success(productRecordService.getProductRecordById(id));
+        return AjaxResult.success(productRecordService.getProductRecordById(productRecordDto));
     }
 
     @ApiModelProperty("淇敼鏉ョエ鐧昏")
diff --git a/src/main/java/com/ruoyi/purchase/dto/ProductRecordDto.java b/src/main/java/com/ruoyi/purchase/dto/ProductRecordDto.java
index 25085d2..1b3c691 100644
--- a/src/main/java/com/ruoyi/purchase/dto/ProductRecordDto.java
+++ b/src/main/java/com/ruoyi/purchase/dto/ProductRecordDto.java
@@ -5,6 +5,7 @@
 import com.ruoyi.sales.pojo.CommonFile;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 @Data
@@ -28,12 +29,21 @@
     private String projectName;
     private Long issUerId;
     private String issUer;
+    /**
+     * 鍚堝悓閲戦锛堜骇鍝佸惈绋庢�讳环锛�
+     */
+    private BigDecimal contractAmount = BigDecimal.ZERO;
     //澧炲�肩◣
-    private String invoiceAmount = "0";
-
-    private String invoiceNumber = "0";
-
-    private String unTicketsPrice = "0";
+    /**
+     * 宸叉潵绁ㄩ噾棰濓紙鍙戠エ閲戦锛�
+     */
+    private BigDecimal invoiceTotal = BigDecimal.ZERO;
+    private BigDecimal invoiceAmount = BigDecimal.ZERO;
+    /**
+     * 鍙戠エ鍙�
+     */
+    private String invoiceNumber;
+    private BigDecimal unTicketsPrice = BigDecimal.ZERO;
 
     private List<CommonFile> commonFiles;
 
diff --git a/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java b/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java
index 7d1e9e5..4808080 100644
--- a/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java
+++ b/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerDto.java
@@ -40,6 +40,11 @@
      */
     @Excel(name = "渚涘簲鍟嗗悕绉�")
     private String supplierName;
+     /**
+     * 鏄惁鐧藉悕鍗�
+     */
+    @Excel(name = "鏄惁鐧藉悕鍗�")
+    private Integer isWhite;
 
     /**
      * 褰曞叆浜哄鍚峣d
@@ -180,5 +185,10 @@
 
     @ApiModelProperty(value = "浠樻鏂瑰紡")
     private String paymentMethod;
-
+    @ApiModelProperty("瀹℃壒鐘舵��")
+    private Integer approvalStatus;
+    @ApiModelProperty(value = "妯℃澘鍚嶇О")
+    private String templateName;
+    @ApiModelProperty(value = "瀹℃壒浜篿d")
+    private Integer approverId;
 }
diff --git a/src/main/java/com/ruoyi/purchase/dto/TicketRegistrationDto.java b/src/main/java/com/ruoyi/purchase/dto/TicketRegistrationDto.java
index 33de871..59f1da3 100644
--- a/src/main/java/com/ruoyi/purchase/dto/TicketRegistrationDto.java
+++ b/src/main/java/com/ruoyi/purchase/dto/TicketRegistrationDto.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import com.ruoyi.purchase.pojo.TicketRegistration;
 import com.ruoyi.sales.pojo.CommonFile;
 import com.ruoyi.sales.pojo.SalesLedgerProduct;
@@ -41,6 +42,14 @@
     private String salesContractNo;
 
     /**
+     * 寮�绁ㄦ棩鏈�
+     */
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate entryDate;
+
+    /**
      * 瀹㈡埛鍚嶇О
      */
     private String customerName;
@@ -54,6 +63,7 @@
 
     @JsonFormat(pattern = "yyyy-MM-dd")
     @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @TableField(exist = false)
     private LocalDate enterDate;
 
     /**
diff --git a/src/main/java/com/ruoyi/purchase/mapper/ProductRecordMapper.java b/src/main/java/com/ruoyi/purchase/mapper/ProductRecordMapper.java
index 9d003ba..b4bdea9 100644
--- a/src/main/java/com/ruoyi/purchase/mapper/ProductRecordMapper.java
+++ b/src/main/java/com/ruoyi/purchase/mapper/ProductRecordMapper.java
@@ -8,6 +8,8 @@
 import com.ruoyi.purchase.pojo.ProductRecord;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * 閲囪喘鍙拌处浜у搧寮�绁ㄨ褰昅apper鎺ュ彛
  *
@@ -18,5 +20,5 @@
 
     IPage<ProductRecordDto> productRecordPage(Page page, @Param("c") TicketRegistrationDto ticketRegistrationDto);
 
-    ProductRecordDto getProductRecordById(Long id);
+    List<ProductRecordDto> getProductRecordById(@Param("c") ProductRecordDto productRecordDto);
 }
diff --git a/src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java b/src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java
index 7b7ad72..838976d 100644
--- a/src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java
+++ b/src/main/java/com/ruoyi/purchase/pojo/PurchaseLedger.java
@@ -148,10 +148,14 @@
     @TableField(exist = false)
     private Integer type;
 
-
-
     @ApiModelProperty(value = "浠樻鏂瑰紡")
     private String paymentMethod;
+    @ApiModelProperty("瀹℃壒鐘舵��")
+    private Integer approvalStatus;
 
+    @ApiModelProperty(value = "妯℃澘鍚嶇О")
+    private String templateName;
+    @ApiModelProperty(value = "瀹℃壒浜篿d")
+    private Integer approverId;
 
 }
diff --git a/src/main/java/com/ruoyi/purchase/service/IProductRecordService.java b/src/main/java/com/ruoyi/purchase/service/IProductRecordService.java
index 2fa21ca..3ab3d32 100644
--- a/src/main/java/com/ruoyi/purchase/service/IProductRecordService.java
+++ b/src/main/java/com/ruoyi/purchase/service/IProductRecordService.java
@@ -24,5 +24,5 @@
 
     AjaxResult updateRecord(ProductRecordDto productRecordDto);
 
-    ProductRecordDto getProductRecordById(Long id);
+    ProductRecordDto getProductRecordById(ProductRecordDto productRecordDto);
 }
diff --git a/src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java b/src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java
index 3979810..c0eb379 100644
--- a/src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java
+++ b/src/main/java/com/ruoyi/purchase/service/IPurchaseLedgerService.java
@@ -39,4 +39,6 @@
     List<InvoiceRegistrationProduct> getProductBySalesNo(Long id);
 
     String getPurchaseNo();
+
+    int addPurchaseTemplate(PurchaseLedgerDto purchaseLedgerDto) throws IOException;
 }
diff --git a/src/main/java/com/ruoyi/purchase/service/impl/ProductRecordServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/ProductRecordServiceImpl.java
index 16eef79..d5c67b9 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/ProductRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/ProductRecordServiceImpl.java
@@ -10,8 +10,10 @@
 import com.ruoyi.purchase.dto.TicketRegistrationDto;
 import com.ruoyi.purchase.mapper.ProductRecordMapper;
 import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
+import com.ruoyi.purchase.mapper.TicketRegistrationMapper;
 import com.ruoyi.purchase.pojo.ProductRecord;
 import com.ruoyi.purchase.pojo.PurchaseLedger;
+import com.ruoyi.purchase.pojo.TicketRegistration;
 import com.ruoyi.purchase.service.IProductRecordService;
 import com.ruoyi.sales.mapper.CommonFileMapper;
 import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
@@ -70,6 +72,8 @@
         return productRecordDtoIPage;
     }
 
+    private final TicketRegistrationMapper ticketRegistrationMapper;
+
     @Override
     public AjaxResult updateRecord(ProductRecordDto productRecordDto) {
         SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(productRecordDto.getSaleLedgerProjectId());
@@ -88,13 +92,28 @@
         BeanUtils.copyProperties(productRecordDto,productRecord);
         productRecord.setFutureTicketsAmount(productRecord.getFutureTickets().multiply(productRecord.getTaxInclusiveUnitPrice()));
         productRecordMapper.updateById(productRecord);
-
+        // 淇敼鍙戠エ鍙�
+        TicketRegistration ticketRegistration = ticketRegistrationMapper.selectById(productRecord.getTicketRegistrationId());
+        if(ticketRegistration != null){
+            ticketRegistration.setInvoiceNumber(productRecordDto.getInvoiceNumber());
+            ticketRegistrationMapper.updateById(ticketRegistration);
+        }
         return AjaxResult.success("淇敼鎴愬姛");
     }
 
-    @Override
-    public ProductRecordDto getProductRecordById(Long id) {
-        ProductRecordDto productRecordDto = productRecordMapper.getProductRecordById(id);
-        return productRecordDto;
+     @Override
+    public ProductRecordDto getProductRecordById(ProductRecordDto productRecordDto) {
+        List<ProductRecordDto> productRecordDtoList = productRecordMapper.getProductRecordById(productRecordDto);
+        if(productRecordDtoList != null && productRecordDtoList.size() > 0){
+            ProductRecordDto productRecordDto1 = productRecordDtoList.get(productRecordDtoList.size() - 1);
+            // 杩囨护鍑轰笌浼犲叆鐨� productRecordDto 涓婚敭鐩稿悓鐨勮褰�
+            ProductRecordDto productRecordDto2 = productRecordDtoList.stream().filter(item ->
+                            item.getId().equals(productRecordDto.getId()))
+                    .findFirst().orElse(null);
+            productRecordDto2.setFutureTickets(productRecordDto1.getFutureTickets());
+            productRecordDto2.setFutureTicketsAmount(productRecordDto1.getFutureTicketsAmount());
+            return productRecordDto2;
+        }
+        return null;
     }
 }
diff --git a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
index 97e647f..763c77c 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -27,13 +27,21 @@
 import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.mapper.SysUserMapper;
 import com.ruoyi.purchase.dto.PurchaseLedgerDto;
+import com.ruoyi.purchase.mapper.PaymentRegistrationMapper;
 import com.ruoyi.purchase.mapper.ProductRecordMapper;
 import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
 import com.ruoyi.purchase.mapper.TicketRegistrationMapper;
+import com.ruoyi.purchase.pojo.PaymentRegistration;
 import com.ruoyi.purchase.pojo.ProductRecord;
 import com.ruoyi.purchase.pojo.PurchaseLedger;
 import com.ruoyi.purchase.pojo.TicketRegistration;
 import com.ruoyi.purchase.service.IPurchaseLedgerService;
+import com.ruoyi.quality.mapper.QualityInspectMapper;
+import com.ruoyi.quality.mapper.QualityInspectParamMapper;
+import com.ruoyi.quality.mapper.QualityTestStandardMapper;
+import com.ruoyi.quality.pojo.QualityInspect;
+import com.ruoyi.quality.pojo.QualityInspectParam;
+import com.ruoyi.quality.pojo.QualityTestStandard;
 import com.ruoyi.sales.mapper.*;
 import com.ruoyi.sales.pojo.CommonFile;
 import com.ruoyi.sales.pojo.InvoiceRegistrationProduct;
@@ -94,9 +102,14 @@
 
     private final ProductRecordMapper productRecordMapper;
 
+    private final PaymentRegistrationMapper paymentRegistrationMapper;
+
     private final InvoiceRegistrationProductMapper invoiceRegistrationProductMapper;
 
     private final StringRedisTemplate redisTemplate;
+    private final QualityInspectMapper qualityInspectMapper;
+    private final QualityTestStandardMapper qualityTestStandardMapper;
+    private final QualityInspectParamMapper qualityInspectParamMapper;
 
     @Value("${file.upload-dir}")
     private String uploadDir;
@@ -109,7 +122,49 @@
         }
         return purchaseLedgerMapper.selectList(queryWrapper);
     }
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public int addPurchaseTemplate(PurchaseLedgerDto purchaseLedgerDto)throws IOException {
+        //褰曞叆浜�
+        SysUser sysUser = userMapper.selectUserById(purchaseLedgerDto.getRecorderId());
 
+        SupplierManage supplierManage = supplierManageMapper.selectById(purchaseLedgerDto.getSupplierId());
+        PurchaseLedger purchaseLedger = new PurchaseLedger();
+//        BeanUtils.copyProperties(purchaseLedger,purchaseLedgerDto);
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        if(ObjectUtils.isNotEmpty(loginUser) && null != loginUser.getTenantId()) {
+            purchaseLedger.setTenantId(loginUser.getTenantId());
+        }
+        purchaseLedger.setPaymentMethod(purchaseLedgerDto.getPaymentMethod());
+        purchaseLedger.setRecorderId(purchaseLedgerDto.getRecorderId());
+        purchaseLedger.setSupplierId(purchaseLedgerDto.getSupplierId());
+        purchaseLedger.setTemplateName(purchaseLedgerDto.getTemplateName());
+//        purchaseLedger.setSalesLedgerPId(purchaseLedgerDto.getSalesLedgerId());
+        purchaseLedger.setApprovalStatus(3);
+        purchaseLedger.setSupplierName(supplierManage.getSupplierName());
+        purchaseLedger.setRecorderName(sysUser.getNickName());
+        purchaseLedger.setPhoneNumber(sysUser.getPhonenumber());
+        purchaseLedger.setPurchaseContractNumber(UUID.randomUUID().toString().replaceAll("-", ""));
+        purchaseLedger.setEntryDate(Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant()));
+        int insert = purchaseLedgerMapper.insert(purchaseLedger);
+
+        LambdaQueryWrapper<PurchaseLedger> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(PurchaseLedger::getSupplierName, purchaseLedger.getSupplierName())
+                .eq(PurchaseLedger::getPurchaseContractNumber, purchaseLedger.getPurchaseContractNumber())
+                .eq(PurchaseLedger::getApprovalStatus,3);
+        PurchaseLedger purchaseLedger1 = purchaseLedgerMapper.selectOne(queryWrapper);
+
+        if(ObjectUtils.isNotEmpty(purchaseLedgerDto.getProductData())) {
+            // 4. 澶勭悊瀛愯〃鏁版嵁
+            List<SalesLedgerProduct> salesLedgerProductList = purchaseLedgerDto.getProductData();
+            salesLedgerProductList.forEach(salesLedgerProduct -> {
+                salesLedgerProduct.setSalesLedgerId(purchaseLedger1.getId());
+                salesLedgerProduct.setType(2);
+            });
+            salesLedgerProductList.forEach(salesLedgerProductMapper::insert);
+        }
+        return insert;
+    }
     @Override
     @Transactional(rollbackFor = Exception.class)
     public int addOrEditPurchase(PurchaseLedgerDto purchaseLedgerDto) throws IOException {
@@ -131,10 +186,11 @@
         PurchaseLedger purchaseLedger = new PurchaseLedger();
         BeanUtils.copyProperties(purchaseLedgerDto, purchaseLedger);
         LoginUser loginUser = SecurityUtils.getLoginUser();
-        if(ObjectUtils.isNotEmpty(loginUser) && null != loginUser.getTenantId()) {
+        if (ObjectUtils.isNotEmpty(loginUser) && null != loginUser.getTenantId()) {
             purchaseLedger.setTenantId(loginUser.getTenantId());
         }
-        purchaseLedger.setSalesContractNo(ObjectUtils.isNotEmpty(salesLedger) ? salesLedger.getSalesContractNo() : null);
+        purchaseLedger.setSalesContractNo(ObjectUtils.isNotEmpty(salesLedger) ? salesLedger.getSalesContractNo() : "");
+        purchaseLedger.setSalesLedgerId(ObjectUtils.isNotEmpty(salesLedger) ? salesLedger.getId() : -1);
         purchaseLedger.setSupplierName(supplierManage.getSupplierName());
         purchaseLedger.setRecorderId(purchaseLedgerDto.getRecorderId());
         purchaseLedger.setRecorderName(sysUser.getNickName());
@@ -181,7 +237,13 @@
         if (productList != null && !productList.isEmpty()) {
             handleSalesLedgerProducts(purchaseLedger.getId(), productList, purchaseLedgerDto.getType());
         }
-
+        //鏂板鍘熸潗鏂欐楠�
+        for (SalesLedgerProduct saleProduct : productList) {
+            //鏄惁鎺ㄩ�佽川妫�锛屽鏋渢rue灏辨坊鍔�
+            if (saleProduct.getIsChecked()) {
+                addQualityInspect(purchaseLedger, saleProduct);
+            }
+        }
         // 5. 杩佺Щ涓存椂鏂囦欢鍒版寮忕洰褰�
         if (purchaseLedgerDto.getTempFileIds() != null && !purchaseLedgerDto.getTempFileIds().isEmpty()) {
             migrateTempFilesToFormal(purchaseLedger.getId(), purchaseLedgerDto.getTempFileIds());
@@ -189,6 +251,33 @@
 
         return 1;
     }
+
+    private void addQualityInspect(PurchaseLedger purchaseLedger, SalesLedgerProduct saleProduct) {
+        QualityInspect qualityInspect = new QualityInspect();
+        qualityInspect.setInspectType(0);
+        qualityInspect.setSupplier(purchaseLedger.getSupplierName());
+        qualityInspect.setPurchaseLedgerId(purchaseLedger.getId());
+        qualityInspect.setProductId(saleProduct.getId());
+        qualityInspect.setProductName(saleProduct.getProductCategory());
+        qualityInspect.setModel(saleProduct.getSpecificationModel());
+        qualityInspect.setProductModelId(saleProduct.getProductModelId());
+        qualityInspect.setUnit(saleProduct.getUnit());
+        qualityInspect.setQuantity(saleProduct.getQuantity());
+        qualityInspectMapper.insert(qualityInspect);
+        QualityTestStandard qualityTestStandard = new QualityTestStandard();
+        qualityTestStandard.setProductId(saleProduct.getProductId());
+        List<QualityTestStandard> qualityTestStandards = qualityTestStandardMapper.qualityTestStandardList(qualityTestStandard);
+        for (QualityTestStandard qualityTestStandardDB : qualityTestStandards) {
+            QualityInspectParam qualityInspectParam = new QualityInspectParam();
+            qualityInspectParam.setInspectId(qualityInspect.getId());
+            qualityInspectParam.setParameterItem(qualityTestStandardDB.getParameterItem());
+            qualityInspectParam.setUnit(qualityTestStandardDB.getUnit());
+            qualityInspectParam.setStandardValue(qualityTestStandardDB.getStandardValue());
+            qualityInspectParam.setControlValue(qualityTestStandardDB.getControlValue());
+            qualityInspectParamMapper.insert(qualityInspectParam);
+        }
+    }
+
 
     private void handleSalesLedgerProducts(Long salesLedgerId, List<SalesLedgerProduct> products, Integer type) {
         if (products == null || products.isEmpty()) {
@@ -257,6 +346,8 @@
 
                 LocalDateTime localDateTime = entryDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
                 salesLedgerProduct.setRegisterDate(localDateTime);
+                salesLedgerProduct.setFutureTickets(salesLedgerProduct.getQuantity());
+                salesLedgerProduct.setFutureTicketsAmount(salesLedgerProduct.getTaxInclusiveTotalPrice());
                 salesLedgerProductMapper.insert(salesLedgerProduct);
             }
         }
@@ -349,6 +440,7 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public int deletePurchaseLedgerByIds(Long[] ids) {
         if (ids == null || ids.length == 0) {
            throw new BaseException("璇烽�変腑鑷冲皯涓�鏉℃暟鎹�");
@@ -360,12 +452,37 @@
         salesLedgerProductMapper.delete(queryWrapper);
         // 鎵归噺鍒犻櫎鍏宠仈鐨勯噰璐彴璐︾殑鏉ョエ鐧昏
         LambdaQueryWrapper<TicketRegistration> ticketRegistrationLambdaQueryWrapper = new LambdaQueryWrapper<>();
-        ticketRegistrationLambdaQueryWrapper.in(TicketRegistration::getSalesLedgerId,ids);
+        ticketRegistrationLambdaQueryWrapper.in(TicketRegistration::getPurchaseLedgerId,ids);
         ticketRegistrationMapper.delete(ticketRegistrationLambdaQueryWrapper);
         // 鎵归噺鍒犻櫎鍏宠仈鐨勯噰璐彴璐︾殑鏉ョエ鐧昏璁板綍
         LambdaQueryWrapper<ProductRecord> productRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
         productRecordLambdaQueryWrapper.in(ProductRecord::getPurchaseLedgerId,ids);
         productRecordMapper.delete(productRecordLambdaQueryWrapper);
+        // 鎵归噺鍒犻櫎浠樻鐧昏
+        LambdaQueryWrapper<PaymentRegistration> paymentRegistrationLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        paymentRegistrationLambdaQueryWrapper.in(PaymentRegistration::getPurchaseLedgerId, ids);
+        paymentRegistrationMapper.delete(paymentRegistrationLambdaQueryWrapper);
+        //鎵归噺鍒犻櫎妫�楠屾爣鍑�
+        LambdaQueryWrapper<QualityInspect> materialInspectLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        materialInspectLambdaQueryWrapper.in(QualityInspect::getPurchaseLedgerId, ids);
+        List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(materialInspectLambdaQueryWrapper);
+        qualityInspects.stream().forEach(qualityInspect -> {
+            if (ObjectUtils.isNotEmpty(qualityInspect.getInspectState())&&qualityInspect.getInspectState().equals(1)) {
+                throw new BaseException("宸叉彁浜ょ殑妫�楠屽崟涓嶈兘鍒犻櫎");
+            }
+        });
+        List<Long> inspectIds = qualityInspects.stream()
+                .map(QualityInspect::getId)
+                .collect(Collectors.toList());
+
+        if (inspectIds.size() > 0) {
+            LambdaQueryWrapper<QualityInspectParam> qualityStandardLambdaQueryWrapper = new LambdaQueryWrapper<>();
+            qualityStandardLambdaQueryWrapper.in(QualityInspectParam::getInspectId, inspectIds);
+            qualityInspectParamMapper.delete(qualityStandardLambdaQueryWrapper);
+        }
+
+        //鎵归噺鍒犻櫎鍘熸潗鏂欐楠屾暟鎹�
+        qualityInspectMapper.delete(materialInspectLambdaQueryWrapper);
         // 鎵归噺鍒犻櫎閲囪喘鍙拌处
         return purchaseLedgerMapper.deleteBatchIds(Arrays.asList(ids));
     }
@@ -386,7 +503,8 @@
 
         // 3.鏌ヨ涓婁紶鏂囦欢
         LambdaQueryWrapper<CommonFile> salesLedgerFileWrapper = new LambdaQueryWrapper<>();
-        salesLedgerFileWrapper.eq(CommonFile::getCommonId, purchaseLedger.getId());
+        salesLedgerFileWrapper.eq(CommonFile::getCommonId, purchaseLedger.getId())
+                .eq(CommonFile::getType,FileNameType.PURCHASE.getValue());
         List<CommonFile> salesLedgerFiles = commonFileMapper.selectList(salesLedgerFileWrapper);
 
         // 4. 杞崲 DTO
@@ -491,8 +609,8 @@
     @Override
     public List<InvoiceRegistrationProduct> getProductBySalesNo(Long id) {
         List<InvoiceRegistrationProduct> invoiceRegistrationProducts = invoiceRegistrationProductMapper.selectList(new LambdaQueryWrapper<InvoiceRegistrationProduct>()
-                        .select(InvoiceRegistrationProduct::getId, InvoiceRegistrationProduct::getProductCategory, InvoiceRegistrationProduct::getSpecificationModel,
-                                InvoiceRegistrationProduct::getUnit, InvoiceRegistrationProduct::getQuantity)
+                .select(InvoiceRegistrationProduct::getId, InvoiceRegistrationProduct::getProductCategory, InvoiceRegistrationProduct::getSpecificationModel,
+                        InvoiceRegistrationProduct::getUnit, InvoiceRegistrationProduct::getQuantity)
                 .eq(InvoiceRegistrationProduct::getSalesLedgerId, id));
         if (invoiceRegistrationProducts.isEmpty()) {
             return new ArrayList<>();
diff --git a/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java
index 119664e..06c5b5a 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/TicketRegistrationServiceImpl.java
@@ -136,7 +136,7 @@
         BeanUtils.copyProperties(ticketRegistrationDto, ticketRegistration);
         ticketRegistration.setPurchaseContractNumber(purchaseLedger.getPurchaseContractNumber());
         ticketRegistration.setTenantId(purchaseLedger.getTenantId());
-        ticketRegistration.setIssueDate(ticketRegistrationDto.getIssueDate());
+        ticketRegistration.setIssueDate(ticketRegistrationDto.getEntryDate());
         ticketRegistration.setContractAmount(purchaseLedger.getContractAmount());
         ticketRegistration.setSalesLedgerId(purchaseLedger.getSalesLedgerId());
         ticketRegistration.setEnterDate(ticketRegistrationDto.getEnterDate());
@@ -166,11 +166,11 @@
                     productRecord.setSaleLedgerProjectId(salesLedgerProduct.getId());
                     productRecord.setId(null);
                     productRecord.setType("2");
-                     insert = productRecordMapper.insert(productRecord);
+                    insert += productRecordMapper.insert(productRecord);
                 }
-                if (insert <= 0) {
-                    throw new RuntimeException("浜у搧寮�绁ㄦ暟閮戒负0锛岃妫�鏌�");
-                }
+            }
+            if (insert <= 0) {
+                throw new RuntimeException("浜у搧寮�绁ㄦ暟閮戒负0锛岃妫�鏌�");
             }
         }
         // 杩佺Щ涓存椂鏂囦欢鍒版寮忕洰褰�
@@ -223,13 +223,7 @@
             Path formalFilePath = formalDirPath.resolve(formalFilename);
 
             try {
-                // 鎵ц鏂囦欢杩佺Щ锛堜娇鐢ㄥ師瀛愭搷浣滅‘淇濆畨鍏ㄦ�э級
-//                Files.move(
-//                        Paths.get(tempFile.getTempPath()),
-//                        formalFilePath,
-//                        StandardCopyOption.REPLACE_EXISTING,
-//                        StandardCopyOption.ATOMIC_MOVE
-//                );
+
                 // 鍘熷瓙绉诲姩澶辫触锛屼娇鐢ㄥ鍒�+鍒犻櫎
                 Files.copy(Paths.get(tempFile.getTempPath()), formalFilePath, StandardCopyOption.REPLACE_EXISTING);
                 Files.deleteIfExists(Paths.get(tempFile.getTempPath()));
@@ -273,7 +267,7 @@
             // 灏忎簬绛変簬0鍒犻櫎 锛屽ぇ浜�0淇敼
             if(subtract.compareTo(BigDecimal.ZERO) <= 0){
                 ticketRegistrationMapper.deleteById(ticketRegistrations.get(0));
-                // 鍒犻櫎浠樻娴佹按
+                // 鍒犻櫎浠樻娴佹按璁板綍
                 paymentRegistrationMapper.delete(new LambdaQueryWrapper<PaymentRegistration>().eq(PaymentRegistration::getTicketRegistrationId, ticketRegistrations.get(0).getId()));
             }else if(subtract.compareTo(BigDecimal.ZERO) > 0){
                 ticketRegistrations.get(0).setInvoiceAmount(subtract);
diff --git a/src/main/java/com/ruoyi/quality/mapper/QualityInspectMapper.java b/src/main/java/com/ruoyi/quality/mapper/QualityInspectMapper.java
index 9d96578..fdc57da 100644
--- a/src/main/java/com/ruoyi/quality/mapper/QualityInspectMapper.java
+++ b/src/main/java/com/ruoyi/quality/mapper/QualityInspectMapper.java
@@ -17,4 +17,9 @@
     IPage<QualityInspect> qualityInspectListPage(Page page, @Param("qualityInspect") QualityInspect qualityInspect);
 
     List<QualityInspect> qualityInspectExport(@Param("qualityInspect") QualityInspect qualityInspect);
+
+    /**
+     * 鏍规嵁鐢熶骇涓昏〃ID鎵归噺鍒犻櫎杩囩▼妫�楠�
+     */
+    int deleteByProductMainIds(@Param("productMainIds") List<Long> productMainIds);
 }
diff --git a/src/main/java/com/ruoyi/quality/pojo/QualityInspect.java b/src/main/java/com/ruoyi/quality/pojo/QualityInspect.java
index e1b2e6a..179caca 100644
--- a/src/main/java/com/ruoyi/quality/pojo/QualityInspect.java
+++ b/src/main/java/com/ruoyi/quality/pojo/QualityInspect.java
@@ -138,5 +138,15 @@
      */
     private Integer inspectState;
 
+    private Long purchaseLedgerId;
+
+    /**
+     * 鎶ュ伐id
+     */
+    private Long productMainId;
+
+    private Long productModelId;
+    //涓嶅悎鏍肩幇璞�
+    private String defectivePhenomena;
 
 }
diff --git a/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java b/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
index f29bedf..f39a456 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
@@ -1,6 +1,7 @@
 package com.ruoyi.quality.service.impl;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -11,7 +12,13 @@
 import com.deepoove.poi.config.Configure;
 import com.ruoyi.common.exception.base.BaseException;
 import com.ruoyi.common.utils.HackLoopTableRenderPolicy;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.security.LoginUser;
+import com.ruoyi.procurementrecord.dto.Details;
+import com.ruoyi.procurementrecord.dto.ProcurementAddDto;
+import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
+import com.ruoyi.procurementrecord.service.ProcurementRecordService;
 import com.ruoyi.quality.dto.QualityInspectDto;
 import com.ruoyi.quality.mapper.QualityInspectMapper;
 import com.ruoyi.quality.mapper.QualityInspectParamMapper;
@@ -23,6 +30,8 @@
 import com.ruoyi.quality.pojo.QualityUnqualified;
 import com.ruoyi.quality.service.IQualityInspectParamService;
 import com.ruoyi.quality.service.IQualityInspectService;
+import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
 import com.ruoyi.staff.mapper.StaffJoinLeaveRecordMapper;
 import com.ruoyi.staff.mapper.StaffOnJobMapper;
 import com.ruoyi.staff.pojo.StaffJoinLeaveRecord;
@@ -36,7 +45,10 @@
 import javax.servlet.http.HttpServletResponse;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.math.BigDecimal;
 import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -53,6 +65,10 @@
     private QualityTestStandardMapper qualityTestStandardMapper;
 
     private QualityUnqualifiedMapper qualityUnqualifiedMapper;
+
+    private SalesLedgerProductMapper salesLedgerProductMapper;
+
+    private ProcurementRecordService procurementRecordService;
 
     @Override
     public int add(QualityInspectDto qualityInspectDto) {
@@ -91,6 +107,80 @@
             qualityUnqualified.setDefectivePhenomena(text+"杩欎簺鎸囨爣涓瓨鍦ㄤ笉鍚堟牸");//涓嶅悎鏍肩幇璞�
             qualityUnqualifiedMapper.insert(qualityUnqualified);
         }
+
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        if (qualityInspect.getInspectType() == 0) {
+            if ("鍚堟牸".equals(qualityInspect.getCheckResult())) {
+                ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto();
+                procurementRecordOutAdd.setType(1);
+                procurementRecordOutAdd.setTypeName("閲囪喘鍏ュ簱");
+                procurementRecordOutAdd.setNickName(loginUser.getNickName());
+                procurementRecordOutAdd.setPurchaseLedgerId(Math.toIntExact(qualityInspect.getPurchaseLedgerId()));
+                if (qualityInspect.getPurchaseLedgerId() == null) {
+                    throw new BaseException("璇烽�夋嫨閲囪喘鍗�");
+                }
+                SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(qualityInspect.getProductId());
+
+                ArrayList<Details> detailss = new ArrayList<>();
+                Details details = new Details();
+                details.setId(Math.toIntExact(salesLedgerProduct.getId()));
+                details.setInboundQuantity(qualityInspect.getQuantity());
+                details.setWarnNum(salesLedgerProduct.getWarnNum());
+                details.setUnitPrice(salesLedgerProduct.getTaxInclusiveUnitPrice());
+                details.setTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice());
+                details.setProductModelId(qualityInspect.getProductModelId());
+                detailss.add( details);
+                procurementRecordOutAdd.setDetails(detailss);
+                procurementRecordService.add(procurementRecordOutAdd);
+            }
+        }else if (qualityInspect.getInspectType() == 1) {
+            //鏌ヨUnitPrice/TotalPrice
+            ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto();
+            procurementRecordOutAdd.setType(2);
+            procurementRecordOutAdd.setTypeName("鐢熶骇鍏ュ簱");
+            procurementRecordOutAdd.setNickName(loginUser.getNickName());
+            List<Details> details = new ArrayList<>();
+            Details details1 = new Details();
+            details1.setInboundQuantity(qualityInspect.getQuantity());
+            details1.setProductModelId(qualityInspect.getProductModelId());
+            procurementRecordOutAdd.setDetails(details);
+
+            ProcurementRecordStorage.ProcurementRecordStorageBuilder procurementRecordBuilder = ProcurementRecordStorage.builder()
+                    .salesLedgerProductId(0)
+                    .inboundBatches( "鐢熶骇鍗婃垚鍝佸叆搴�")
+                    .inboundNum(details1.getInboundQuantity())
+                    .type(2)
+                    .warnNum(new BigDecimal(0))
+                    .unitPrice(new BigDecimal(0))
+                    .totalPrice(new BigDecimal(0))
+                    .createTime(LocalDateTime.now())
+                    .createUser(loginUser.getUserId())
+                    .updateTime(LocalDateTime.now())
+                    .updateUser(loginUser.getUserId())
+                    .createBy(procurementRecordOutAdd.getNickName())
+                    .productModelId(details1.getProductModelId());
+            procurementRecordService.save(procurementRecordBuilder.build());
+
+
+
+        }else if (qualityInspect.getInspectType() == 2) {
+            //鏌ヨUnitPrice/TotalPrice
+            SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectSalesLedgerProductByMainId(qualityInspect.getProductMainId());
+            ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto();
+            procurementRecordOutAdd.setType(2);
+            procurementRecordOutAdd.setTypeName("鐢熶骇鍏ュ簱");
+            procurementRecordOutAdd.setNickName(loginUser.getNickName());
+            List<Details> details = new ArrayList<>();
+            Details details1 = new Details();
+            details1.setInboundQuantity(qualityInspect.getQuantity());
+            details1.setId(Math.toIntExact(salesLedgerProduct.getId()));
+            details1.setUnitPrice(salesLedgerProduct.getTaxInclusiveUnitPrice());
+            details1.setTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice());
+            details1.setProductModelId(salesLedgerProduct.getProductModelId());
+            details.add(details1);
+            procurementRecordOutAdd.setDetails(details);
+            procurementRecordService.add(procurementRecordOutAdd);
+        }
         qualityInspect.setInspectState(1);//宸叉彁浜�
         return qualityInspectMapper.updateById(qualityInspect);
     }
diff --git a/src/main/java/com/ruoyi/sales/controller/InvoiceLedgerController.java b/src/main/java/com/ruoyi/sales/controller/InvoiceLedgerController.java
index fc19d5d..b7ce1c1 100644
--- a/src/main/java/com/ruoyi/sales/controller/InvoiceLedgerController.java
+++ b/src/main/java/com/ruoyi/sales/controller/InvoiceLedgerController.java
@@ -1,12 +1,16 @@
 package com.ruoyi.sales.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.sales.dto.InvoiceLedgerDto;
 import com.ruoyi.sales.dto.InvoiceRegistrationProductDto;
+import com.ruoyi.sales.mapper.InvoiceLedgerFileMapper;
 import com.ruoyi.sales.mapper.InvoiceRegistrationProductMapper;
 import com.ruoyi.sales.pojo.InvoiceRegistrationProduct;
 import com.ruoyi.sales.service.InvoiceLedgerService;
+import io.jsonwebtoken.lang.Collections;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
@@ -25,6 +29,9 @@
 
     @Autowired
     private InvoiceRegistrationProductMapper invoiceRegistrationProductMapper;
+
+    @Autowired
+    private InvoiceLedgerFileMapper invoiceLedgerFileMapper;
 
     /**
      * 寮�绁ㄥ彴璐︽柊澧�
@@ -70,6 +77,19 @@
     }
 
     /**
+     * 寮�绁ㄥ彴璐︽枃浠跺垹闄�
+     */
+    @DeleteMapping("/delFile")
+    @Log(title = "寮�绁ㄥ彴璐�", businessType = BusinessType.DELETE)
+    public AjaxResult invoiceLedgerDelFile(@RequestBody List<Integer> ids) {
+        if(Collections.isEmpty(ids)) return AjaxResult.error("璇烽�夋嫨瑕佸垹闄ょ殑鏂囦欢");
+        invoiceLedgerFileMapper.deleteBatchIds(ids);
+        return AjaxResult.success();
+    }
+
+
+
+    /**
      * 寮�绁ㄥ彴璐︽枃浠朵笂浼�
      * @param file
      * @return
diff --git a/src/main/java/com/ruoyi/sales/controller/InvoiceRegistrationController.java b/src/main/java/com/ruoyi/sales/controller/InvoiceRegistrationController.java
index 71724b0..5606148 100644
--- a/src/main/java/com/ruoyi/sales/controller/InvoiceRegistrationController.java
+++ b/src/main/java/com/ruoyi/sales/controller/InvoiceRegistrationController.java
@@ -1,12 +1,15 @@
 package com.ruoyi.sales.controller;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
 import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.sales.dto.InvoiceRegistrationDto;
 import com.ruoyi.sales.dto.InvoiceRegistrationProductDto;
 import com.ruoyi.sales.dto.SalesLedgerDto;
 import com.ruoyi.sales.service.InvoiceRegistrationService;
+import io.jsonwebtoken.lang.Collections;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
@@ -25,8 +28,14 @@
      * @return
      */
     @PostMapping("/save")
-    public AjaxResult invoiceRegistrationSave(@RequestBody SalesLedgerDto salesLedgerDto) {
-        invoiceRegistrationService.invoiceRegistrationSave(salesLedgerDto);
+    @Log(title = "寮�绁ㄧ櫥璁�", businessType = com.ruoyi.framework.aspectj.lang.enums.BusinessType.INSERT)
+    @Transactional(rollbackFor = Exception.class)
+    public AjaxResult invoiceRegistrationSave(@RequestBody List<SalesLedgerDto> salesLedgerDto) {
+        if(Collections.isEmpty(salesLedgerDto)) return AjaxResult.error("璇烽�夋嫨瑕佷繚瀛樼殑璁板綍");
+        salesLedgerDto.forEach(item ->{
+            invoiceRegistrationService.invoiceRegistrationSave(item);
+        });
+
         return AjaxResult.success();
     }
 
diff --git a/src/main/java/com/ruoyi/sales/controller/ReceiptPaymentController.java b/src/main/java/com/ruoyi/sales/controller/ReceiptPaymentController.java
index 20eb945..6411be5 100644
--- a/src/main/java/com/ruoyi/sales/controller/ReceiptPaymentController.java
+++ b/src/main/java/com/ruoyi/sales/controller/ReceiptPaymentController.java
@@ -183,6 +183,7 @@
             BeanUtils.copyProperties(receiptPaymentRecordDto, receiptPaymentRecordDto1);
             receiptPaymentRecordDto1.setInvoiceDate(Date.from(receiptPaymentRecordDto.getCreateTime().atZone(DEFAULT_ZONE_ID).toInstant()));
             receiptPaymentRecordDto1.setReceiptPaymentAmountTotal(receiptPaymentRecordDto.getReceiptPaymentAmount());
+            BeanUtils.copyProperties(receiptPaymentRecordDto, receiptPaymentRecordDto1);
             receiptPaymentRecordDtos.add(receiptPaymentRecordDto1);
         });
         util.exportExcel(response, receiptPaymentRecordDtos, "瀵煎嚭鍥炴娴佹按鍒楄〃");
diff --git a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java b/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
index d2f7a36..da0ba14 100644
--- a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
+++ b/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
@@ -206,7 +206,7 @@
         List<Long> salesLedgerIds = iPage.getRecords().stream().map(SalesLedger::getId).collect(Collectors.toList());
         List<InvoiceLedgerDto> invoiceLedgerDtoList = invoiceLedgerMapper.invoicedTotal(salesLedgerIds);
         if(CollectionUtils.isEmpty(invoiceLedgerDtoList)){
-            invoiceLedgerDtoList = new ArrayList<>();
+            return iPage;
         }
         // 璁$畻鍥炴閲戦锛屽緟鍥炴閲戦
         List<InvoiceRegistrationProduct> invoiceRegistrationProducts = invoiceRegistrationProductMapper.selectList(new LambdaQueryWrapper<InvoiceRegistrationProduct>()
@@ -264,9 +264,10 @@
         if (ObjectUtils.isNotEmpty(salesLedgerDto.getStatus())) {
             if (salesLedgerDto.getStatus()) {
                 iPage.getRecords().removeIf(salesLedger -> Objects.equals(salesLedger.getNoInvoiceAmountTotal(), new BigDecimal("0.00")));
+                iPage.setTotal(iPage.getRecords().size());
             }
         }
-        iPage.setTotal(iPage.getRecords().size());
+
         return iPage;
     }
 }
diff --git a/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java b/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
index 4c38a59..0cd59f9 100644
--- a/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
+++ b/src/main/java/com/ruoyi/sales/controller/SalesLedgerProductController.java
@@ -2,7 +2,13 @@
 
 import javax.servlet.http.HttpServletResponse;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.procurementrecord.dto.ProcurementPageDto;
+import com.ruoyi.procurementrecord.dto.ProcurementPageDtoCopy;
+import com.ruoyi.procurementrecord.service.ProcurementRecordService;
+import com.ruoyi.procurementrecord.utils.StockUtils;
 import com.ruoyi.sales.pojo.SalesLedgerProduct;
 import com.ruoyi.sales.service.ISalesLedgerProductService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -19,6 +25,7 @@
 import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.framework.web.page.TableDataInfo;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -33,7 +40,10 @@
 {
     @Autowired
     private ISalesLedgerProductService salesLedgerProductService;
-
+    @Autowired
+    private ProcurementRecordService procurementRecordService;
+    @Autowired
+    private StockUtils stockUtils;
     /**
      * 鏌ヨ浜у搧淇℃伅鍒楄〃
      */
@@ -41,6 +51,26 @@
     public AjaxResult list(SalesLedgerProduct salesLedgerProduct)
     {
         List<SalesLedgerProduct> list = salesLedgerProductService.selectSalesLedgerProductList(salesLedgerProduct);
+        list.forEach(item -> {
+                if (item.getFutureTickets().compareTo(BigDecimal.ZERO) == 0) {
+                    item.setFutureTickets(item.getQuantity());
+                }
+            if (item.getFutureTicketsAmount().compareTo(BigDecimal.ZERO) == 0) {
+                item.setFutureTicketsAmount(item.getTaxInclusiveTotalPrice());
+            }
+//            ProcurementPageDto procurementDto = new ProcurementPageDto();
+//            procurementDto.setSalesLedgerProductId(item.getId());
+//            procurementDto.setProductCategory(item.getProductCategory());
+//            IPage<ProcurementPageDtoCopy> result = procurementRecordService.listPageCopyByProduction(new Page<>(1,-1), procurementDto);
+            BigDecimal stockQuantity = stockUtils.getStockQuantity(item.getProductModelId()).get("stockQuantity");
+            if(stockQuantity != null) {
+//                ProcurementPageDtoCopy procurementDtoCopy = result.getRecords().get(0);
+                if (item.getQuantity().compareTo(stockQuantity) >= 0 && item.getApproveStatus() == 0) {
+                    item.setApproveStatus(1);
+                    salesLedgerProductService.addOrUpdateSalesLedgerProduct(item);
+                }
+            }
+        });
         return AjaxResult.success(list);
     }
 
diff --git a/src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java b/src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java
new file mode 100644
index 0000000..a34f809
--- /dev/null
+++ b/src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java
@@ -0,0 +1,129 @@
+package com.ruoyi.sales.controller;
+
+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.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.web.controller.BaseController;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.procurementrecord.dto.ProcurementAddDto;
+import com.ruoyi.procurementrecord.dto.ProcurementRecordOutAdd;
+import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut;
+import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
+import com.ruoyi.procurementrecord.service.ProcurementRecordOutService;
+import com.ruoyi.procurementrecord.service.ProcurementRecordService;
+import com.ruoyi.sales.mapper.ShipmentApprovalMapper;
+import com.ruoyi.sales.mapper.ShippingInfoMapper;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import com.ruoyi.sales.pojo.ShipmentApproval;
+import com.ruoyi.sales.pojo.ShippingInfo;
+import com.ruoyi.sales.service.ISalesLedgerProductService;
+import com.ruoyi.sales.service.ShipmentApprovalService;
+import com.ruoyi.sales.service.ShippingInfoService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@RestController
+@RequestMapping("/shipmentApproval")
+@Api(tags = "鍙戣揣瀹℃壒绠$悊")
+public class ShipmentApprovalController extends BaseController {
+
+    @Autowired
+    private ShipmentApprovalService shipmentApprovalService;
+    @Autowired
+    private ShipmentApprovalMapper shipmentApprovalMapper;
+
+    @Autowired
+    private ISalesLedgerProductService salesLedgerProductService;
+    @Autowired
+    private ProcurementRecordOutService procurementRecordOutService;
+    @Autowired
+    private ProcurementRecordService procurementRecordStorageService;
+
+    @GetMapping("/listPage")
+    @ApiOperation("鍙戣揣瀹℃壒鍒楄〃")
+    public AjaxResult listPage(Page page, ShipmentApproval req) {
+        IPage<ShipmentApproval> listPage = shipmentApprovalService.listPage(page,req);
+        return AjaxResult.success(listPage);
+    }
+
+    @PostMapping("/update")
+    @ApiOperation("鍙戣揣瀹℃壒,鏇存柊鍙戣揣瀹℃壒鐘舵��")
+    @Transactional(rollbackFor = Exception.class)
+    public AjaxResult update(@RequestBody ShipmentApproval req) {
+
+        //  鏌ヨ鍙戣揣瀹℃壒
+        ShipmentApproval shipmentApproval = shipmentApprovalMapper.selectById(req.getId());
+        if (shipmentApproval == null) {
+            return AjaxResult.error("鍙戣揣瀹℃壒涓嶅瓨鍦�");
+        }
+
+        //  鏇存柊鍙戣揣瀹℃壒鐘舵��
+        shipmentApproval.setApproveStatus(req.getApproveStatus());
+        boolean update = shipmentApprovalService.updateById(shipmentApproval);
+        if (!update) {
+            //  浜嬪姟鍥炴粴
+            throw new ServiceException("鍙戣揣瀹℃壒鏇存柊澶辫触");
+        }
+        //  鏌ヨ鍏宠仈鐨勯攢鍞彴璐︿骇鍝�
+        SalesLedgerProduct salesLedgerProduct = salesLedgerProductService.getById(shipmentApproval.getSalesLedgerProductId());
+        if (salesLedgerProduct == null) {
+            //  鎶涘紓甯镐簨鍔″洖婊�
+            throw new ServiceException("閿�鍞彴璐︿笉瀛樺湪锛屽鎵瑰洖婊�");
+        }
+
+        //  鍚屾鏇存柊閿�鍞彴璐︿骇鍝佺殑瀹℃壒鐘舵��
+        salesLedgerProduct.setApproveStatus(req.getApproveStatus());
+        salesLedgerProductService.updateById(salesLedgerProduct);
+
+        //  瀹℃壒閫氳繃
+        if (req.getApproveStatus() == 3) {
+            // 鏌ヨ閲囪喘鍏ュ簱璁板綍
+            LambdaQueryWrapper<ProcurementRecordStorage> lambdaQueryWrapper = new LambdaQueryWrapper<ProcurementRecordStorage>()
+                    .eq(ProcurementRecordStorage::getSalesLedgerProductId, req.getSalesLedgerProductId());
+            ProcurementRecordStorage procurementRecordStorage = procurementRecordStorageService.getOne(lambdaQueryWrapper);
+
+            if (procurementRecordStorage == null) {
+                // 淇濊瘉鍓嶉潰鐨勪慨鏀瑰叏閮ㄥ洖婊�
+                throw new ServiceException("閲囪喘璁板綍涓嶅瓨鍦紝瀹℃壒鍥炴粴");
+            }
+
+            //  鐢熸垚鍑哄簱璁板綍
+            ProcurementRecordOutAdd procurementRecordOutAdd = new ProcurementRecordOutAdd();
+            procurementRecordOutAdd.setId(procurementRecordStorage.getId());
+            procurementRecordOutAdd.setSalesLedgerProductId(Math.toIntExact(salesLedgerProduct.getId()));
+            procurementRecordOutAdd.setType(2);
+            procurementRecordOutAdd.setUserId(Math.toIntExact(getUserId()));
+            procurementRecordOutAdd.setQuantity(salesLedgerProduct.getQuantity().toPlainString());
+            procurementRecordOutAdd.setTime(LocalDate.now().toString());
+
+            procurementRecordOutService.stockout(procurementRecordOutAdd);
+        }
+
+        return AjaxResult.success();
+    }
+
+
+
+    /**
+     * 瀵煎嚭鍙戣揣淇℃伅绠$悊
+     */
+    @PostMapping("/export")
+    @ApiOperation("瀵煎嚭鍙戣揣瀹℃壒")
+    public void export(HttpServletResponse response) {
+        List<ShipmentApproval> list = shipmentApprovalService.list(null);
+        ExcelUtil<ShipmentApproval> util = new ExcelUtil<ShipmentApproval>(ShipmentApproval.class);
+        util.exportExcel(response, list, "鍙戣揣瀹℃壒");
+    }
+
+}
diff --git a/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java b/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
index 56b3e15..c498b93 100644
--- a/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
+++ b/src/main/java/com/ruoyi/sales/controller/ShippingInfoController.java
@@ -1,5 +1,6 @@
 package com.ruoyi.sales.controller;
 
+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.ruoyi.common.utils.poi.ExcelUtil;
@@ -7,13 +8,20 @@
 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.sales.mapper.ShipmentApprovalMapper;
 import com.ruoyi.sales.mapper.ShippingInfoMapper;
 import com.ruoyi.sales.pojo.SalesLedger;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import com.ruoyi.sales.pojo.ShipmentApproval;
 import com.ruoyi.sales.pojo.ShippingInfo;
+import com.ruoyi.sales.service.ISalesLedgerProductService;
+import com.ruoyi.sales.service.ISalesLedgerService;
 import com.ruoyi.sales.service.ShippingInfoService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
@@ -30,6 +38,10 @@
 
     @Autowired
     private ShippingInfoService shippingInfoService;
+    @Autowired
+    private ShipmentApprovalMapper shipmentApprovalMapper;
+    @Autowired
+    private ISalesLedgerProductService salesLedgerProductService;
 
 
     @GetMapping("/listPage")
@@ -41,8 +53,33 @@
 
     @PostMapping("/add")
     @ApiOperation("娣诲姞鍙戣揣淇℃伅")
+    @Transactional(rollbackFor = Exception.class)
     public AjaxResult add(@RequestBody ShippingInfo req) {
+        LambdaQueryWrapper<ShippingInfo> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ShippingInfo::getSalesLedgerId, req.getSalesLedgerId());
+        wrapper.eq(ShippingInfo::getSalesLedgerProductId, req.getSalesLedgerProductId());
+        List<ShippingInfo> list = shippingInfoService.list(wrapper);
+        if(!CollectionUtils.isEmpty(list)){
+            return AjaxResult.error("鍙戣揣淇℃伅宸插瓨鍦�");
+        }
         boolean save = shippingInfoService.save(req);
+        if(save){
+            ShippingInfo shippingInfo = shippingInfoService.getOne(wrapper);
+            ShipmentApproval shipmentApproval = new ShipmentApproval();
+            shipmentApproval.setSalesLedgerId(req.getSalesLedgerId());
+            shipmentApproval.setSalesLedgerProductId(req.getSalesLedgerProductId());
+            shipmentApproval.setApproveUserId(req.getApproverId());
+            shipmentApproval.setApproveStatus(2);
+            shipmentApproval.setShippingInfoId(shippingInfo.getId());
+            shipmentApprovalMapper.insert(shipmentApproval);
+
+            SalesLedgerProduct salesLedgerProduct = salesLedgerProductService.getById(req.getSalesLedgerProductId());
+            if(salesLedgerProduct != null){
+                salesLedgerProduct.setApproveStatus(2);
+                salesLedgerProductService.updateById(salesLedgerProduct);
+            }
+
+        }
         return save ? AjaxResult.success() : AjaxResult.error();
     }
 
diff --git a/src/main/java/com/ruoyi/sales/dto/ReceiptPaymentRecordDto.java b/src/main/java/com/ruoyi/sales/dto/ReceiptPaymentRecordDto.java
index be17e5e..bf90b88 100644
--- a/src/main/java/com/ruoyi/sales/dto/ReceiptPaymentRecordDto.java
+++ b/src/main/java/com/ruoyi/sales/dto/ReceiptPaymentRecordDto.java
@@ -9,6 +9,7 @@
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.util.Date;
 
 /**
@@ -30,7 +31,7 @@
     @DateTimeFormat(pattern = "yyyy-MM-dd")
     @Excel(name = "鐧昏鏃ユ湡",width = 30,dateFormat = "yyyy-MM-dd")
     @ApiModelProperty(value = "鐧昏鏃ユ湡")
-    private Date invoiceDate;
+    private LocalDateTime createTime;
 
     @ApiModelProperty(value = "閿�鍞悎鍚屽彿")
     @Excel(name = "閿�鍞悎鍚屽彿")
@@ -38,7 +39,7 @@
 
     @ApiModelProperty(value = "鍥炴閲戦")
     @Excel(name = "鍥炴閲戦")
-    private BigDecimal receiptPaymentAmountTotal;
+    private BigDecimal receiptPaymentAmount;
 
     @ApiModelProperty(value = "椤圭洰鍚嶇О")
     @Excel(name = "椤圭洰鍚嶇О")
diff --git a/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java b/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
index 486ffcb..bd19d51 100644
--- a/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
+++ b/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
@@ -46,7 +46,7 @@
     private List<String> tempFileIds;
     private List<CommonFile> SalesLedgerFiles;
 
-    private Integer Type;
+    private Integer type;
     @ApiModelProperty(value = "绛捐鏃ユ湡")
     private LocalDate executionDate;
 
diff --git a/src/main/java/com/ruoyi/sales/mapper/LossMapper.java b/src/main/java/com/ruoyi/sales/mapper/LossMapper.java
new file mode 100644
index 0000000..e4cf991
--- /dev/null
+++ b/src/main/java/com/ruoyi/sales/mapper/LossMapper.java
@@ -0,0 +1,11 @@
+package com.ruoyi.sales.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.sales.pojo.Loss;
+
+/**
+ * @author :yys
+ * @date : 2025/11/13 16:17
+ */
+public interface LossMapper extends BaseMapper<Loss> {
+}
diff --git a/src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductMapper.java b/src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductMapper.java
index 69b2b7b..58e8d9c 100644
--- a/src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductMapper.java
+++ b/src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductMapper.java
@@ -2,6 +2,9 @@
 
 import com.ruoyi.common.config.MyBaseMapper;
 import com.ruoyi.sales.pojo.SalesLedgerProduct;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 浜у搧淇℃伅Mapper鎺ュ彛
@@ -10,4 +13,8 @@
  * @date 2025-05-08
  */
 public interface SalesLedgerProductMapper extends MyBaseMapper<SalesLedgerProduct> {
+    List<SalesLedgerProduct> selectSalesLedgerProductList(@Param("salesLedgerProduct") SalesLedgerProduct salesLedgerProduct);
+
+    SalesLedgerProduct selectSalesLedgerProductByMainId(@Param("productMainId") Long productMainId);
+
 }
diff --git a/src/main/java/com/ruoyi/sales/mapper/ShipmentApprovalMapper.java b/src/main/java/com/ruoyi/sales/mapper/ShipmentApprovalMapper.java
new file mode 100644
index 0000000..c3bf397
--- /dev/null
+++ b/src/main/java/com/ruoyi/sales/mapper/ShipmentApprovalMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.sales.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.sales.pojo.ShipmentApproval;
+import com.ruoyi.sales.pojo.ShippingInfo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+
+public interface ShipmentApprovalMapper extends BaseMapper<ShipmentApproval> {
+    IPage<ShipmentApproval> listPage(Page page,@Param("req") ShipmentApproval req);
+
+}
diff --git a/src/main/java/com/ruoyi/sales/pojo/InvoiceLedgerFile.java b/src/main/java/com/ruoyi/sales/pojo/InvoiceLedgerFile.java
index 474e949..344b369 100644
--- a/src/main/java/com/ruoyi/sales/pojo/InvoiceLedgerFile.java
+++ b/src/main/java/com/ruoyi/sales/pojo/InvoiceLedgerFile.java
@@ -10,6 +10,9 @@
 @Data
 public class InvoiceLedgerFile {
 
+    @ApiModelProperty(value = "鏂囦欢ID")
+    private Long id;
+
     @ApiModelProperty(value = "鏂囦欢鍚嶇О")
     private String name;
 
diff --git a/src/main/java/com/ruoyi/sales/pojo/Loss.java b/src/main/java/com/ruoyi/sales/pojo/Loss.java
new file mode 100644
index 0000000..ad0a03e
--- /dev/null
+++ b/src/main/java/com/ruoyi/sales/pojo/Loss.java
@@ -0,0 +1,31 @@
+package com.ruoyi.sales.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author :yys
+ * @date : 2025/11/13 16:16
+ */
+@Data
+@TableName("loss")
+public class Loss {
+
+
+    private static final long serialVersionUID = 1L;
+    /**
+     * 搴忓彿
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    private BigDecimal rate;
+
+    @ApiModelProperty(value = "绉熸埛ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+
+}
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
index 4ffdb03..955f4da 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
@@ -41,6 +41,21 @@
     private String customerContractNo;
 
     /**
+     * 鍙戣揣杞︾墝鍙�
+     */
+    @Excel(name = "鍙戣揣杞︾墝鍙�")
+    @TableField(exist = false)
+    private String shippingCarNumber;
+
+    /**
+     * 鍙戣揣鏃ユ湡
+     */
+    @Excel(name = "鍙戣揣鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField(exist = false)
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date shippingDate;
+
+    /**
      * 椤圭洰鍚嶇О
      */
     @Excel(name = "椤圭洰鍚嶇О")
@@ -125,5 +140,9 @@
 
     @ApiModelProperty(value = "浠樻鏂瑰紡")
     private String paymentMethod;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "鐢熶骇鐘舵��")
+    private String productionStatus = "鏈紑濮�";
 }
 
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
index ee28aba..6ff4861 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -9,8 +9,10 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.io.Serializable;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.util.Date;
 
 /**
  * 浜у搧淇℃伅瀵硅薄 sales_ledger_product
@@ -20,7 +22,7 @@
  */
 @TableName("sales_ledger_product")
 @Data
-public class SalesLedgerProduct {
+public class SalesLedgerProduct implements Serializable {
     private static final long serialVersionUID = 1L;
 
     /**
@@ -103,22 +105,22 @@
     /**
      * 鏈鏉ョエ鏁�
      */
-    private BigDecimal ticketsNum;
+    private BigDecimal ticketsNum=BigDecimal.ZERO;
 
     /**
      * 鏈鏉ョエ閲戦(鍏�)
      */
-    private BigDecimal ticketsAmount;
+    private BigDecimal ticketsAmount=BigDecimal.ZERO;
 
     /**
      * 鏈潵绁ㄦ暟
      */
-    private BigDecimal futureTickets;
+    private BigDecimal futureTickets=BigDecimal.ZERO;
 
     /**
      * 鏈潵绁ㄩ噾棰�(鍏�)
      */
-    private BigDecimal futureTicketsAmount;
+    private BigDecimal futureTicketsAmount=BigDecimal.ZERO;
 
     @ApiModelProperty(value = "寮�绁ㄦ暟")
     private BigDecimal invoiceNum;
@@ -177,6 +179,33 @@
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @Excel(name = "鐧昏鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime registerDate;
+    /**
+     * 鍙戣揣杞︾墝鍙�
+     */
+    @Excel(name = "鍙戣揣杞︾墝鍙�")
+    @TableField(exist = false)
+    private String shippingCarNumber;
+
+    /**
+     * 鍙戣揣鏃ユ湡
+     */
+    @Excel(name = "鍙戣揣鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField(exist = false)
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date shippingDate;
+
+//    @TableField(exist = false)
+//    @ApiModelProperty(value = "鐢熶骇鐘舵��")
+//    private String productionStatus = "鏈紑濮�";
+    /**
+     * 鍙戣揣瀹℃壒鐘舵��
+     */
+//    @TableField(exist = false)
+    @ApiModelProperty(value = "瀹℃壒鐘舵�侊細0鏈敓浜�,1宸茬敓浜�,2寰呭鏍�(瀹℃牳涓�),3瀹℃牳瀹屾垚,4瀹℃牳澶辫触")
+    private Integer approveStatus;
+
+    @ApiModelProperty(value = "鏄惁璐ㄦ")
+    private Boolean isChecked;
 
     /**
      * 缇庡厓
diff --git a/src/main/java/com/ruoyi/sales/pojo/ShipmentApproval.java b/src/main/java/com/ruoyi/sales/pojo/ShipmentApproval.java
new file mode 100644
index 0000000..41a0d34
--- /dev/null
+++ b/src/main/java/com/ruoyi/sales/pojo/ShipmentApproval.java
@@ -0,0 +1,352 @@
+package com.ruoyi.sales.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;
+import java.util.Date;
+import java.util.List;
+
+@Data
+@TableName("shipment_approval")
+public class ShipmentApproval {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    @ApiModelProperty(value = "鍙戣揣淇℃伅id")
+    private Long shippingInfoId;
+    @ApiModelProperty(value = "閿�鍞彴璐d")
+    private Long salesLedgerId;
+    @ApiModelProperty(value = "閿�鍞姤浠蜂骇鍝佽〃id")
+    private Long salesLedgerProductId;
+     @ApiModelProperty(value = "鐢宠閮ㄩ棬id")
+    private Long approveDeptId;
+
+    @ApiModelProperty(value = "鐢宠閮ㄩ棬鍚嶇О")
+    @Excel(name = "鐢宠閮ㄩ棬")
+    private String approveDeptName;
+     @ApiModelProperty(value = "瀹℃壒鐢ㄦ埛id")
+    private Integer approveUserId;
+    @ApiModelProperty(value = "瀹℃壒鐢ㄦ埛鍚嶇О")
+    @Excel(name = "瀹℃壒鐢ㄦ埛")
+    private String approveUserNames;
+
+    /**
+     * 瀹℃壒鐘舵��
+     */
+    @ApiModelProperty(value = "瀹℃壒鐘舵�侊細0鏈嚭搴�,1宸插嚭搴�,2寰呭鏍�,3瀹℃牳瀹屾垚,4瀹℃牳澶辫触")
+    @Excel(name = "瀹℃壒鐘舵��", readConverterExp = "0=鏈嚭搴�,1=宸插嚭搴�,2=寰呭鏍�,3=瀹℃牳瀹屾垚,4=瀹℃牳澶辫触")
+    private Integer approveStatus;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Integer createUser;
+
+    @ApiModelProperty(value = "淇敼鐢ㄦ埛")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty(value = "绉熸埛ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "鍙戣揣鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField(exist = false)
+    private Date shippingDate;
+
+    @Excel(name = "鍙戣揣杞︾墝鍙�")
+    @TableField(exist = false)
+    private String shippingCarNumber;
+
+    /**
+     * 棰勮鏁伴噺
+     */
+
+    @TableField(exist = false)
+    private BigDecimal warnNum;
+
+    /**
+     * 浜у搧澶х被
+     */
+    @Excel(name = "浜у搧澶х被")
+    @TableField(exist = false)
+    private String productCategory;
+
+    /**
+     * 瑙勬牸鍨嬪彿
+     */
+    @Excel(name = "瑙勬牸鍨嬪彿")
+    @TableField(exist = false)
+    private String specificationModel;
+
+    /**
+     * 鍗曚綅
+     */
+    @Excel(name = "鍗曚綅")
+    @TableField(exist = false)
+    private String unit;
+
+    /**
+     * 鏁伴噺
+     */
+    @Excel(name = "鏁伴噺")
+    @TableField(exist = false)
+    private BigDecimal quantity;
+    @Excel(name = "鏈�浣庡簱瀛樻暟閲�")
+    @TableField(exist = false)
+    private BigDecimal minStock;
+    /**
+     * 绋庣巼
+     */
+    @Excel(name = "绋庣巼")
+    @TableField(exist = false)
+    private BigDecimal taxRate;
+
+    /**
+     * 鍚◣鍗曚环
+     */
+    @Excel(name = "鍚◣鍗曚环")
+    @TableField(exist = false)
+    private BigDecimal taxInclusiveUnitPrice;
+
+    /**
+     * 鍚◣鎬讳环
+     */
+    @Excel(name = "鍚◣鎬讳环")
+    @TableField(exist = false)
+    private BigDecimal taxInclusiveTotalPrice;
+
+    /**
+     * 涓嶅惈绋庢�讳环
+     */
+    @Excel(name = "涓嶅惈绋庢�讳环")
+    @TableField(exist = false)
+    private BigDecimal taxExclusiveTotalPrice;
+
+    /**
+     * 鍙戠エ绫诲瀷
+     */
+
+    @TableField(exist = false)
+    private String invoiceType;
+
+    /**
+     * 鍙拌处绫诲瀷 1.閿�鍞� 2锛岄噰璐�
+     */
+    @TableField(exist = false)
+    private Integer type;
+
+    /**
+     * 鏈鏉ョエ鏁�
+     */
+    @TableField(exist = false)
+    private BigDecimal ticketsNum;
+
+    /**
+     * 鏈鏉ョエ閲戦(鍏�)
+     */
+    @TableField(exist = false)
+    private BigDecimal ticketsAmount;
+
+    /**
+     * 鏈潵绁ㄦ暟
+     */
+    @TableField(exist = false)
+    private BigDecimal futureTickets;
+
+    /**
+     * 鏈潵绁ㄩ噾棰�(鍏�)
+     */
+    @TableField(exist = false)
+    private BigDecimal futureTicketsAmount;
+
+    @ApiModelProperty(value = "寮�绁ㄦ暟")
+    @TableField(exist = false)
+    private BigDecimal invoiceNum;
+
+    @ApiModelProperty(value = "鏈紑绁ㄦ暟")
+    @TableField(exist = false)
+    private BigDecimal noInvoiceNum;
+
+    @ApiModelProperty(value = "寮�绁ㄩ噾棰�")
+    @TableField(exist = false)
+    private BigDecimal invoiceAmount;
+
+    @ApiModelProperty(value = "鏈紑绁ㄩ噾棰�")
+    @TableField(exist = false)
+    private BigDecimal noInvoiceAmount;
+
+    @ApiModelProperty(value = "鏈寮�绁ㄦ暟")
+    @TableField(exist = false)
+    private BigDecimal currentInvoiceNum;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "鏈寮�绁ㄩ噾棰�")
+    private BigDecimal currentInvoiceAmount;
+
+    /**
+     *  浜у搧id
+     */
+    @TableField(exist = false)
+    private Long productId;
+
+    /**
+     * 浜у搧瑙勬牸id
+     */
+    @TableField(exist = false)
+    private Long productModelId;
+
+    @ApiModelProperty(value = "鍒濆鏈紑绁ㄦ暟")
+    @TableField(exist = false)
+    private BigDecimal originalNoInvoiceNum;
+
+    @ApiModelProperty(value = "涓存椂鏈紑绁ㄦ暟")
+    @TableField(exist = false)
+    private BigDecimal tempNoInvoiceNum;
+
+    @ApiModelProperty(value = "涓存椂鏈紑绁ㄩ噾棰�")
+    @TableField(exist = false)
+    private BigDecimal tempnoInvoiceAmount;
+
+    @ApiModelProperty(value = "涓存椂鏈潵绁ㄦ暟")
+    @TableField(exist = false)
+    private BigDecimal tempFutureTickets;
+
+    @ApiModelProperty(value = "涓存椂鏈潵绁ㄩ噾棰�")
+    @TableField(exist = false)
+    private BigDecimal tempFutureTicketsAmount;
+
+    @ApiModelProperty("鐧昏浜�")
+    @TableField(exist = false)
+    private String register;
+
+    @ApiModelProperty("鐧昏鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "鐧昏鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    @TableField(exist = false)
+    private LocalDateTime registerDate;
+    /**
+     * 閿�鍞悎鍚屽彿
+     */
+    @Excel(name = "閿�鍞悎鍚屽彿")
+    @TableField(exist = false)
+    private String salesContractNo;
+
+    /**
+     * 瀹㈡埛鍚堝悓鍙�
+     */
+    @Excel(name = "瀹㈡埛鍚堝悓鍙�")
+    @TableField(exist = false)
+    private String customerContractNo;
+
+
+    /**
+     * 椤圭洰鍚嶇О
+     */
+    @Excel(name = "椤圭洰鍚嶇О")
+    @TableField(exist = false)
+    private String projectName;
+
+    /**
+     * 褰曞叆鏃ユ湡
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @TableField(exist = false)
+    private Date entryDate;
+
+    /**
+     * 涓氬姟鍛�
+     */
+    @Excel(name = "涓氬姟鍛�")
+    @TableField(exist = false)
+    private String salesman;
+
+    @TableField(exist = false)
+    private Long customerId;
+
+    /**
+     * 瀹㈡埛鍚嶇О
+     */
+    @Excel(name = "瀹㈡埛鍚嶇О")
+    @TableField(exist = false)
+    private String customerName;
+
+    /**
+     * 褰曞叆浜�
+     */
+    @TableField(exist = false)
+    private String entryPerson;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "褰曞叆浜�")
+    @Excel(name = "褰曞叆浜�")
+    private String entryPersonName;
+
+    /**
+     * 澶囨敞
+     */
+    @Excel(name = "澶囨敞")
+    @TableField(exist = false)
+    private String remarks;
+
+    /**
+     * 闄勪欢鏉愭枡锛屽瓨鍌ㄦ枃浠跺悕绛夌浉鍏充俊鎭�
+     */
+    @TableField(exist = false)
+    private String attachmentMaterials;
+
+
+    /**
+     * 鍚堝悓閲戦锛堜骇鍝佸惈绋庢�讳环锛�
+     */
+    @Excel(name = "鍚堝悓閲戦")
+    @TableField(exist = false)
+    private BigDecimal contractAmount;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "鏈紑绁ㄩ噾棰�(鍏�)")
+    @Excel(name = "鏈紑绁ㄩ噾棰�")
+    private BigDecimal noInvoiceAmountTotal = BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "绛捐鏃ユ湡")
+    @TableField(exist = false)
+    private LocalDate executionDate;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "宸插紑绁ㄩ噾棰�(鍏�)")
+    @Excel(name = "宸插紑绁ㄩ噾棰�")
+    private BigDecimal invoiceTotal = BigDecimal.ZERO;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "鍥炴閲戦")
+    private BigDecimal receiptPaymentAmountTotal = BigDecimal.ZERO;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "寰呭洖娆鹃噾棰�")
+    private BigDecimal noReceiptAmount = BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "浠樻鏂瑰紡")
+    @TableField(exist = false)
+    private String paymentMethod;
+
+    @TableField(exist = false)
+    @ApiModelProperty(value = "鐢熶骇鐘舵��")
+    private String productionStatus = "鏈紑濮�";
+}
diff --git a/src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java b/src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java
index 3f80dc0..fce7148 100644
--- a/src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java
+++ b/src/main/java/com/ruoyi/sales/pojo/ShippingInfo.java
@@ -23,7 +23,8 @@
 
     @ApiModelProperty(value = "閿�鍞彴璐d")
     private Long salesLedgerId;
-
+    @ApiModelProperty(value = "閿�鍞姤浠蜂骇鍝佽〃id")
+    private Long salesLedgerProductId;
     @TableField(exist = false)
     @ApiModelProperty(value = "閿�鍞悎鍚屽彿")
     @Excel(name = "閿�鍞悎鍚屽彿")
@@ -64,5 +65,8 @@
     @ApiModelProperty(value = "绉熸埛ID")
     @TableField(fill = FieldFill.INSERT)
     private Long tenantId;
+    @ApiModelProperty(value = "瀹℃壒浜篿d")
+    @TableField(exist = false)
+    private Integer approverId;
 
 }
diff --git a/src/main/java/com/ruoyi/sales/service/ShipmentApprovalService.java b/src/main/java/com/ruoyi/sales/service/ShipmentApprovalService.java
new file mode 100644
index 0000000..6af2c00
--- /dev/null
+++ b/src/main/java/com/ruoyi/sales/service/ShipmentApprovalService.java
@@ -0,0 +1,13 @@
+package com.ruoyi.sales.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.sales.pojo.ShipmentApproval;
+import com.ruoyi.sales.pojo.ShippingInfo;
+
+
+public interface ShipmentApprovalService extends IService<ShipmentApproval>{
+    IPage<ShipmentApproval> listPage(Page page, ShipmentApproval req);
+
+}
diff --git a/src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java
index 4722ac4..614fc20 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/InvoiceLedgerServiceImpl.java
@@ -381,55 +381,71 @@
 
     /**
      * 澶勭悊褰撴湀寮�绁ㄥ彴璐﹀垹闄�
+     *
      * @param invoiceRegistrationProductId
      * @param invoiceRegistrationProduct
      */
-    private void dealCurrentMonthDel(Integer invoiceRegistrationProductId,InvoiceRegistrationProduct invoiceRegistrationProduct){
+
+    private void dealCurrentMonthDel(Integer invoiceRegistrationProductId, InvoiceRegistrationProduct invoiceRegistrationProduct) {
+
         // 鍒犻櫎寮�绁ㄥ彴璐�
-        QueryWrapper<InvoiceLedger> delMapper = new QueryWrapper<>();
-        delMapper.eq("invoice_registration_product_id", invoiceRegistrationProductId);
-        invoiceLedgerMapper.delete(delMapper);
-        // 鍒犻櫎寮�绁ㄧ櫥璁板苟鍥炴粴
+        QueryWrapper<InvoiceLedger> delLedgerWrapper = new QueryWrapper<>();
+        delLedgerWrapper.eq("invoice_registration_product_id", invoiceRegistrationProductId);
+        invoiceLedgerMapper.delete(delLedgerWrapper);
+
+        // 鏌ヨ褰撳墠浜у搧涓嬬殑鎵�鏈夊紑绁ㄧ櫥璁�
         QueryWrapper<InvoiceRegistrationProduct> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("sales_ledger_id", invoiceRegistrationProduct.getSalesLedgerId());
         queryWrapper.eq("sales_ledger_product_id", invoiceRegistrationProduct.getSalesLedgerProductId());
         queryWrapper.orderByAsc("create_time");
-        List<InvoiceRegistrationProduct> invoiceRegistrationProductList = invoiceRegistrationProductMapper.selectList(queryWrapper);
-//        InvoiceRegistrationProduct invoiceRegistrationProduct = invoiceRegistrationProductMapper.selectById(invoiceRegistrationProductId);
-        int index =  -1;
-        for (int i = 0; i < invoiceRegistrationProductList.size(); i++) {
-            InvoiceRegistrationProduct currentInvoiceRegProduct = invoiceRegistrationProductList.get(i);
-            if(invoiceRegistrationProduct.getId().equals(currentInvoiceRegProduct.getId())){
+        List<InvoiceRegistrationProduct> allList = invoiceRegistrationProductMapper.selectList(queryWrapper);
+
+        int index = -1;
+        for (int i = 0; i < allList.size(); i++) {
+            if (invoiceRegistrationProductId.equals(allList.get(i).getId())) {
                 index = i;
+                break;
             }
         }
-        if(index == -1){
+        if (index == -1) {
             return;
         }
-        for (int i = index + 1; i < invoiceRegistrationProductList.size(); i++) {
-            InvoiceRegistrationProduct currentInvoiceRegProduct = invoiceRegistrationProductList.get(i);
-            // 鍥炴粴鏈紑绁ㄦ暟/鏈紑绁ㄩ噾棰�
-            BigDecimal noInvoiceAmount = currentInvoiceRegProduct.getNoInvoiceAmount().add(invoiceRegistrationProduct.getInvoiceAmount());
-            BigDecimal noInvoiceNum = currentInvoiceRegProduct.getNoInvoiceNum().add(invoiceRegistrationProduct.getInvoiceNum());
-            currentInvoiceRegProduct.setNoInvoiceAmount(noInvoiceAmount);
-            currentInvoiceRegProduct.setNoInvoiceNum(noInvoiceNum);
-            invoiceRegistrationProductMapper.updateById(currentInvoiceRegProduct);
+
+        for (int i = index + 1; i < allList.size(); i++) {
+            InvoiceRegistrationProduct current = allList.get(i);
+
+            current.setNoInvoiceNum(current.getNoInvoiceNum().add(invoiceRegistrationProduct.getInvoiceNum()));
+            current.setNoInvoiceAmount(current.getNoInvoiceAmount().add(invoiceRegistrationProduct.getInvoiceAmount()));
+
+            invoiceRegistrationProductMapper.updateById(current);
         }
+
+        // 鍒犻櫎褰撳墠寮�绁ㄧ櫥璁�
         invoiceRegistrationProductMapper.deleteById(invoiceRegistrationProductId);
-        // 淇敼sale_product鏁版嵁
-        SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(invoiceRegistrationProduct.getSalesLedgerProductId());
+
+        // 鏌ヨ鍒犻櫎鍚庣殑鍓╀綑寮�绁ㄧ櫥璁�
         QueryWrapper<InvoiceRegistrationProduct> newQueryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("sales_ledger_id", invoiceRegistrationProduct.getSalesLedgerId());
-        queryWrapper.eq("sales_ledger_product_id", invoiceRegistrationProduct.getSalesLedgerProductId());
-        queryWrapper.orderByAsc("create_time");
-        List<InvoiceRegistrationProduct> newInvoiceRegistrationProductList = invoiceRegistrationProductMapper.selectList(newQueryWrapper);
-        if(CollectionUtils.isEmpty(newInvoiceRegistrationProductList)){
+        newQueryWrapper.eq("sales_ledger_id", invoiceRegistrationProduct.getSalesLedgerId());
+        newQueryWrapper.eq("sales_ledger_product_id", invoiceRegistrationProduct.getSalesLedgerProductId());
+        newQueryWrapper.orderByAsc("create_time");
+        List<InvoiceRegistrationProduct> remainList = invoiceRegistrationProductMapper.selectList(newQueryWrapper);
+
+        // 鏌ヨ閿�鍞彴璐︿骇鍝�
+        SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(invoiceRegistrationProduct.getSalesLedgerProductId());
+
+        if (CollectionUtils.isEmpty(remainList)) {
+            // 娌℃湁浠讳綍寮�绁ㄨ褰曪紝鎭㈠鍒濆鐘舵��
+            salesLedgerProduct.setInvoiceNum(BigDecimal.ZERO);
+            salesLedgerProduct.setInvoiceAmount(BigDecimal.ZERO);
             salesLedgerProduct.setNoInvoiceNum(salesLedgerProduct.getQuantity());
             salesLedgerProduct.setNoInvoiceAmount(salesLedgerProduct.getTaxInclusiveTotalPrice());
-        }else {
+        } else {
+            salesLedgerProduct.setInvoiceNum(salesLedgerProduct.getInvoiceNum().subtract(invoiceRegistrationProduct.getInvoiceNum()));
+            salesLedgerProduct.setInvoiceAmount(salesLedgerProduct.getInvoiceAmount().subtract(invoiceRegistrationProduct.getInvoiceAmount()));
             salesLedgerProduct.setNoInvoiceNum(salesLedgerProduct.getNoInvoiceNum().add(invoiceRegistrationProduct.getInvoiceNum()));
             salesLedgerProduct.setNoInvoiceAmount(salesLedgerProduct.getNoInvoiceAmount().add(invoiceRegistrationProduct.getInvoiceAmount()));
         }
+
         salesLedgerProductMapper.updateById(salesLedgerProduct);
     }
 
@@ -438,46 +454,59 @@
      * @param invoiceRegistrationProduct
      * @param invoiceLedger
      */
-    private void dealOtherMonthDel(InvoiceRegistrationProduct invoiceRegistrationProduct,InvoiceLedger invoiceLedger ){
-        InvoiceRegistrationProduct copyRegProduct = new InvoiceRegistrationProduct();
-        BeanUtils.copyProperties(invoiceRegistrationProduct, copyRegProduct);
-        BigDecimal invoiceNum = copyRegProduct.getInvoiceNum().negate();
-        BigDecimal invoiceAmount = copyRegProduct.getInvoiceAmount().negate();
-        // invoice_registration_product
-        // 鍒犻櫎寮�绁ㄧ櫥璁板苟鍥炴粴
+    private void dealOtherMonthDel(InvoiceRegistrationProduct invoiceRegistrationProduct, InvoiceLedger invoiceLedger) {
+        //鏌ヨ鍘嗗彶寮�绁ㄧ櫥璁�
         QueryWrapper<InvoiceRegistrationProduct> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("sales_ledger_id", invoiceRegistrationProduct.getSalesLedgerId());
         queryWrapper.eq("sales_ledger_product_id", invoiceRegistrationProduct.getSalesLedgerProductId());
         queryWrapper.orderByAsc("create_time");
-        List<InvoiceRegistrationProduct> invoiceRegistrationProductList = invoiceRegistrationProductMapper.selectList(queryWrapper);
-        InvoiceRegistrationProduct lastInvoiceRegistrationProduct = invoiceRegistrationProductList.get(invoiceRegistrationProductList.size() - 1);
-        BigDecimal noInvoiceNum = lastInvoiceRegistrationProduct.getNoInvoiceNum().subtract(invoiceNum);
-        BigDecimal noInvoiceAmount = lastInvoiceRegistrationProduct.getNoInvoiceAmount().subtract(invoiceAmount);
-        copyRegProduct.setInvoiceNum(invoiceNum);
-        copyRegProduct.setInvoiceAmount(invoiceAmount);
-        copyRegProduct.setNoInvoiceNum(noInvoiceNum);
-        copyRegProduct.setNoInvoiceAmount(noInvoiceAmount);
-        copyRegProduct.setId(null);
-        invoiceRegistrationProductMapper.insert(copyRegProduct);
+        List<InvoiceRegistrationProduct> list = invoiceRegistrationProductMapper.selectList(queryWrapper);
+
+        if (CollectionUtils.isEmpty(list)) {
+            return;
+        }
+
+        InvoiceRegistrationProduct last = list.get(list.size() - 1);
+
+        BigDecimal negateInvoiceNum = invoiceRegistrationProduct.getInvoiceNum().negate();
+        BigDecimal negateInvoiceAmount = invoiceRegistrationProduct.getInvoiceAmount().negate();
+
+        InvoiceRegistrationProduct copy = new InvoiceRegistrationProduct();
+        BeanUtils.copyProperties(invoiceRegistrationProduct, copy);
+
+        copy.setId(null);
+        copy.setInvoiceNum(negateInvoiceNum);
+        copy.setInvoiceAmount(negateInvoiceAmount);
+
+        // 鏈紑绁� = 涓婁竴鏉� + 鏈鍐插洖鐨勬暟閲�
+        copy.setNoInvoiceNum(last.getNoInvoiceNum().add(invoiceRegistrationProduct.getInvoiceNum()));
+        copy.setNoInvoiceAmount(last.getNoInvoiceAmount().add(invoiceRegistrationProduct.getInvoiceAmount()));
+
+        invoiceRegistrationProductMapper.insert(copy);
+
         // 澶嶅埗寮�绁ㄥ彴璐�
-        InvoiceLedger invoiceLedgerCopy = new InvoiceLedger();
-        BeanUtils.copyProperties(invoiceLedger, invoiceLedgerCopy);
-        invoiceLedgerCopy.setInvoiceRegistrationProductId(copyRegProduct.getId());
-        BigDecimal invoiceTotal = invoiceLedgerCopy.getInvoiceTotal().negate();
-        invoiceLedgerCopy.setInvoiceTotal(invoiceTotal);
-        invoiceLedgerCopy.setId(null);
-        invoiceLedgerCopy.setInvoiceDate(LocalDate.now());
-        invoiceLedgerMapper.insert(invoiceLedgerCopy);
-        // 鏇存柊sales_leger_product
-        QueryWrapper<SalesLedgerProduct> salesLedgerProductQueryWrapper = new QueryWrapper<>();
-        salesLedgerProductQueryWrapper.eq("id", invoiceRegistrationProduct.getSalesLedgerProductId());
-        SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectOne(salesLedgerProductQueryWrapper);
-        salesLedgerProduct.setNoInvoiceNum(noInvoiceNum);
-        salesLedgerProduct.setNoInvoiceAmount(noInvoiceAmount);
-        BigDecimal newInvoiceNum = salesLedgerProduct.getInvoiceNum().add(invoiceNum);
-        BigDecimal newInvocieAmount = salesLedgerProduct.getInvoiceAmount().add(invoiceAmount);
-        salesLedgerProduct.setInvoiceNum(newInvoiceNum);
-        salesLedgerProduct.setInvoiceAmount(newInvocieAmount);
+        InvoiceLedger ledgerCopy = new InvoiceLedger();
+        BeanUtils.copyProperties(invoiceLedger, ledgerCopy);
+
+        ledgerCopy.setId(null);
+        ledgerCopy.setInvoiceRegistrationProductId(copy.getId());
+        ledgerCopy.setInvoiceTotal(invoiceLedger.getInvoiceTotal().negate());
+        ledgerCopy.setInvoiceDate(LocalDate.now());
+
+        invoiceLedgerMapper.insert(ledgerCopy);
+
+        // 鍥炴粴 sales_ledger_product
+        SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(invoiceRegistrationProduct.getSalesLedgerProductId());
+
+        // 宸插紑绁�
+        salesLedgerProduct.setInvoiceNum(salesLedgerProduct.getInvoiceNum().add(negateInvoiceNum));
+        salesLedgerProduct.setInvoiceAmount(salesLedgerProduct.getInvoiceAmount().add(negateInvoiceAmount));
+
+        // 鏈紑绁�
+        salesLedgerProduct.setNoInvoiceNum(salesLedgerProduct.getNoInvoiceNum().add(invoiceRegistrationProduct.getInvoiceNum()));
+        salesLedgerProduct.setNoInvoiceAmount(salesLedgerProduct.getNoInvoiceAmount().add(invoiceRegistrationProduct.getInvoiceAmount()));
+
         salesLedgerProductMapper.updateById(salesLedgerProduct);
     }
+
 }
diff --git a/src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java
index 56003b7..62090d1 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/InvoiceRegistrationServiceImpl.java
@@ -78,6 +78,8 @@
                 invoiceRegistrationProduct.setSalesLedgerProductId(productDatum.getId().intValue());
 
                 invoiceRegistrationProductMapper.insert(invoiceRegistrationProduct);
+                productDatum.setInvoiceNum(currentInvoiceNum);
+                productDatum.setInvoiceAmount(productDatum.getCurrentInvoiceAmount());
                 salesLedgerProductMapper.updateById(productDatum);
                 // 鏂板涓�鏉″紑绁ㄥ彴璐︽暟鎹�
                 InvoiceLedger invoiceLedger = new InvoiceLedger();
diff --git a/src/main/java/com/ruoyi/sales/service/impl/ReceiptPaymentServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/ReceiptPaymentServiceImpl.java
index ae93c3b..48056a9 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/ReceiptPaymentServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/ReceiptPaymentServiceImpl.java
@@ -161,9 +161,16 @@
     @Override
     public IPage<ReceiptPaymentDto> bindInvoiceNoRegPage(Page page, ReceiptPaymentDto receiptPaymentDto) {
         IPage<ReceiptPaymentDto> receiptPaymentDtoIPage = receiptPaymentMapper.bindInvoiceNoRegPage(page, receiptPaymentDto);
-        if (receiptPaymentDto.getStatus()) {
-            receiptPaymentDtoIPage.getRecords().removeIf(receiptPaymentDto1 -> new BigDecimal("0.00").equals(receiptPaymentDto1.getNoReceiptAmount()));
-        }
+//        if (receiptPaymentDto.getStatus()) {
+//            long count = receiptPaymentDtoIPage.getRecords()
+//                    .stream()
+//                    .filter(receiptPaymentDto1 -> new BigDecimal("0.00").equals(receiptPaymentDto1.getNoReceiptAmount()))
+//                    .count();
+//            receiptPaymentDtoIPage
+//                    .getRecords()
+//                    .removeIf(receiptPaymentDto1 -> new BigDecimal("0.00").equals(receiptPaymentDto1.getNoReceiptAmount()));
+//            receiptPaymentDtoIPage.setTotal(receiptPaymentDtoIPage.getTotal() - count);
+//        }
         receiptPaymentDtoIPage.getRecords().forEach(item -> {
             // 姣旇緝鍥炴閲戦 == 寰呭洖娆鹃噾棰�
             if (item.getInvoiceTotal().compareTo(item.getReceiptPaymentAmountTotal()) == 0) {
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
index 3f43871..02acd87 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -4,6 +4,8 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.production.mapper.*;
+import com.ruoyi.production.pojo.*;
 import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
 import com.ruoyi.purchase.pojo.PurchaseLedger;
 import com.ruoyi.sales.dto.InvoiceRegistrationProductDto;
@@ -22,6 +24,8 @@
 
 import java.lang.reflect.Field;
 import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.function.Function;
@@ -43,8 +47,18 @@
 
     private PurchaseLedgerMapper purchaseLedgerMapper;
 
-    @Autowired
+    private ProductOrderMapper productOrderMapper;
+
+    private ProcessRouteItemMapper processRouteItemMapper;
+
+    private ProductProcessRouteItemMapper productProcessRouteItemMapper;
+
     private InvoiceRegistrationProductMapper invoiceRegistrationProductMapper;
+
+    private ProcessRouteMapper processRouteMapper;
+    private ProductProcessRouteMapper productProcessRouteMapper;
+
+    private ProductWorkOrderMapper productWorkOrderMapper;
 
     @Override
     public SalesLedgerProduct selectSalesLedgerProductById(Long id) {
@@ -53,27 +67,34 @@
 
     @Override
     public List<SalesLedgerProduct> selectSalesLedgerProductList(SalesLedgerProduct salesLedgerProduct) {
-        LambdaQueryWrapper<SalesLedgerProduct> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedgerProduct.getSalesLedgerId())
-                .eq(SalesLedgerProduct::getType, salesLedgerProduct.getType());
-        List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(queryWrapper);
+//        LambdaQueryWrapper<SalesLedgerProduct> queryWrapper = new LambdaQueryWrapper<>();
+//        queryWrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedgerProduct.getSalesLedgerId())
+//                .eq(SalesLedgerProduct::getType, salesLedgerProduct.getType());
+        List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectSalesLedgerProductList(salesLedgerProduct);
         if(!CollectionUtils.isEmpty(salesLedgerProducts)){
+            // 寮�绁�
             InvoiceRegistrationProductDto invoiceRegistrationProductDto = new InvoiceRegistrationProductDto();
             invoiceRegistrationProductDto.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId().intValue());
             List<InvoiceRegistrationProductDto> invoiceRegistrationProductDtoList = invoiceRegistrationProductMapper.invoiceRegistrationProductList(invoiceRegistrationProductDto);
             // 缁熻寮�绁ㄧ櫥璁颁骇鍝佺殑宸插紑绁ㄦ暟/宸插紑绁ㄩ噾棰�
-            if(!CollectionUtils.isEmpty(invoiceRegistrationProductDtoList)){
+            if (!CollectionUtils.isEmpty(invoiceRegistrationProductDtoList)) {
                 for (SalesLedgerProduct ledgerProduct : salesLedgerProducts) {
                     BigDecimal invoiceNum = BigDecimal.ZERO;
                     BigDecimal invoiceAmount = BigDecimal.ZERO;
+                    BigDecimal noInvoiceNum = BigDecimal.ZERO;
+                    BigDecimal noInvoiceAmount = BigDecimal.ZERO;
                     for (InvoiceRegistrationProductDto registrationProductDto : invoiceRegistrationProductDtoList) {
                         if(ledgerProduct.getId().intValue() == registrationProductDto.getSalesLedgerProductId()){
                             invoiceNum =  invoiceNum.add(registrationProductDto.getInvoiceNum());
                             invoiceAmount = invoiceAmount.add(registrationProductDto.getInvoiceAmount());
+                            noInvoiceNum = ledgerProduct.getQuantity().subtract(invoiceNum);
+                            noInvoiceAmount = ledgerProduct.getTaxInclusiveTotalPrice().subtract(invoiceAmount);
                         }
                     }
                     ledgerProduct.setInvoiceNum(invoiceNum);
                     ledgerProduct.setInvoiceAmount(invoiceAmount);
+                    ledgerProduct.setNoInvoiceNum(noInvoiceNum);
+                    ledgerProduct.setNoInvoiceAmount(noInvoiceAmount);
                 }
             }
 
@@ -94,7 +115,7 @@
             return 0; // 娌℃湁鍙垹闄ょ殑鏁版嵁
         }
 
-        // 鍙兘灞炰簬澶氫釜涓昏〃锛堜絾閫氬父涓�涓帴鍙e彧澶勭悊涓�涓富琛級
+        // 鍙兘灞炰簬澶氫釜涓昏〃
         Set<Long> mainIds = deletedProducts.stream()
                 .map(SalesLedgerProduct::getSalesLedgerId)
                 .filter(Objects::nonNull)
@@ -102,6 +123,46 @@
 
         // 2. 鎵ц鍒犻櫎鎿嶄綔
         int result = salesLedgerProductMapper.deleteBatchIds(Arrays.asList(ids));
+        //鍒犻櫎瀵瑰簲鐨勭敓浜ц鍗�
+        //鎵归噺鏌ヨproductOrder
+        List<ProductOrder> productOrders = productOrderMapper.selectList(
+                new LambdaQueryWrapper<ProductOrder>()
+                        .in(ProductOrder::getProductModelId, ids)
+        );
+
+        if (!CollectionUtils.isEmpty(productOrders)) {
+            List<Long> orderIds = productOrders.stream()
+                    .map(ProductOrder::getId)
+                    .collect(Collectors.toList());
+
+            // 鎵归噺鏌ヨprocessRouteItems
+            List<ProductProcessRouteItem> allRouteItems = productProcessRouteItemMapper.selectList(
+                    new LambdaQueryWrapper<ProductProcessRouteItem>()
+                            .in(ProductProcessRouteItem::getProductOrderId, orderIds)
+            );
+
+            if (!CollectionUtils.isEmpty(allRouteItems)) {
+                List<Long> routeItemIds = allRouteItems.stream()
+                        .map(ProductProcessRouteItem::getId)
+                        .collect(Collectors.toList());
+
+                // 鎵归噺鍒犻櫎workOrder
+                productWorkOrderMapper.delete(new LambdaQueryWrapper<ProductWorkOrder>()
+                                .in(ProductWorkOrder::getProductProcessRouteItemId, routeItemIds));
+            }
+
+            // 鎵归噺鍒犻櫎productProcessRouteItem
+            productProcessRouteItemMapper.delete(new LambdaQueryWrapper<ProductProcessRouteItem>()
+                            .in(ProductProcessRouteItem::getProductOrderId, orderIds));
+
+            // 鎵归噺鍒犻櫎productProcessRoute
+            productProcessRouteMapper.delete(new LambdaQueryWrapper<ProductProcessRoute>()
+                    .in(ProductProcessRoute::getProductOrderId, orderIds));
+
+            // 鎵归噺鍒犻櫎productOrder
+            productOrderMapper.delete(new LambdaQueryWrapper<ProductOrder>()
+                    .in(ProductOrder::getProductModelId, ids));
+        }
 
         // 3. 瀵规瘡涓富琛↖D杩涜閲戦鏇存柊
         for (Long salesLedgerId : mainIds) {
@@ -132,6 +193,73 @@
         if (salesLedgerProduct.getId() == null) {
             salesLedgerProduct.setRegisterDate(LocalDateTime.now());
             result = salesLedgerProductMapper.insert(salesLedgerProduct);
+            ProductOrder productOrder = new ProductOrder();
+            productOrder.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId());
+            productOrder.setProductModelId(salesLedgerProduct.getId());
+            productOrder.setNpsNo("SC" + String.format("%08d", salesLedgerProduct.getId()));
+            productOrder.setQuantity(salesLedgerProduct.getQuantity());//闇�姹傛暟閲�
+            productOrder.setCompleteQuantity(BigDecimal.ZERO);//瀹屾垚鏁伴噺
+            productOrderMapper.insert(productOrder);
+
+            ProcessRoute processRoute = processRouteMapper.selectOne(new QueryWrapper<ProcessRoute>().lambda().eq(ProcessRoute::getProductModelId, salesLedgerProduct.getProductModelId()));
+            if (processRoute != null) {
+                //鏂板鐢熶骇璁㈠崟宸ヨ壓璺嚎涓昏〃
+                ProductProcessRoute productProcessRoute = new ProductProcessRoute();
+                productProcessRoute.setProductModelId(processRoute.getProductModelId());
+                productProcessRoute.setProcessRouteCode(processRoute.getProcessRouteCode());
+                productProcessRoute.setProductOrderId(productOrder.getId());
+                productProcessRoute.setBomId(processRoute.getBomId());
+                productProcessRouteMapper.insert(productProcessRoute);
+                //鏂板鐢熶骇璁㈠崟宸ヨ壓璺嚎瀛愯〃
+                List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(new QueryWrapper<ProcessRouteItem>().lambda().eq(ProcessRouteItem::getRouteId, processRoute.getId()));
+                // 鐢熸垚褰撳墠鏃ユ湡鐨勫墠缂�锛氬勾鏈堟棩
+                String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+                for (ProcessRouteItem processRouteItem : processRouteItems) {
+                    ProductProcessRouteItem productProcessRouteItem = new ProductProcessRouteItem();
+                    productProcessRouteItem.setProductModelId(processRouteItem.getProductModelId());
+                    productProcessRouteItem.setProcessId(processRouteItem.getProcessId());
+                    productProcessRouteItem.setProductOrderId(productOrder.getId());
+                    productProcessRouteItem.setProductRouteId(productProcessRoute.getId());
+                    int insert = productProcessRouteItemMapper.insert(productProcessRouteItem);
+                    if (insert > 0) {
+                        // 鏌ヨ浠婃棩宸插瓨鍦ㄧ殑鏈�澶у伐鍗曞彿
+                        QueryWrapper<ProductWorkOrder> queryWrapper = new QueryWrapper<>();
+                        queryWrapper.likeRight("work_order_no", datePrefix)
+                                .orderByDesc("work_order_no")
+                                .last("LIMIT 1");
+
+                        ProductWorkOrder lastWorkOrder = productWorkOrderMapper.selectOne(queryWrapper);
+
+                        int sequenceNumber = 1; // 榛樿搴忓彿
+                        if (lastWorkOrder != null && lastWorkOrder.getWorkOrderNo() != null) {
+                            String lastNo = lastWorkOrder.getWorkOrderNo().toString();
+                            if (lastNo.startsWith(datePrefix)) {
+                                String seqStr = lastNo.substring(datePrefix.length());
+                                try {
+                                    sequenceNumber = Integer.parseInt(seqStr) + 1;
+                                } catch (NumberFormatException e) {
+                                    sequenceNumber = 1;
+                                }
+                            }
+                        }
+                        // 鐢熸垚瀹屾暣鐨勫伐鍗曞彿
+                        String workOrderNoStr = String.format("%s%03d", datePrefix, sequenceNumber);
+                        ProductWorkOrder productWorkOrder = new ProductWorkOrder();
+                        productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
+                        productWorkOrder.setProductOrderId(productOrder.getId());
+                        productWorkOrder.setPlanQuantity(salesLedgerProduct.getQuantity());
+                        productWorkOrder.setWorkOrderNo(workOrderNoStr);
+                        productWorkOrder.setStatus(1);
+
+                        productWorkOrderMapper.insert(productWorkOrder);
+                    }
+
+                }
+                productOrder.setRouteId(processRoute.getId());
+                productOrderMapper.updateById(productOrder);
+            }
+
+
         } else {
             salesLedgerProduct.setFutureTickets(salesLedgerProduct.getQuantity());
             result = salesLedgerProductMapper.updateById(salesLedgerProduct);
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
index e408631..303335c 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -1,6 +1,7 @@
 package com.ruoyi.sales.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
@@ -8,21 +9,25 @@
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.account.pojo.AccountExpense;
 import com.ruoyi.account.pojo.AccountIncome;
 import com.ruoyi.account.service.AccountIncomeService;
 import com.ruoyi.basic.mapper.CustomerMapper;
+import com.ruoyi.basic.mapper.ProductModelMapper;
 import com.ruoyi.basic.pojo.Customer;
+import com.ruoyi.basic.pojo.ProductModel;
 import com.ruoyi.common.enums.FileNameType;
 import com.ruoyi.common.exception.base.BaseException;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.other.mapper.TempFileMapper;
 import com.ruoyi.other.pojo.TempFile;
-import com.ruoyi.production.mapper.SalesLedgerSchedulingMapper;
-import com.ruoyi.production.pojo.SalesLedgerScheduling;
+import com.ruoyi.production.dto.ProductStructureDto;
+import com.ruoyi.production.mapper.*;
+import com.ruoyi.production.pojo.*;
 import com.ruoyi.project.system.domain.SysDept;
 import com.ruoyi.project.system.mapper.SysDeptMapper;
+import com.ruoyi.quality.mapper.QualityInspectMapper;
+import com.ruoyi.quality.pojo.QualityInspect;
 import com.ruoyi.sales.dto.MonthlyAmountDto;
 import com.ruoyi.sales.dto.SalesLedgerDto;
 import com.ruoyi.sales.mapper.*;
@@ -84,6 +89,33 @@
     private final SalesLedgerSchedulingMapper salesLedgerSchedulingMapper;
     private final InvoiceRegistrationProductMapper invoiceRegistrationProductMapper;
 
+    private final SalesLedgerWorkMapper salesLedgerWorkMapper;
+
+    private final SalesLedgerProductionAccountingMapper  salesLedgerProductionAccountingMapper;
+
+    private final InvoiceRegistrationProductMapper invoiceRegistrationProductMapper;
+
+    private final InvoiceRegistrationMapper invoiceRegistrationMapper;
+
+    private final ProductOrderMapper productOrderMapper;
+
+    private final ProcessRouteMapper processRouteMapper;
+    private final ProductProcessRouteMapper productProcessRouteMapper;
+
+    private final ProcessRouteItemMapper processRouteItemMapper;
+
+    private final ProductProcessRouteItemMapper productProcessRouteItemMapper;
+
+    private final ProductWorkOrderMapper productWorkOrderMapper;
+
+    private final ProductionProductMainMapper productionProductMainMapper;
+
+    private final ProductionProductOutputMapper productionProductOutputMapper;
+
+    private final ProductionProductInputMapper productionProductInputMapper;
+
+    private final QualityInspectMapper qualityInspectMapper;
+
     @Autowired
     private SysDeptMapper sysDeptMapper;
 
@@ -95,6 +127,10 @@
     private static final long LOCK_EXPIRE_TIME = 30;  // 閿佽嚜鍔ㄨ繃鏈熸椂闂达紙绉掞級
 
     private final RedisTemplate<String, String> redisTemplate;
+    @Autowired
+    private ProductModelMapper productModelMapper;
+    @Autowired
+    private ProductStructureMapper productStructureMapper;
 
     @Override
     public List<SalesLedger> selectSalesLedgerList(SalesLedgerDto salesLedgerDto) {
@@ -125,7 +161,8 @@
 
         // 3.鏌ヨ涓婁紶鏂囦欢
         LambdaQueryWrapper<CommonFile> salesLedgerFileWrapper = new LambdaQueryWrapper<>();
-        salesLedgerFileWrapper.eq(CommonFile::getCommonId, salesLedger.getId());
+        salesLedgerFileWrapper.eq(CommonFile::getCommonId, salesLedger.getId())
+                .eq(CommonFile::getType, FileNameType.SALE.getValue());
         List<CommonFile> salesLedgerFiles = commonFileMapper.selectList(salesLedgerFileWrapper);
 
         // 4. 杞崲 DTO
@@ -348,29 +385,138 @@
         if (CollectionUtils.isEmpty(idList)) {
             return 0;
         }
-        // 鐢熶骇璁㈠崟鏈夊緟鎺掍骇鏁版嵁锛屽彴璐︿笉鍙垹闄�
-        LambdaQueryWrapper<SalesLedgerScheduling> salesLedgerSchedulingLambdaQueryWrapper = new LambdaQueryWrapper<SalesLedgerScheduling>()
-                .in(SalesLedgerScheduling::getSalesLedgerId, idList);
-        if (salesLedgerSchedulingMapper.selectCount(salesLedgerSchedulingLambdaQueryWrapper) > 0) {
-            throw new BaseException("鏈夋帓浜ф暟鎹紝涓嶅彲鍒犻櫎");
+        // 鍒犻櫎閿�鍞鐞嗘暟鎹�
+        LambdaQueryWrapper<SalesLedgerProduct> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(SalesLedgerProduct::getSalesLedgerId, idList)
+                .select(SalesLedgerProduct::getId);
+
+        List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(queryWrapper);
+        List<Long> productIds = products.stream()
+                .map(SalesLedgerProduct::getId)
+                .collect(Collectors.toList());
+
+        //鎵归噺鏌ヨproductOrder
+        List<ProductOrder> productOrders = productOrderMapper.selectList(
+                new LambdaQueryWrapper<ProductOrder>()
+                        .in(ProductOrder::getProductModelId, productIds)
+        );
+
+        if (!org.springframework.util.CollectionUtils.isEmpty(productOrders)) {
+            List<Long> orderIds = productOrders.stream()
+                    .map(ProductOrder::getId)
+                    .collect(Collectors.toList());
+
+            // 鎵归噺鏌ヨprocessRouteItems
+            List<ProductProcessRouteItem> allRouteItems = productProcessRouteItemMapper.selectList(
+                    new LambdaQueryWrapper<ProductProcessRouteItem>()
+                            .in(ProductProcessRouteItem::getProductOrderId, orderIds)
+            );
+
+            if (!CollectionUtils.isEmpty(allRouteItems)) {
+                // 鑾峰彇瑕佸垹闄ょ殑宸ュ簭椤笽D
+                List<Long> routeItemIds = allRouteItems.stream()
+                        .map(ProductProcessRouteItem::getId)
+                        .collect(Collectors.toList());
+
+                // 鏌ヨ鍏宠仈鐨勫伐鍗旾D
+                List<ProductWorkOrder> workOrders = productWorkOrderMapper.selectList(
+                        new LambdaQueryWrapper<ProductWorkOrder>()
+                                .in(ProductWorkOrder::getProductProcessRouteItemId, routeItemIds)
+                );
+                if (!CollectionUtils.isEmpty(workOrders)) {
+                    List<Long> workOrderIds = workOrders.stream()
+                            .map(ProductWorkOrder::getId)
+                            .collect(Collectors.toList());
+
+                    // 鏌ヨ鍏宠仈鐨勭敓浜т富琛↖D
+                    List<ProductionProductMain> productMains = productionProductMainMapper.selectList(
+                            new LambdaQueryWrapper<ProductionProductMain>()
+                                    .in(ProductionProductMain::getWorkOrderId, workOrderIds)
+                    );
+                    List<Long> productMainIds = productMains.stream()
+                            .map(ProductionProductMain::getId)
+                            .collect(Collectors.toList());
+
+                    // 鍒犻櫎浜у嚭琛ㄣ�佹姇鍏ヨ〃鏁版嵁
+                    if (!CollectionUtils.isEmpty(productMainIds)) {
+                        productionProductOutputMapper.deleteByProductMainIds(productMainIds);
+                        productionProductInputMapper.deleteByProductMainIds(productMainIds);
+                        List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(
+                                new LambdaQueryWrapper<QualityInspect>()
+                                        .in(QualityInspect::getProductMainId, productMainIds)
+                        );
+                        qualityInspects.forEach(qualityInspect -> {
+                            //inspectState=1 宸叉彁浜� 涓嶈兘鍒犻櫎
+                            if(qualityInspect.getInspectState() == 1){
+                                throw new RuntimeException("宸叉彁浜ょ殑妫�楠屽崟涓嶈兘鍒犻櫎");
+                            }
+                        });
+                        qualityInspectMapper.deleteByProductMainIds(productMainIds);
+                    }
+
+                    // 鍒犻櫎鐢熶骇涓昏〃鏁版嵁
+                    productionProductMainMapper.deleteByWorkOrderIds(workOrderIds);
+
+                    // 鍒犻櫎宸ュ崟鏁版嵁
+                    productWorkOrderMapper.delete(new LambdaQueryWrapper<ProductWorkOrder>()
+                            .in(ProductWorkOrder::getProductProcessRouteItemId, routeItemIds));
+                }
+            }
+            // 鎵归噺鍒犻櫎processRouteItem
+            productProcessRouteItemMapper.delete(new LambdaQueryWrapper<ProductProcessRouteItem>()
+                    .in(ProductProcessRouteItem::getProductOrderId, orderIds));
+
+            // 鎵归噺鍒犻櫎productProcessRoute
+            productProcessRouteMapper.delete(new LambdaQueryWrapper<ProductProcessRoute>()
+                    .in(ProductProcessRoute::getProductOrderId, orderIds));
+
+            // 鎵归噺鍒犻櫎productOrder
+            productOrderMapper.delete(new LambdaQueryWrapper<ProductOrder>()
+                    .in(ProductOrder::getProductModelId, productIds));
         }
-        // 1. 鍏堝垹闄ゅ瓙琛ㄦ暟鎹�
-        LambdaQueryWrapper<SalesLedgerProduct> productWrapper = new LambdaQueryWrapper<>();
-        productWrapper.in(SalesLedgerProduct::getSalesLedgerId, idList);
-        salesLedgerProductMapper.delete(productWrapper);
+
+        // 鎵归噺鍒犻櫎浜у搧瀛愯〃
+        if (!productIds.isEmpty()) {
+            salesLedgerProductMapper.deleteBatchIds(productIds);
+        }
+
+        LambdaQueryWrapper<InvoiceRegistrationProduct> wrapper = new LambdaQueryWrapper<>();
+        wrapper.in(InvoiceRegistrationProduct::getSalesLedgerId, idList);
+        List<InvoiceRegistrationProduct> invoiceRegistrationProducts = invoiceRegistrationProductMapper.selectList(wrapper);
+        List<Integer> invoiceLedgerIds = new ArrayList<>();
+        if(CollectionUtils.isNotEmpty(invoiceRegistrationProducts)){
+            LambdaQueryWrapper<InvoiceLedger> wrapperOne = new LambdaQueryWrapper<>();
+            wrapperOne.in(InvoiceLedger::getInvoiceRegistrationProductId, invoiceRegistrationProducts.stream().map(InvoiceRegistrationProduct::getId).collect(Collectors.toList()));
+            List<InvoiceLedger> invoiceLedgers = invoiceLedgerMapper.selectList(wrapperOne);
+            if(CollectionUtils.isNotEmpty(invoiceLedgers)){
+                invoiceLedgerIds = invoiceLedgers.stream().map(InvoiceLedger::getId).collect(Collectors.toList());
+            }
+            invoiceLedgerMapper.delete(wrapperOne);
+        }
+        invoiceRegistrationProductMapper.delete(wrapper);
+        LambdaQueryWrapper<InvoiceRegistration> wrapperTwo = new LambdaQueryWrapper<>();
+        wrapperTwo.in(InvoiceRegistration::getSalesLedgerId, idList);
+        invoiceRegistrationMapper.delete(wrapperTwo);
+
+        if(CollectionUtils.isNotEmpty(invoiceLedgerIds)){
+            LambdaQueryWrapper<ReceiptPayment> wrapperTree = new LambdaQueryWrapper<>();
+            wrapperTree.in(ReceiptPayment::getInvoiceLedgerId, invoiceLedgerIds);
+            receiptPaymentMapper.delete(wrapperTree);
+        }
+
+        // 鍒犻櫎鐢熶骇绠℃帶鏁版嵁
         // 鍒犻櫎鐢熶骇璁㈠崟鏁版嵁
         LambdaQueryWrapper<SalesLedgerScheduling> in = new LambdaQueryWrapper<SalesLedgerScheduling>()
                 .in(SalesLedgerScheduling::getSalesLedgerId, idList);
         salesLedgerSchedulingMapper.delete(in);
-        LambdaQueryWrapper<InvoiceRegistrationProduct> InvoiceRegistrationProductWrapper = new LambdaQueryWrapper<>();
-        InvoiceRegistrationProductWrapper.in(InvoiceRegistrationProduct::getSalesLedgerId, idList);
-        List<InvoiceRegistrationProduct> invoiceRegistrationProducts = invoiceRegistrationProductMapper.selectList(InvoiceRegistrationProductWrapper);
-        if (!CollectionUtils.isEmpty(invoiceRegistrationProducts)) {
-            List<Integer> InvoiceRegistrationProductIds = invoiceRegistrationProducts.stream().map(InvoiceRegistrationProduct::getId).collect(Collectors.toList());
-            LambdaQueryWrapper<InvoiceLedger> invoiceLedgerQuery = new LambdaQueryWrapper<>();
-            invoiceLedgerQuery.in(InvoiceLedger::getInvoiceRegistrationProductId, InvoiceRegistrationProductIds);
-            invoiceLedgerMapper.delete(invoiceLedgerQuery);
-        }
+        // 鍒犻櫎鐢熶骇娲惧伐鏁版嵁
+        LambdaQueryWrapper<SalesLedgerWork> workOrderWrapper = new LambdaQueryWrapper<>();
+        workOrderWrapper.in(SalesLedgerWork::getSalesLedgerId, idList);
+        salesLedgerWorkMapper.delete(workOrderWrapper);
+        // 鍒犻櫎鐢熶骇鎶ュ伐鏁版嵁
+        LambdaQueryWrapper<SalesLedgerProductionAccounting> reportWrapper = new LambdaQueryWrapper<>();
+        reportWrapper.in(SalesLedgerProductionAccounting::getSalesLedgerId, idList);
+        salesLedgerProductionAccountingMapper.delete(reportWrapper);
         // 2. 鍐嶅垹闄や富琛ㄦ暟鎹�
         return salesLedgerMapper.deleteBatchIds(idList);
     }
@@ -410,8 +556,8 @@
                 salesLedgerMapper.updateById(salesLedger);
                 SalesLedger salesLedgerDB = salesLedgerMapper.selectById(salesLedger.getId());
                 List<AccountIncome> accountIncomeDBs = accountIncomeService.getByInvoiceNumberList(salesLedger.getSalesContractNo());
-                if (!CollectionUtils.isEmpty(accountIncomeDBs)) {
-                    accountIncomeDBs.forEach(accountIncomeDB ->{
+                if (!org.springframework.util.CollectionUtils.isEmpty(accountIncomeDBs)) {
+                    accountIncomeDBs.forEach(accountIncomeDB -> {
                         accountIncomeDB.setCustomerName(salesLedgerDB.getCustomerName());
                         accountIncomeDB.setIncomeMoney(salesLedgerDB.getContractAmount());
                         accountIncomeDB.setIncomeDescribed("閿�鍞悎鍚岋細" + salesLedgerDB.getSalesContractNo());
@@ -548,6 +694,79 @@
                 salesLedgerProduct.setNoInvoiceNum(salesLedgerProduct.getQuantity());
                 salesLedgerProduct.setNoInvoiceAmount(salesLedgerProduct.getTaxInclusiveTotalPrice());
                 salesLedgerProductMapper.insert(salesLedgerProduct);
+
+                ProductOrder productOrder = new ProductOrder();
+                productOrder.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId());
+                productOrder.setProductModelId(salesLedgerProduct.getId());
+                productOrder.setNpsNo("SC" + String.format("%08d", salesLedgerProduct.getId()));
+                productOrder.setQuantity(salesLedgerProduct.getQuantity());//闇�姹傛暟閲�
+                productOrder.setCompleteQuantity(BigDecimal.ZERO);//瀹屾垚鏁伴噺
+                productOrderMapper.insert(productOrder);
+
+                ProcessRoute processRoute = processRouteMapper.selectOne(new QueryWrapper<ProcessRoute>().lambda().eq(ProcessRoute::getProductModelId, salesLedgerProduct.getProductModelId()));
+                List<ProductStructureDto> productStructureDtos = productStructureMapper.listByproductModelId(salesLedgerProduct.getProductModelId());
+                if (processRoute != null) {
+                    //鏂板鐢熶骇璁㈠崟宸ヨ壓璺嚎涓昏〃
+                    ProductProcessRoute productProcessRoute = new ProductProcessRoute();
+                    productProcessRoute.setProductModelId(processRoute.getProductModelId());
+                    productProcessRoute.setProcessRouteCode(processRoute.getProcessRouteCode());
+                    productProcessRoute.setProductOrderId(productOrder.getId());
+                    productProcessRoute.setBomId(processRoute.getBomId());
+                    productProcessRouteMapper.insert(productProcessRoute);
+                    //鏂板鐢熶骇璁㈠崟宸ヨ壓璺嚎瀛愯〃
+                    List<ProcessRouteItem> processRouteItems = processRouteItemMapper.selectList(new QueryWrapper<ProcessRouteItem>().lambda().eq(ProcessRouteItem::getRouteId, processRoute.getId()));
+                    // 鐢熸垚褰撳墠鏃ユ湡鐨勫墠缂�锛氬勾鏈堟棩
+                    String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+                    for (ProcessRouteItem processRouteItem : processRouteItems) {
+                        ProductProcessRouteItem productProcessRouteItem = new ProductProcessRouteItem();
+                        productProcessRouteItem.setProductModelId(processRouteItem.getProductModelId());
+                        productProcessRouteItem.setProcessId(processRouteItem.getProcessId());
+                        productProcessRouteItem.setProductOrderId(productOrder.getId());
+                        productProcessRouteItem.setProductRouteId(productProcessRoute.getId());
+                        productProcessRouteItem.setDragSort(processRouteItem.getDragSort());
+                        int insert = productProcessRouteItemMapper.insert(productProcessRouteItem);
+                        if (insert > 0) {
+                            // 鏌ヨ浠婃棩宸插瓨鍦ㄧ殑鏈�澶у伐鍗曞彿
+                            QueryWrapper<ProductWorkOrder> queryWrapper = new QueryWrapper<>();
+                            queryWrapper.likeRight("work_order_no", datePrefix)
+                                    .orderByDesc("work_order_no")
+                                    .last("LIMIT 1");
+
+                            ProductWorkOrder lastWorkOrder = productWorkOrderMapper.selectOne(queryWrapper);
+
+                            int sequenceNumber = 1; // 榛樿搴忓彿
+                            if (lastWorkOrder != null && lastWorkOrder.getWorkOrderNo() != null) {
+                                String lastNo = lastWorkOrder.getWorkOrderNo().toString();
+                                if (lastNo.startsWith(datePrefix)) {
+                                    String seqStr = lastNo.substring(datePrefix.length());
+                                    try {
+                                        sequenceNumber = Integer.parseInt(seqStr) + 1;
+                                    } catch (NumberFormatException e) {
+                                        sequenceNumber = 1;
+                                    }
+                                }
+                            }
+                            // 鐢熸垚瀹屾暣鐨勫伐鍗曞彿
+                            String workOrderNoStr = String.format("%s%03d", datePrefix, sequenceNumber);
+                            ProductWorkOrder productWorkOrder = new ProductWorkOrder();
+                            productStructureDtos.stream().forEach(productStructureDto -> {
+                                if (productStructureDto.getProductModelId().equals(productProcessRouteItem.getProductModelId())){
+                                    productWorkOrder.setPlanQuantity(productWorkOrder.getPlanQuantity());
+                                }
+                            });
+                            if (Objects.equals(productProcessRouteItem.getProductModelId(), salesLedgerProduct.getProductModelId())) {
+                                productWorkOrder.setPlanQuantity(salesLedgerProduct.getQuantity());
+                            }
+                            productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
+                            productWorkOrder.setProductOrderId(productOrder.getId());
+                            productWorkOrder.setWorkOrderNo(workOrderNoStr);
+                            productWorkOrder.setStatus(1);
+                            productWorkOrderMapper.insert(productWorkOrder);
+                        }
+                    }
+                    productOrder.setRouteId(processRoute.getId());
+                    productOrderMapper.updateById(productOrder);
+                }
             }
         }
     }
@@ -601,12 +820,12 @@
 
             return datePart + String.format("%03d", nextSequence);
         } finally {
-            // 3. 閲婃斁閿侊紙浣跨敤Lua鑴氭湰淇濊瘉鍘熷瓙鎬э紝閬垮厤璇垹鍏朵粬绾跨▼鐨勯攣锛�
+            // 3. 閲婃斁閿�
             String luaScript = "if redis.call('GET', KEYS[1]) == ARGV[1] then return redis.call('DEL', KEYS[1]) else return 0 end";
             redisTemplate.execute(
                     new DefaultRedisScript<>(luaScript, Long.class),
                     Collections.singletonList(lockKey),
-                    lockValue // 鍙湁鎸佹湁鐩稿悓鍊肩殑绾跨▼鎵嶈兘鍒犻櫎閿�
+                    lockValue
             );
         }
     }
@@ -615,7 +834,7 @@
         if (sequences.isEmpty()) {
             return 1;
         }
-        // 鎺掑簭鍚庢煡鎵剧涓�涓己澶辩殑姝f暣鏁帮紙涓庡師閫昏緫涓�鑷达級
+        // 鎺掑簭鍚庢煡鎵剧涓�涓己澶辩殑姝f暣鏁�
         sequences.sort(Integer::compareTo);
         int next = 1;
         for (int seq : sequences) {
@@ -645,14 +864,13 @@
                 .filter(Objects::nonNull)
                 .reduce(BigDecimal.ZERO, BigDecimal::add);
 
-        // 鏋勯�犱富琛ㄦ洿鏂板璞★紙鏀寔浠绘剰涓昏〃绫诲瀷锛�
+        // 鏋勯�犱富琛ㄦ洿鏂板璞�
         try {
             S entity = mainEntityClass.getDeclaredConstructor().newInstance();
             Field idField = mainEntityClass.getDeclaredField("id");
             idField.setAccessible(true);
             idField.set(entity, mainId);
 
-            // 璁剧疆 contractAmount 瀛楁锛屾敞鎰忚繖閲屽亣璁惧瓧娈靛悕涓� "contractAmount"
             Field amountField = mainEntityClass.getDeclaredField("contractAmount");
             amountField.setAccessible(true);
             amountField.set(entity, totalAmount);
diff --git a/src/main/java/com/ruoyi/sales/service/impl/ShipmentApprovalServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/ShipmentApprovalServiceImpl.java
new file mode 100644
index 0000000..0df4c34
--- /dev/null
+++ b/src/main/java/com/ruoyi/sales/service/impl/ShipmentApprovalServiceImpl.java
@@ -0,0 +1,32 @@
+package com.ruoyi.sales.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.sales.mapper.ShipmentApprovalMapper;
+import com.ruoyi.sales.mapper.ShippingInfoMapper;
+import com.ruoyi.sales.pojo.ShipmentApproval;
+import com.ruoyi.sales.pojo.ShippingInfo;
+import com.ruoyi.sales.service.ShipmentApprovalService;
+import com.ruoyi.sales.service.ShippingInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author :yys
+ * @date : 2025/10/22 9:33
+ */
+@Service
+@Slf4j
+public class ShipmentApprovalServiceImpl extends ServiceImpl<ShipmentApprovalMapper, ShipmentApproval> implements ShipmentApprovalService {
+
+    @Autowired
+    private ShipmentApprovalMapper shipmentApprovalMapper;
+
+    @Override
+    public IPage<ShipmentApproval> listPage(Page page, ShipmentApproval req) {
+        IPage<ShipmentApproval> listPage = shipmentApprovalMapper.listPage(page, req);
+        return listPage;
+    }
+}
diff --git a/src/main/java/com/ruoyi/staff/controller/StaffOnJobController.java b/src/main/java/com/ruoyi/staff/controller/StaffOnJobController.java
index 7d73759..7ddf17d 100644
--- a/src/main/java/com/ruoyi/staff/controller/StaffOnJobController.java
+++ b/src/main/java/com/ruoyi/staff/controller/StaffOnJobController.java
@@ -8,12 +8,15 @@
 import com.ruoyi.staff.pojo.StaffOnJob;
 import com.ruoyi.staff.service.IStaffJoinLeaveRecordService;
 import com.ruoyi.staff.service.IStaffOnJobService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
 import java.util.List;
 
 /**
@@ -21,6 +24,7 @@
  */
 @RestController
 @RequestMapping("/staff/staffOnJob")
+@Api(tags = "鍛樺伐鍙拌处/鍚堝悓绠$悊")
 public class StaffOnJobController {
 
     @Resource
@@ -79,5 +83,16 @@
         staffOnJobService.staffOnJobExport(response, staffOnJob);
     }
 
+    /**
+     * word妯℃澘鍚堝悓鍦ㄨ亴鍛樺伐瀵煎嚭
+     * @param response
+     * @param staffOnJob
+     */
+    @PostMapping("/exportCopy")
+    @ApiOperation("word妯℃澘鍚堝悓鍦ㄨ亴鍛樺伐瀵煎嚭")
+    public AjaxResult exportCopy(HttpServletResponse response,@RequestBody StaffOnJob staffOnJob) throws Exception{
+       return AjaxResult.success(staffOnJobService.exportCopy(response, staffOnJob));
+    }
+
 
 }
diff --git a/src/main/java/com/ruoyi/staff/controller/StaffSchedulingController.java b/src/main/java/com/ruoyi/staff/controller/StaffSchedulingController.java
index 9f5d82c..a54096a 100644
--- a/src/main/java/com/ruoyi/staff/controller/StaffSchedulingController.java
+++ b/src/main/java/com/ruoyi/staff/controller/StaffSchedulingController.java
@@ -53,6 +53,14 @@
         return AjaxResult.success();
     }
 
+    /**
+     * 鑾峰彇褰撳墠鐢ㄦ埛鏈�鏂版帓鐝褰�
+     */
+    @GetMapping("/getCurrentUserLatestScheduling")
+    public AjaxResult getCurrentUserLatestScheduling(){
+        return AjaxResult.success(staffSchedulingService.getCurrentUserLatestScheduling());
+    }
+
     @Log(title = "瀵煎嚭浜哄憳鎺掔彮鍒楄〃", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     public void export(HttpServletResponse response ) {
diff --git a/src/main/java/com/ruoyi/staff/dto/SaveStaffSchedulingDto.java b/src/main/java/com/ruoyi/staff/dto/SaveStaffSchedulingDto.java
index 25a41b3..7e57745 100644
--- a/src/main/java/com/ruoyi/staff/dto/SaveStaffSchedulingDto.java
+++ b/src/main/java/com/ruoyi/staff/dto/SaveStaffSchedulingDto.java
@@ -1,5 +1,6 @@
 package com.ruoyi.staff.dto;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -21,27 +22,34 @@
 public class SaveStaffSchedulingDto implements Serializable {
     private Integer id;
 
-    @NotNull(message = "蹇呴』瑕侀�夋嫨鍛樺伐")
-    private Integer staffId;
+//    @NotNull(message = "蹇呴』瑕侀�夋嫨鍛樺伐")
+    private String staffId;
 
-    @NotNull(message = "閮ㄩ棬id涓嶈兘涓虹┖!")
+    /**
+     * 鍗堜紤鏃堕棿
+     */
+    private String lunchTime;
+
+    private String staffName;
+
+//    @NotNull(message = "閮ㄩ棬id涓嶈兘涓虹┖!")
     private Integer department;
 
-    @NotNull(message = "鐝id涓嶈兘涓虹┖!")
+//    @NotNull(message = "鐝id涓嶈兘涓虹┖!")
     private Integer shiftType;
 
-    @NotNull(message = "宸ヤ綔鏃ヤ笉鑳戒负绌�!")
+//    @NotNull(message = "宸ヤ綔鏃ヤ笉鑳戒负绌�!")
     private Date workDate;
 
-    @NotNull(message = "涓婄彮鏃堕棿涓嶈兘涓虹┖!")
+//    @NotNull(message = "涓婄彮鏃堕棿涓嶈兘涓虹┖!")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime workStartTime;
 
-    @NotNull(message = "涓嬬彮鏃堕棿涓嶈兘涓虹┖!")
+//    @NotNull(message = "涓嬬彮鏃堕棿涓嶈兘涓虹┖!")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime workEndTime;
 
-    @NotNull(message = "宸ユ椂涓嶈兘涓虹┖!")
+//    @NotNull(message = "宸ユ椂涓嶈兘涓虹┖!")
     private Integer status;
 
     private String remark;
diff --git a/src/main/java/com/ruoyi/staff/dto/StaffSchedulingDto.java b/src/main/java/com/ruoyi/staff/dto/StaffSchedulingDto.java
index ad8b812..727b773 100644
--- a/src/main/java/com/ruoyi/staff/dto/StaffSchedulingDto.java
+++ b/src/main/java/com/ruoyi/staff/dto/StaffSchedulingDto.java
@@ -1,6 +1,7 @@
 package com.ruoyi.staff.dto;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.framework.aspectj.lang.annotation.Excel;
@@ -24,7 +25,14 @@
     /**
      * 鍛樺伐ID
      */
-    private Integer staffId;
+    private String staffId;
+
+
+    /**
+     * 鍗堜紤鏃堕棿
+     */
+    @Excel(name = "鍗堜紤鏃堕棿")
+    private String lunchTime;
 
     @Excel(name = "鍛樺伐鍚嶇О")
     private String staffName;
diff --git a/src/main/java/com/ruoyi/staff/pojo/StaffJoinLeaveRecord.java b/src/main/java/com/ruoyi/staff/pojo/StaffJoinLeaveRecord.java
index 55be343..4b4e22d 100644
--- a/src/main/java/com/ruoyi/staff/pojo/StaffJoinLeaveRecord.java
+++ b/src/main/java/com/ruoyi/staff/pojo/StaffJoinLeaveRecord.java
@@ -10,6 +10,7 @@
 
 import javax.validation.constraints.NotBlank;
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.Date;
 
@@ -148,6 +149,53 @@
     @Excel(name = "鍚堝悓缁撴潫鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd")
     private Date contractEndTime;
 
+
+    /**
+     * 寮�濮嬭瘯鐢ㄦ棩鏈�
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "寮�濮嬭瘯鐢ㄦ棩鏈�", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date trialStartDate;
+
+    /**
+     * 璇曠敤缁撴潫鏃ユ湡
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "璇曠敤缁撴潫鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date trialEndDate;
+
+    /**
+     * 绛捐鏃堕棿
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "绛捐鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date signDate;
+
+    /**
+     * 宸ヨ祫鎶ラ叕閫夋嫨鏉℃
+     */
+//    @Excel(name = "宸ヨ祫鎶ラ叕閫夋嫨鏉℃")
+    private String salarySelect;
+
+    /**
+     * 璇曠敤鏈熷伐璧�
+     */
+    @Excel(name = "璇曠敤鏈熷伐璧�")
+    private BigDecimal proSalary;
+
+    /**
+     * 鍔冲姩鍚堝悓鏈熼檺閫夋嫨
+     */
+//    @Excel(name = "鍔冲姩鍚堝悓鏈熼檺閫夋嫨")
+    private String dateSelect;
+
+    /**
+     * 澶囨敞锛堢鍒╁緟閬囷級
+     */
+    @Excel(name = "澶囨敞锛堢鍒╁緟閬囷級")
+    private String remark;
+
+
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
     @TableField(fill = FieldFill.INSERT)
     private LocalDateTime createTime;
diff --git a/src/main/java/com/ruoyi/staff/pojo/StaffOnJob.java b/src/main/java/com/ruoyi/staff/pojo/StaffOnJob.java
index 438857f..1760ede 100644
--- a/src/main/java/com/ruoyi/staff/pojo/StaffOnJob.java
+++ b/src/main/java/com/ruoyi/staff/pojo/StaffOnJob.java
@@ -6,8 +6,10 @@
 import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.Date;
 
@@ -128,11 +130,63 @@
      */
     @JsonFormat(pattern = "yyyy-MM-dd")
     @Excel(name = "鍚堝悓鍒版湡鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
     private Date contractExpireTime;
+
+    /**
+     * 缁撴潫璇曠敤鏃堕棿
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "缁撴潫璇曠敤鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date trialEndDate;
+
+    /**
+     * 寮�濮嬭瘯鐢ㄦ棩鏈�
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "寮�濮嬭瘯鐢ㄦ棩鏈�", width = 30, dateFormat = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date trialStartDate;
+
+    /**
+     * 绛捐鏃堕棿
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "绛捐鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date signDate;
+
+    /**
+     * 宸ヨ祫鎶ラ叕閫夋嫨鏉℃
+     */
+//    @Excel(name = "宸ヨ祫鎶ラ叕閫夋嫨鏉℃")
+    private String salarySelect;
+
+    /**
+     * 璇曠敤鏈熷伐璧�
+     */
+    @Excel(name = "璇曠敤鏈熷伐璧�")
+    private BigDecimal proSalary;
+
+    /**
+     * 鍔冲姩鍚堝悓鏈熼檺閫夋嫨
+     */
+//    @Excel(name = "鍔冲姩鍚堝悓鏈熼檺閫夋嫨")
+    private String dateSelect;
+
+    /**
+     * 澶囨敞锛堢鍒╁緟閬囷級
+     */
+    @Excel(name = "澶囨敞锛堢鍒╁緟閬囷級")
+    private String remark;
+
 
 
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
     @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime createTime;
 
     @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
@@ -141,6 +195,8 @@
 
     @ApiModelProperty(value = "淇敼鏃堕棿")
     @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime updateTime;
 
     @ApiModelProperty(value = "淇敼鐢ㄦ埛")
diff --git a/src/main/java/com/ruoyi/staff/pojo/StaffScheduling.java b/src/main/java/com/ruoyi/staff/pojo/StaffScheduling.java
index 89be920..a00040c 100644
--- a/src/main/java/com/ruoyi/staff/pojo/StaffScheduling.java
+++ b/src/main/java/com/ruoyi/staff/pojo/StaffScheduling.java
@@ -24,7 +24,19 @@
      * 鍛樺伐ID
      */
     @TableField(value = "staff_id")
-    private Integer staffId;
+    private String staffId;
+
+    /**
+     * 鎺掔彮浜哄憳
+     */
+    @TableField(value = "staff_name")
+    private String staffName;
+
+    /**
+     * 鍗堜紤鏃堕棿
+     */
+    @TableField(value = "lunch_time")
+    private String lunchTime;
 
     /**
      * 閮ㄩ棬
@@ -44,6 +56,7 @@
     @TableField(value = "work_date")
     private Date workDate;
 
+
     /**
      * 寮�濮嬪伐浣滄椂闂�
      */
diff --git a/src/main/java/com/ruoyi/staff/service/IStaffOnJobService.java b/src/main/java/com/ruoyi/staff/service/IStaffOnJobService.java
index 2cef9f2..ecad436 100644
--- a/src/main/java/com/ruoyi/staff/service/IStaffOnJobService.java
+++ b/src/main/java/com/ruoyi/staff/service/IStaffOnJobService.java
@@ -22,4 +22,6 @@
     List<StaffJoinLeaveRecord> staffOnJobList();
 
     Boolean importData(MultipartFile file);
+
+    String exportCopy(HttpServletResponse response, StaffOnJob staffOnJob) throws Exception;
 }
diff --git a/src/main/java/com/ruoyi/staff/service/StaffSchedulingService.java b/src/main/java/com/ruoyi/staff/service/StaffSchedulingService.java
index b12faa1..177485d 100644
--- a/src/main/java/com/ruoyi/staff/service/StaffSchedulingService.java
+++ b/src/main/java/com/ruoyi/staff/service/StaffSchedulingService.java
@@ -17,4 +17,6 @@
     void saveStaffScheduling(SaveStaffSchedulingDto saveStaffSchedulingDto);
 
     IPage<StaffSchedulingDto> listPage(SearchSchedulingVo vo);
+
+    StaffScheduling getCurrentUserLatestScheduling();
 }
diff --git a/src/main/java/com/ruoyi/staff/service/impl/StaffJoinLeaveRecordServiceImpl.java b/src/main/java/com/ruoyi/staff/service/impl/StaffJoinLeaveRecordServiceImpl.java
index d00b3c4..41efb68 100644
--- a/src/main/java/com/ruoyi/staff/service/impl/StaffJoinLeaveRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/staff/service/impl/StaffJoinLeaveRecordServiceImpl.java
@@ -162,13 +162,16 @@
             /*鍏ヨ亴*/
             StaffOnJob job = staffOnJobMapper.selectList(Wrappers.<StaffOnJob>lambdaQuery()
                     .eq(StaffOnJob::getStaffNo, staffJoinLeaveRecord.getStaffNo())).get(0);
+            // 澧炲姞浜嗗悎鍚屾柟妗堟墍浠ュ幓鎺夎繖涓垽鏂�
             //濡傛灉鏇存敼鐨勫悎鍚屽埌鏈熸椂闂存洿涔呭垯鏇存柊,濡傛灉娌℃湁灏变笉鐢ㄦ洿鏂�
 //            if (staffJoinLeaveRecord.getContractEndTime().compareTo(job.getContractExpireTime())>0) {
 //                BeanUtils.copyProperties(staffJoinLeaveRecord,job,ignoreProperties);
 //                staffOnJobMapper.updateById(job);
 //            }
-            BeanUtils.copyProperties(staffJoinLeaveRecord,job,ignoreProperties);
-            staffOnJobMapper.updateById(job);
+            if(job != null){
+                BeanUtils.copyProperties(staffJoinLeaveRecord,job,ignoreProperties);
+                staffOnJobMapper.updateById(job);
+            }
         }else {
             /*绂昏亴*/
             //绂昏亴鐨勭紪杈戜笉浼氬奖鍝嶅湪鑱岃〃
diff --git a/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java b/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
index 9fc8c43..890a547 100644
--- a/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
+++ b/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
@@ -6,19 +6,34 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.dto.WordDateDto;
 import com.ruoyi.staff.mapper.StaffJoinLeaveRecordMapper;
 import com.ruoyi.staff.mapper.StaffOnJobMapper;
 import com.ruoyi.staff.pojo.StaffJoinLeaveRecord;
 import com.ruoyi.staff.pojo.StaffOnJob;
 import com.ruoyi.staff.service.IStaffJoinLeaveRecordService;
 import com.ruoyi.staff.service.IStaffOnJobService;
+import freemarker.template.Configuration;
+import freemarker.template.Template;
+import freemarker.template.TemplateException;
 import lombok.AllArgsConstructor;
+
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.math.BigDecimal;
+import java.nio.charset.StandardCharsets;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 @AllArgsConstructor
 @Service
@@ -69,4 +84,85 @@
     }
 
 
+    @Override
+    public String exportCopy(HttpServletResponse response, StaffOnJob staffOnJob) throws Exception {
+        String url = "/javaWork/product-inventory-management/file/prod/" + staffOnJob.getStaffName() + "-鍔冲姩鍚堝悓涔�.docx";
+        Configuration cfg = new Configuration(Configuration.VERSION_2_3_32);
+        // 璁剧疆妯℃澘鏂囦欢鎵�鍦ㄧ洰褰曪紙缁濆璺緞锛屼緥濡傦細/templates/锛�
+        cfg.setClassForTemplateLoading(StaffOnJobServiceImpl.class, "/static");
+        cfg.setDefaultEncoding("UTF-8");
+        //2.瀹氫箟闇�瑕佸~鍏呯殑鍙橀噷
+        // 鈶� 鏋勯�犲憳宸ヤ俊鎭紙瀹為檯椤圭洰涓彲浠庢暟鎹簱/Excel璇诲彇锛�
+        WordDateDto staff = new WordDateDto();
+        BeanUtils.copyProperties(staffOnJob, staff);
+        // 閫氳繃鍚堝悓骞撮檺锛屽悎鍚屽埌鏈熸棩鏈熻绠楀悎鍚屽紑濮嬫棩鏈燂紝鍦ㄨ幏鍙栧紑濮嬫棩鏈燂紝缁撴潫鏃ユ湡鐨勫勾鏈堟棩鏁板瓧
+        // 鍚堝悓鍒版湡鏃ユ湡 - 鍚堝悓骞撮檺锛圖ate绫诲瀷锛�
+        // 1. 灏咲ate杞崲涓篒nstant锛堟椂闂存埑锛�
+        Instant instant = staff.getContractExpireTime().toInstant();
+
+        // 涔熷彲浠ユ寚瀹氬叿浣撴椂鍖猴紝渚嬪Asia/Shanghai锛�
+        LocalDate localDate = instant.atZone(ZoneId.of("Asia/Shanghai")).toLocalDate();  // 鍚堝悓缁撴潫鏃堕棿
+        LocalDate localDate1 = localDate.minusYears(Integer.parseInt(staff.getContractTerm()));// 鍚堝悓寮�濮嬫椂闂�
+
+        // 绛捐鏃ユ湡杞崲lcoaldate
+        LocalDate localDate2 = staff.getSignDate().toInstant().atZone(ZoneId.of("Asia/Shanghai")).toLocalDate();
+
+        // 璇曠敤鏃ユ湡杞崲lcoaldate
+        LocalDate localDate3 = staff.getTrialStartDate().toInstant().atZone(ZoneId.of("Asia/Shanghai")).toLocalDate();
+        LocalDate localDate4 = staff.getTrialEndDate().toInstant().atZone(ZoneId.of("Asia/Shanghai")).toLocalDate();
+
+        staff.setQyear(localDate2.getYear() + "");
+        staff.setQmoth(localDate2.getMonthValue() + "");
+        staff.setQday(localDate2.getDayOfMonth() + "");
+        if(staff.getDateSelect().equals("A")){
+            staff.setSyear(localDate1.getYear() + "");
+            staff.setSmoth(localDate1.getMonthValue() + "");
+            staff.setSday(localDate1.getDayOfMonth() + "");
+            staff.setEyear(localDate.getDayOfMonth() + "");
+            staff.setEmoth(localDate.getDayOfMonth() + "");
+            staff.setEday(localDate.getDayOfMonth() + "");
+
+            staff.setStyear(localDate3.getYear() + "");
+            staff.setStmoth(localDate3.getMonthValue() + "");
+            staff.setStday(localDate3.getDayOfMonth() + "");
+            staff.setSeyear(localDate4.getYear() + "");
+            staff.setSemoth(localDate4.getMonthValue() + "");
+            staff.setSeday(localDate4.getDayOfMonth() + "");
+        }else if (staff.getDateSelect().equals("B")){
+
+            staff.setBsyear(localDate1.getYear() + "");
+            staff.setBsmoth(localDate1.getMonthValue() + "");
+            staff.setBsday(localDate1.getDayOfMonth() + "");
+
+            staff.setBstyear(localDate3.getYear() + "");
+            staff.setBstmoth(localDate3.getMonthValue() + "");
+            staff.setBstday(localDate3.getDayOfMonth() + "");
+            staff.setBseyear(localDate4.getYear() + "");
+            staff.setBsemoth(localDate4.getMonthValue() + "");
+            staff.setBseday(localDate4.getDayOfMonth() + "");
+        }else if (staff.getDateSelect().equals("C")){
+            staff.setCsyear(localDate1.getYear() + "");
+            staff.setCsmoth(localDate1.getMonthValue() + "");
+            staff.setCsday(localDate1.getDayOfMonth() + "");
+        }
+
+        Map<String,Object> data = new HashMap<>();
+        data.put("item",staff);
+        //3.鍔犺浇XML 妯℃澘
+        Template template = cfg.getTemplate("鍔冲姩鍚堝悓涔�.xml");
+        //4.鐢熸垚濉厖鍚庣殑 XML 鍐呭
+        StringWriter out = new StringWriter();
+        template.process(data, out);
+        String filledXml = out.toString();
+        //5.灏哫ML鍐呭鍐欏叆浜や欢骞舵敼涓�.docx 鏍煎紡
+        File outputFile = new File(url);
+        try(FileOutputStream fos = new FileOutputStream(outputFile);
+            OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8)) {
+            osw.write(filledXml);
+        }
+        return url;
+    }
+
+
+
 }
diff --git a/src/main/java/com/ruoyi/staff/service/impl/StaffSchedulingServiceImpl.java b/src/main/java/com/ruoyi/staff/service/impl/StaffSchedulingServiceImpl.java
index b42d1fc..b05fc92 100644
--- a/src/main/java/com/ruoyi/staff/service/impl/StaffSchedulingServiceImpl.java
+++ b/src/main/java/com/ruoyi/staff/service/impl/StaffSchedulingServiceImpl.java
@@ -1,8 +1,11 @@
 package com.ruoyi.staff.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.SecurityUtils;
+import com.ruoyi.framework.security.LoginUser;
 import com.ruoyi.staff.dto.SaveStaffSchedulingDto;
 import com.ruoyi.staff.dto.StaffSchedulingDto;
 import com.ruoyi.staff.mapper.StaffSchedulingMapper;
@@ -54,6 +57,15 @@
 
         return staffSchedulingMapper.listPage(page, vo);
     }
+
+    @Override
+    public StaffScheduling getCurrentUserLatestScheduling() {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        return staffSchedulingMapper.selectOne(new LambdaQueryWrapper<StaffScheduling>()
+                .like(StaffScheduling::getStaffId,loginUser.getUserId())
+                .orderByDesc(StaffScheduling::getWorkEndTime)
+                .last("LIMIT 1"));
+    }
 }
 
 
diff --git a/src/main/resources/application-bdsm.yml b/src/main/resources/application-bdsm.yml
index 01b577d..d623a1d 100644
--- a/src/main/resources/application-bdsm.yml
+++ b/src/main/resources/application-bdsm.yml
@@ -62,7 +62,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://192.168.1.185:3306/product-inventory-management-bdsm?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://172.17.0.1:3306/product-inventory-management-bdsm?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: xd@123456..
       # 浠庡簱鏁版嵁婧�
@@ -135,7 +135,7 @@
   redis:
     # 鍦板潃
 #    host: 127.0.0.1
-    host: 192.168.1.185
+    host: 172.17.0.1
     # 绔彛锛岄粯璁や负6379
     port: 6379
     # 鏁版嵁搴撶储寮�
diff --git a/src/main/resources/application-bhmy.yml b/src/main/resources/application-bhmy.yml
index 98636dd..741e60b 100644
--- a/src/main/resources/application-bhmy.yml
+++ b/src/main/resources/application-bhmy.yml
@@ -62,7 +62,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://192.168.1.185:3306/product-inventory-management-bhmy?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://172.17.0.1:3306/product-inventory-management-bhmy?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: xd@123456..
       # 浠庡簱鏁版嵁婧�
@@ -135,7 +135,7 @@
   redis:
     # 鍦板潃
 #    host: 127.0.0.1
-    host: 192.168.1.185
+    host: 172.17.0.1
     # 绔彛锛岄粯璁や负6379
     port: 6379
     # 鏁版嵁搴撶储寮�
diff --git a/src/main/resources/application-cjny.yml b/src/main/resources/application-cjny.yml
index eedceb1..3bb202c 100644
--- a/src/main/resources/application-cjny.yml
+++ b/src/main/resources/application-cjny.yml
@@ -62,7 +62,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://192.168.1.185:3306/product-inventory-management-cjny?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://172.17.0.1:3306/product-inventory-management-cjny?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: xd@123456..
       # 浠庡簱鏁版嵁婧�
diff --git a/src/main/resources/application-cmny.yml b/src/main/resources/application-cmny.yml
index 6239c56..810c8a8 100644
--- a/src/main/resources/application-cmny.yml
+++ b/src/main/resources/application-cmny.yml
@@ -62,7 +62,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://192.168.1.185:3306/product-inventory-management-cmny?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://172.17.0.1:3306/product-inventory-management-cmny?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: xd@123456..
       # 浠庡簱鏁版嵁婧�
@@ -135,7 +135,7 @@
   redis:
     # 鍦板潃
 #    host: 127.0.0.1
-    host: 192.168.1.185
+    host: 172.17.0.1
     # 绔彛锛岄粯璁や负6379
     port: 6379
     # 鏁版嵁搴撶储寮�
diff --git a/src/main/resources/application-demo.yml b/src/main/resources/application-demo.yml
index 631eb3e..ee53b79 100644
--- a/src/main/resources/application-demo.yml
+++ b/src/main/resources/application-demo.yml
@@ -62,7 +62,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://192.168.1.185:3306/product-inventory-management-demo?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://172.17.0.1:3306/product-inventory-management-demo?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: xd@123456..
       # 浠庡簱鏁版嵁婧�
@@ -135,7 +135,7 @@
   redis:
     # 鍦板潃
 #    host: 127.0.0.1
-    host: 192.168.1.185
+    host: 172.17.0.1
     # 绔彛锛岄粯璁や负6379
     port: 6379
     # 鏁版嵁搴撶储寮�
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 8283a19..7f951bf 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -35,6 +35,7 @@
 # 鏃ュ織閰嶇疆
 logging:
   level:
+    org.quartz: DEBUG
     com.ruoyi: warn
     org.springframework: warn
 
@@ -62,7 +63,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://localhost:3306/product-inventory-management-sqd?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://localhost:3306/product-inventory-management-hckx?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: 123456
       # 浠庡簱鏁版嵁婧�
@@ -135,13 +136,13 @@
   redis:
     # 鍦板潃
     host: 127.0.0.1
-#    host: 172.17.0.1
+    #    host: 172.17.0.1
     # 绔彛锛岄粯璁や负6379
     port: 6379
     # 鏁版嵁搴撶储寮�
     database: 0
     # 瀵嗙爜
-#    password: root2022!
+    #    password: root2022!
     password:
 
     # 杩炴帴瓒呮椂鏃堕棿
@@ -156,6 +157,31 @@
         max-active: 8
         # #杩炴帴姹犳渶澶ч樆濉炵瓑寰呮椂闂达紙浣跨敤璐熷�艰〃绀烘病鏈夐檺鍒讹級
         max-wait: -1ms
+  # Quartz瀹氭椂浠诲姟閰嶇疆锛堟柊澧為儴鍒嗭級
+  quartz:
+    job-store-type: jdbc  # 浣跨敤鏁版嵁搴撳瓨鍌�
+    jdbc:
+      initialize-schema: never  # 棣栨杩愯鏃惰嚜鍔ㄥ垱寤鸿〃缁撴瀯锛屾垚鍔熷悗鏀逛负never
+      schema: classpath:org/quartz/impl/jdbcjobstore/tables_mysql_innodb.sql  # MySQL琛ㄧ粨鏋勮剼鏈�
+    properties:
+      org:
+        quartz:
+          scheduler:
+            instanceName: RuoYiScheduler
+            instanceId: AUTO
+          jobStore:
+            class: org.quartz.impl.jdbcjobstore.JobStoreTX
+            driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate  # MySQL閫傞厤
+            tablePrefix: qrtz_  # 琛ㄥ悕鍓嶇紑锛屼笌鑴氭湰涓�鑷�
+            isClustered: false  # 鍗曡妭鐐规ā寮忥紙闆嗙兢闇�鏀逛负true锛�
+            clusterCheckinInterval: 10000
+            txIsolationLevelSerializable: true
+          threadPool:
+            class: org.quartz.simpl.SimpleThreadPool
+            threadCount: 10  # 绾跨▼姹犲ぇ灏�
+            threadPriority: 5
+            makeThreadsDaemons: true
+          updateCheck: false  # 鍏抽棴鐗堟湰妫�鏌�
 
 # token閰嶇疆
 token:
@@ -165,7 +191,7 @@
   secret: abcdefghijklmnopqrstuvwxyz
   # 浠ょ墝鏈夋晥鏈燂紙榛樿30鍒嗛挓锛�
   expireTime: 450
-  
+
 # MyBatis Plus閰嶇疆
 mybatis-plus:
   # 鎼滅储鎸囧畾鍖呭埆鍚�   鏍规嵁鑷繁鐨勯」鐩潵
@@ -178,7 +204,7 @@
     enable-sql-runner: true
     db-config:
       id-type: auto
-  
+
 # PageHelper鍒嗛〉鎻掍欢
 pagehelper:
   helperDialect: mysql
@@ -200,7 +226,7 @@
   excludes: /system/notice
   # 鍖归厤閾炬帴
   urlPatterns: /system/*,/monitor/*,/tool/*
-  
+
 # 浠g爜鐢熸垚
 gen:
   # 浣滆��
diff --git a/src/main/resources/application-hbkj.yml b/src/main/resources/application-hbkj.yml
index bf9759c..36a993c 100644
--- a/src/main/resources/application-hbkj.yml
+++ b/src/main/resources/application-hbkj.yml
@@ -62,7 +62,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://192.168.1.185:3306/product-inventory-management-hbkj?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://172.17.0.1:3306/product-inventory-management-hbkj?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: xd@123456..
       # 浠庡簱鏁版嵁婧�
@@ -135,7 +135,7 @@
   redis:
     # 鍦板潃
 #    host: 127.0.0.1
-    host: 192.168.1.185
+    host: 172.17.0.1
     # 绔彛锛岄粯璁や负6379
     port: 6380
     # 鏁版嵁搴撶储寮�
diff --git a/src/main/resources/application-hbxm.yml b/src/main/resources/application-hbxm.yml
index 88fb4ee..51f6710 100644
--- a/src/main/resources/application-hbxm.yml
+++ b/src/main/resources/application-hbxm.yml
@@ -62,7 +62,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://192.168.1.185:3306/product-inventory-management-hbxm?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://172.17.0.1:3306/product-inventory-management-hbxm?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: xd@123456..
       # 浠庡簱鏁版嵁婧�
@@ -135,7 +135,7 @@
   redis:
     # 鍦板潃
 #    host: 127.0.0.1
-    host: 192.168.1.185
+    host: 172.17.0.1
     # 绔彛锛岄粯璁や负6379
     port: 6379
     # 鏁版嵁搴撶储寮�
diff --git a/src/main/resources/application-hckx.yml b/src/main/resources/application-hckx.yml
index cd680c8..701420b 100644
--- a/src/main/resources/application-hckx.yml
+++ b/src/main/resources/application-hckx.yml
@@ -45,7 +45,7 @@
   accessKey: admin
   secretKey: 12345678
   preview-expiry: 24 # 棰勮鍦板潃榛樿24灏忔椂
-  default-bucket: uploadPath
+  default-bucket: jxc
 # 鐢ㄦ埛閰嶇疆
 user:
   password:
@@ -62,7 +62,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://192.168.1.185:3306/product-inventory-management-hckx?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://172.17.0.1:3306/product-inventory-management-hckx?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: xd@123456..
       # 浠庡簱鏁版嵁婧�
@@ -135,7 +135,7 @@
   redis:
     # 鍦板潃
 #    host: 127.0.0.1
-    host: 192.168.1.185
+    host: 172.17.0.1
     # 绔彛锛岄粯璁や负6379
     port: 6379
     # 鏁版嵁搴撶储寮�
@@ -157,6 +157,31 @@
         # #杩炴帴姹犳渶澶ч樆濉炵瓑寰呮椂闂达紙浣跨敤璐熷�艰〃绀烘病鏈夐檺鍒讹級
         max-wait: -1ms
 
+  # Quartz瀹氭椂浠诲姟閰嶇疆锛堟柊澧為儴鍒嗭級
+  quartz:
+    job-store-type: jdbc  # 浣跨敤鏁版嵁搴撳瓨鍌�
+    jdbc:
+      initialize-schema: never  # 棣栨杩愯鏃惰嚜鍔ㄥ垱寤鸿〃缁撴瀯锛屾垚鍔熷悗鏀逛负never
+      schema: classpath:org/quartz/impl/jdbcjobstore/tables_mysql_innodb.sql  # MySQL琛ㄧ粨鏋勮剼鏈�
+    properties:
+      org:
+        quartz:
+          scheduler:
+            instanceName: RuoYiScheduler
+            instanceId: AUTO
+          jobStore:
+            class: org.quartz.impl.jdbcjobstore.JobStoreTX
+            driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate  # MySQL閫傞厤
+            tablePrefix: qrtz_  # 琛ㄥ悕鍓嶇紑锛屼笌鑴氭湰涓�鑷�
+            isClustered: false  # 鍗曡妭鐐规ā寮忥紙闆嗙兢闇�鏀逛负true锛�
+            clusterCheckinInterval: 10000
+            txIsolationLevelSerializable: true
+          threadPool:
+            class: org.quartz.simpl.SimpleThreadPool
+            threadCount: 10  # 绾跨▼姹犲ぇ灏�
+            threadPriority: 5
+            makeThreadsDaemons: true
+          updateCheck: false  # 鍏抽棴鐗堟湰妫�鏌�
 # token閰嶇疆
 token:
   # 浠ょ墝鑷畾涔夋爣璇�
diff --git a/src/main/resources/application-hckxTest.yml b/src/main/resources/application-hckxTest.yml
new file mode 100644
index 0000000..3d0faca
--- /dev/null
+++ b/src/main/resources/application-hckxTest.yml
@@ -0,0 +1,219 @@
+# 椤圭洰鐩稿叧閰嶇疆
+ruoyi:
+  # 鍚嶇О
+  name: RuoYi
+  # 鐗堟湰
+  version: 3.8.9
+  # 鐗堟潈骞翠唤
+  copyrightYear: 2025
+  # 鏂囦欢璺緞 绀轰緥锛� Windows閰嶇疆D:/ruoyi/uploadPath锛孡inux閰嶇疆 /home/ruoyi/uploadPath锛�
+  profile: /javaWork/product-inventory-management/file
+
+  # 鑾峰彇ip鍦板潃寮�鍏�
+  addressEnabled: false
+  # 楠岃瘉鐮佺被鍨� math 鏁板瓧璁$畻 char 瀛楃楠岃瘉
+  captchaType: math
+
+# 寮�鍙戠幆澧冮厤缃�
+server:
+  # 鏈嶅姟鍣ㄧ殑HTTP绔彛锛岄粯璁や负8080
+  port: 9988
+  servlet:
+    # 搴旂敤鐨勮闂矾寰�
+    context-path: /
+  tomcat:
+    # tomcat鐨刄RI缂栫爜
+    uri-encoding: UTF-8
+    # 杩炴帴鏁版弧鍚庣殑鎺掗槦鏁帮紝榛樿涓�100
+    accept-count: 1000
+    threads:
+      # tomcat鏈�澶х嚎绋嬫暟锛岄粯璁や负200
+      max: 800
+      # Tomcat鍚姩鍒濆鍖栫殑绾跨▼鏁帮紝榛樿鍊�10
+      min-spare: 100
+
+# 鏃ュ織閰嶇疆
+logging:
+  level:
+    com.ruoyi: warn
+    org.springframework: warn
+
+minio:
+  endpoint: http://114.132.189.42/
+  port: 7019
+  secure: false
+  accessKey: admin
+  secretKey: 12345678
+  preview-expiry: 24 # 棰勮鍦板潃榛樿24灏忔椂
+  default-bucket: uploadPath
+# 鐢ㄦ埛閰嶇疆
+user:
+  password:
+    # 瀵嗙爜鏈�澶ч敊璇鏁�
+    maxRetryCount: 5
+    # 瀵嗙爜閿佸畾鏃堕棿锛堥粯璁�10鍒嗛挓锛�
+    lockTime: 10
+
+# Spring閰嶇疆
+spring:
+  datasource:
+    type: com.alibaba.druid.pool.DruidDataSource
+    driverClassName: com.mysql.cj.jdbc.Driver
+    druid:
+      # 涓诲簱鏁版嵁婧�
+      master:
+        url: jdbc:mysql://114.132.189.42:9099/product-inventory-management-hckx?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        username: root
+        password: xd@123456..
+      # 浠庡簱鏁版嵁婧�
+      slave:
+        # 浠庢暟鎹簮寮�鍏�/榛樿鍏抽棴
+        enabled: false
+        url:
+        username:
+        password:
+      # 鍒濆杩炴帴鏁�
+      initialSize: 5
+      # 鏈�灏忚繛鎺ユ睜鏁伴噺
+      minIdle: 10
+      # 鏈�澶ц繛鎺ユ睜鏁伴噺
+      maxActive: 20
+      # 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂�
+      maxWait: 60000
+      # 閰嶇疆杩炴帴瓒呮椂鏃堕棿
+      connectTimeout: 30000
+      # 閰嶇疆缃戠粶瓒呮椂鏃堕棿
+      socketTimeout: 60000
+      # 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫�娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣
+      timeBetweenEvictionRunsMillis: 60000
+      # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�灏忕敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
+      minEvictableIdleTimeMillis: 300000
+      # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�澶х敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
+      maxEvictableIdleTimeMillis: 900000
+      # 閰嶇疆妫�娴嬭繛鎺ユ槸鍚︽湁鏁�
+      validationQuery: SELECT 1 FROM DUAL
+      testWhileIdle: true
+      testOnBorrow: false
+      testOnReturn: false
+      webStatFilter:
+        enabled: true
+      statViewServlet:
+        enabled: true
+        # 璁剧疆鐧藉悕鍗曪紝涓嶅~鍒欏厑璁告墍鏈夎闂�
+        allow:
+        url-pattern: /druid/*
+        # 鎺у埗鍙扮鐞嗙敤鎴峰悕鍜屽瘑鐮�
+        login-username: ruoyi
+        login-password: 123456
+      filter:
+        stat:
+          enabled: true
+          # 鎱QL璁板綍
+          log-slow-sql: true
+          slow-sql-millis: 1000
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true
+  # 璧勬簮淇℃伅
+  messages:
+    # 鍥介檯鍖栬祫婧愭枃浠惰矾寰�
+    basename: i18n/messages
+  # 鏂囦欢涓婁紶
+  servlet:
+    multipart:
+      # 鍗曚釜鏂囦欢澶у皬
+      max-file-size: 1GB
+      # 璁剧疆鎬讳笂浼犵殑鏂囦欢澶у皬
+      max-request-size: 2GB
+  # 鏈嶅姟妯″潡
+  devtools:
+    restart:
+      # 鐑儴缃插紑鍏�
+      enabled: false
+  # redis 閰嶇疆
+  redis:
+    # 鍦板潃
+    host: 127.0.0.1
+#    host: 114.132.189.42
+    # 绔彛锛岄粯璁や负6379
+    port: 6379
+    # 鏁版嵁搴撶储寮�
+    database: 12
+    # 瀵嗙爜
+#    password: root2022!
+    password:
+
+    # 杩炴帴瓒呮椂鏃堕棿
+    timeout: 10s
+    lettuce:
+      pool:
+        # 杩炴帴姹犱腑鐨勬渶灏忕┖闂茶繛鎺�
+        min-idle: 0
+        # 杩炴帴姹犱腑鐨勬渶澶х┖闂茶繛鎺�
+        max-idle: 8
+        # 杩炴帴姹犵殑鏈�澶ф暟鎹簱杩炴帴鏁�
+        max-active: 8
+        # #杩炴帴姹犳渶澶ч樆濉炵瓑寰呮椂闂达紙浣跨敤璐熷�艰〃绀烘病鏈夐檺鍒讹級
+        max-wait: -1ms
+
+# token閰嶇疆
+token:
+  # 浠ょ墝鑷畾涔夋爣璇�
+  header: Authorization
+  # 浠ょ墝瀵嗛挜
+  secret: abcdefghijklmnopqrstuvwxyz
+  # 浠ょ墝鏈夋晥鏈燂紙榛樿30鍒嗛挓锛�
+  expireTime: 450
+  
+# MyBatis Plus閰嶇疆
+mybatis-plus:
+  # 鎼滅储鎸囧畾鍖呭埆鍚�   鏍规嵁鑷繁鐨勯」鐩潵
+  typeAliasesPackage: com.ruoyi.**.pojo
+  # 閰嶇疆mapper鐨勬壂鎻忥紝鎵惧埌鎵�鏈夌殑mapper.xml鏄犲皠鏂囦欢
+  mapperLocations: classpath*:mapper/**/*Mapper.xml
+  # 鍔犺浇鍏ㄥ眬鐨勯厤缃枃浠�
+  configLocation: classpath:mybatis/mybatis-config.xml
+  global-config:
+    enable-sql-runner: true
+    db-config:
+      id-type: auto
+  
+# PageHelper鍒嗛〉鎻掍欢
+pagehelper:
+  helperDialect: mysql
+  supportMethodsArguments: true
+  params: count=countSql
+
+# Swagger閰嶇疆
+swagger:
+  # 鏄惁寮�鍚痵wagger
+  enabled: true
+  # 璇锋眰鍓嶇紑
+  pathMapping: /dev-api
+
+# 闃叉XSS鏀诲嚮
+xss:
+  # 杩囨护寮�鍏�
+  enabled: true
+  # 鎺掗櫎閾炬帴锛堝涓敤閫楀彿鍒嗛殧锛�
+  excludes: /system/notice
+  # 鍖归厤閾炬帴
+  urlPatterns: /system/*,/monitor/*,/tool/*
+  
+# 浠g爜鐢熸垚
+gen:
+  # 浣滆��
+  author: ruoyi
+  # 榛樿鐢熸垚鍖呰矾寰� system 闇�鏀规垚鑷繁鐨勬ā鍧楀悕绉� 濡� system monitor tool
+  packageName: com.ruoyi.project.system
+  # 鑷姩鍘婚櫎琛ㄥ墠缂�锛岄粯璁ゆ槸true
+  autoRemovePre: false
+  # 琛ㄥ墠缂�锛堢敓鎴愮被鍚嶄笉浼氬寘鍚〃鍓嶇紑锛屽涓敤閫楀彿鍒嗛殧锛�
+  tablePrefix: sys_
+  # 鏄惁鍏佽鐢熸垚鏂囦欢瑕嗙洊鍒版湰鍦帮紙鑷畾涔夎矾寰勶級锛岄粯璁や笉鍏佽
+  allowOverwrite: false
+
+file:
+  temp-dir: D:\\javaWork\\product-inventory-management\\file\\temp\\uploads
+  upload-dir: D:\\javaWork\\product-inventory-management\\file\\prod\\uploads
\ No newline at end of file
diff --git a/src/main/resources/application-hcmy.yml b/src/main/resources/application-hcmy.yml
index 6aadf85..3521d7a 100644
--- a/src/main/resources/application-hcmy.yml
+++ b/src/main/resources/application-hcmy.yml
@@ -62,7 +62,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://192.168.1.185:3306/product-inventory-management-hcmy?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://172.17.0.1:3306/product-inventory-management-hcmy?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: xd@123456..
       # 浠庡簱鏁版嵁婧�
@@ -135,7 +135,7 @@
   redis:
     # 鍦板潃
 #    host: 127.0.0.1
-    host: 192.168.1.185
+    host: 172.17.0.1
     # 绔彛锛岄粯璁や负6379
     port: 6379
     # 鏁版嵁搴撶储寮�
diff --git a/src/main/resources/application-hhkj.yml b/src/main/resources/application-hhkj.yml
index 0cde287..152f330 100644
--- a/src/main/resources/application-hhkj.yml
+++ b/src/main/resources/application-hhkj.yml
@@ -62,7 +62,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://192.168.1.185:3306/product-inventory-management-hhkj?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://172.17.0.1:3306/product-inventory-management-hhkj?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: xd@123456..
       # 浠庡簱鏁版嵁婧�
@@ -135,7 +135,7 @@
   redis:
     # 鍦板潃
 #    host: 127.0.0.1
-    host: 192.168.1.185
+    host: 172.17.0.1
     # 绔彛锛岄粯璁や负6379
     port: 6379
     # 鏁版嵁搴撶储寮�
diff --git a/src/main/resources/application-hsmy.yml b/src/main/resources/application-hsmy.yml
index 862214f..f057f3f 100644
--- a/src/main/resources/application-hsmy.yml
+++ b/src/main/resources/application-hsmy.yml
@@ -62,7 +62,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://192.168.1.185:3306/product-inventory-management-hsmy?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://172.17.0.1:3306/product-inventory-management-hsmy?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: xd@123456..
       # 浠庡簱鏁版嵁婧�
@@ -135,7 +135,7 @@
   redis:
     # 鍦板潃
 #    host: 127.0.0.1
-    host: 192.168.1.185
+    host: 172.17.0.1
     # 绔彛锛岄粯璁や负6379
     port: 6380
     # 鏁版嵁搴撶储寮�
diff --git a/src/main/resources/application-hsxny.yml b/src/main/resources/application-hsxny.yml
index d20674c..4c0a3f3 100644
--- a/src/main/resources/application-hsxny.yml
+++ b/src/main/resources/application-hsxny.yml
@@ -62,7 +62,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://192.168.1.185:3306/product-inventory-management-hsxny?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://172.17.0.1:3306/product-inventory-management-hsxny?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: xd@123456..
       # 浠庡簱鏁版嵁婧�
@@ -135,7 +135,7 @@
   redis:
     # 鍦板潃
 #    host: 127.0.0.1
-    host: 192.168.1.185
+    host: 172.17.0.1
     # 绔彛锛岄粯璁や负6379
     port: 6379
     # 鏁版嵁搴撶储寮�
diff --git a/src/main/resources/application-hxgy.yml b/src/main/resources/application-hxgy.yml
index aa429e9..1a36dc4 100644
--- a/src/main/resources/application-hxgy.yml
+++ b/src/main/resources/application-hxgy.yml
@@ -62,7 +62,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://192.168.1.185:3306/product-inventory-management-hxgy?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://172.17.0.1:3306/product-inventory-management-hxgy?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: xd@123456..
       # 浠庡簱鏁版嵁婧�
@@ -135,7 +135,7 @@
   redis:
     # 鍦板潃
 #    host: 127.0.0.1
-    host: 192.168.1.185
+    host: 172.17.0.1
     # 绔彛锛岄粯璁や负6379
     port: 6379
     # 鏁版嵁搴撶储寮�
diff --git a/src/main/resources/application-hysn.yml b/src/main/resources/application-hysn.yml
index 5d8f467..485311f 100644
--- a/src/main/resources/application-hysn.yml
+++ b/src/main/resources/application-hysn.yml
@@ -62,7 +62,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://192.168.1.185:3306/product-inventory-management-hysn?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://172.17.0.1:3306/product-inventory-management-hysn?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: xd@123456..
       # 浠庡簱鏁版嵁婧�
@@ -135,7 +135,7 @@
   redis:
     # 鍦板潃
 #    host: 127.0.0.1
-    host: 192.168.1.185
+    host: 172.17.0.1
     # 绔彛锛岄粯璁や负6379
     port: 6379
     # 鏁版嵁搴撶储寮�
diff --git a/src/main/resources/application-jjxm.yml b/src/main/resources/application-jjxm.yml
index a434f00..d5115a7 100644
--- a/src/main/resources/application-jjxm.yml
+++ b/src/main/resources/application-jjxm.yml
@@ -62,7 +62,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://192.168.1.185:3306/product-inventory-management-jjxm?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://172.17.0.1:3306/product-inventory-management-jjxm?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: xd@123456..
       # 浠庡簱鏁版嵁婧�
@@ -135,7 +135,7 @@
   redis:
     # 鍦板潃
 #    host: 127.0.0.1
-    host: 192.168.1.185
+    host: 172.17.0.1
     # 绔彛锛岄粯璁や负6379
     port: 6380
     # 鏁版嵁搴撶储寮�
diff --git a/src/main/resources/application-jlsn.yml b/src/main/resources/application-jlsn.yml
index d3be68c..72e6df9 100644
--- a/src/main/resources/application-jlsn.yml
+++ b/src/main/resources/application-jlsn.yml
@@ -62,7 +62,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://192.168.1.185:3306/product-inventory-management-jlsn?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://172.17.0.1:3306/product-inventory-management-jlsn?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: xd@123456..
       # 浠庡簱鏁版嵁婧�
@@ -135,7 +135,7 @@
   redis:
     # 鍦板潃
 #    host: 127.0.0.1
-    host: 192.168.1.185
+    host: 172.17.0.1
     # 绔彛锛岄粯璁や负6379
     port: 6379
     # 鏁版嵁搴撶储寮�
diff --git a/src/main/resources/application-jsmy.yml b/src/main/resources/application-jsmy.yml
index df31410..e38a579 100644
--- a/src/main/resources/application-jsmy.yml
+++ b/src/main/resources/application-jsmy.yml
@@ -62,7 +62,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://192.168.1.185:3306/product-inventory-management-jsmy?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://172.17.0.1:3306/product-inventory-management-jsmy?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: xd@123456..
       # 浠庡簱鏁版嵁婧�
diff --git a/src/main/resources/application-jsyny.yml b/src/main/resources/application-jsyny.yml
index 590ade8..a813c9a 100644
--- a/src/main/resources/application-jsyny.yml
+++ b/src/main/resources/application-jsyny.yml
@@ -62,7 +62,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://192.168.1.185:3306/product-inventory-management-jsyny?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://172.17.0.1:3306/product-inventory-management-jsyny?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: xd@123456..
       # 浠庡簱鏁版嵁婧�
@@ -135,7 +135,7 @@
   redis:
     # 鍦板潃
 #    host: 127.0.0.1
-    host: 192.168.1.185
+    host: 172.17.0.1
     # 绔彛锛岄粯璁や负6379
     port: 6379
     # 鏁版嵁搴撶储寮�
diff --git a/src/main/resources/application-jtwy.yml b/src/main/resources/application-jtwy.yml
new file mode 100644
index 0000000..e2aa4c5
--- /dev/null
+++ b/src/main/resources/application-jtwy.yml
@@ -0,0 +1,244 @@
+# 椤圭洰鐩稿叧閰嶇疆
+ruoyi:
+  # 鍚嶇О
+  name: RuoYi
+  # 鐗堟湰
+  version: 3.8.9
+  # 鐗堟潈骞翠唤
+  copyrightYear: 2025
+  # 鏂囦欢璺緞 绀轰緥锛� Windows閰嶇疆D:/ruoyi/uploadPath锛孡inux閰嶇疆 /home/ruoyi/uploadPath锛�
+  profile: /javaWork/product-inventory-management/file
+
+  # 鑾峰彇ip鍦板潃寮�鍏�
+  addressEnabled: false
+  # 楠岃瘉鐮佺被鍨� math 鏁板瓧璁$畻 char 瀛楃楠岃瘉
+  captchaType: math
+
+# 寮�鍙戠幆澧冮厤缃�
+server:
+  # 鏈嶅姟鍣ㄧ殑HTTP绔彛锛岄粯璁や负8080
+  port: 9001
+  servlet:
+    # 搴旂敤鐨勮闂矾寰�
+    context-path: /
+  tomcat:
+    # tomcat鐨刄RI缂栫爜
+    uri-encoding: UTF-8
+    # 杩炴帴鏁版弧鍚庣殑鎺掗槦鏁帮紝榛樿涓�100
+    accept-count: 1000
+    threads:
+      # tomcat鏈�澶х嚎绋嬫暟锛岄粯璁や负200
+      max: 800
+      # Tomcat鍚姩鍒濆鍖栫殑绾跨▼鏁帮紝榛樿鍊�10
+      min-spare: 100
+
+# 鏃ュ織閰嶇疆
+logging:
+  level:
+    com.ruoyi: warn
+    org.springframework: warn
+
+minio:
+  endpoint: http://114.132.189.42/
+  port: 7019
+  secure: false
+  accessKey: admin
+  secretKey: 12345678
+  preview-expiry: 24 # 棰勮鍦板潃榛樿24灏忔椂
+  default-bucket: jxc
+# 鐢ㄦ埛閰嶇疆
+user:
+  password:
+    # 瀵嗙爜鏈�澶ч敊璇鏁�
+    maxRetryCount: 5
+    # 瀵嗙爜閿佸畾鏃堕棿锛堥粯璁�10鍒嗛挓锛�
+    lockTime: 10
+
+# Spring閰嶇疆
+spring:
+  datasource:
+    type: com.alibaba.druid.pool.DruidDataSource
+    driverClassName: com.mysql.cj.jdbc.Driver
+    druid:
+      # 涓诲簱鏁版嵁婧�
+      master:
+        url: jdbc:mysql://172.17.0.1:3306/product-inventory-management-jtwy?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        username: root
+        password: xd@123456..
+      # 浠庡簱鏁版嵁婧�
+      slave:
+        # 浠庢暟鎹簮寮�鍏�/榛樿鍏抽棴
+        enabled: false
+        url:
+        username:
+        password:
+      # 鍒濆杩炴帴鏁�
+      initialSize: 5
+      # 鏈�灏忚繛鎺ユ睜鏁伴噺
+      minIdle: 10
+      # 鏈�澶ц繛鎺ユ睜鏁伴噺
+      maxActive: 20
+      # 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂�
+      maxWait: 60000
+      # 閰嶇疆杩炴帴瓒呮椂鏃堕棿
+      connectTimeout: 30000
+      # 閰嶇疆缃戠粶瓒呮椂鏃堕棿
+      socketTimeout: 60000
+      # 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫�娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣
+      timeBetweenEvictionRunsMillis: 60000
+      # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�灏忕敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
+      minEvictableIdleTimeMillis: 300000
+      # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�澶х敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
+      maxEvictableIdleTimeMillis: 900000
+      # 閰嶇疆妫�娴嬭繛鎺ユ槸鍚︽湁鏁�
+      validationQuery: SELECT 1 FROM DUAL
+      testWhileIdle: true
+      testOnBorrow: false
+      testOnReturn: false
+      webStatFilter:
+        enabled: true
+      statViewServlet:
+        enabled: true
+        # 璁剧疆鐧藉悕鍗曪紝涓嶅~鍒欏厑璁告墍鏈夎闂�
+        allow:
+        url-pattern: /druid/*
+        # 鎺у埗鍙扮鐞嗙敤鎴峰悕鍜屽瘑鐮�
+        login-username: ruoyi
+        login-password: 123456
+      filter:
+        stat:
+          enabled: true
+          # 鎱QL璁板綍
+          log-slow-sql: true
+          slow-sql-millis: 1000
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true
+  # 璧勬簮淇℃伅
+  messages:
+    # 鍥介檯鍖栬祫婧愭枃浠惰矾寰�
+    basename: i18n/messages
+  # 鏂囦欢涓婁紶
+  servlet:
+    multipart:
+      # 鍗曚釜鏂囦欢澶у皬
+      max-file-size: 1GB
+      # 璁剧疆鎬讳笂浼犵殑鏂囦欢澶у皬
+      max-request-size: 2GB
+  # 鏈嶅姟妯″潡
+  devtools:
+    restart:
+      # 鐑儴缃插紑鍏�
+      enabled: false
+  # redis 閰嶇疆
+  redis:
+    # 鍦板潃
+    #    host: 127.0.0.1
+    host: 172.17.0.1
+    # 绔彛锛岄粯璁や负6379
+    port: 6379
+    # 鏁版嵁搴撶储寮�
+    database: 12
+    # 瀵嗙爜
+    #    password: root2022!
+    password:
+
+    # 杩炴帴瓒呮椂鏃堕棿
+    timeout: 10s
+    lettuce:
+      pool:
+        # 杩炴帴姹犱腑鐨勬渶灏忕┖闂茶繛鎺�
+        min-idle: 0
+        # 杩炴帴姹犱腑鐨勬渶澶х┖闂茶繛鎺�
+        max-idle: 8
+        # 杩炴帴姹犵殑鏈�澶ф暟鎹簱杩炴帴鏁�
+        max-active: 8
+        # #杩炴帴姹犳渶澶ч樆濉炵瓑寰呮椂闂达紙浣跨敤璐熷�艰〃绀烘病鏈夐檺鍒讹級
+        max-wait: -1ms
+
+  # Quartz瀹氭椂浠诲姟閰嶇疆锛堟柊澧為儴鍒嗭級
+  quartz:
+    job-store-type: jdbc  # 浣跨敤鏁版嵁搴撳瓨鍌�
+    jdbc:
+      initialize-schema: never  # 棣栨杩愯鏃惰嚜鍔ㄥ垱寤鸿〃缁撴瀯锛屾垚鍔熷悗鏀逛负never
+      schema: classpath:org/quartz/impl/jdbcjobstore/tables_mysql_innodb.sql  # MySQL琛ㄧ粨鏋勮剼鏈�
+    properties:
+      org:
+        quartz:
+          scheduler:
+            instanceName: RuoYiScheduler
+            instanceId: AUTO
+          jobStore:
+            class: org.quartz.impl.jdbcjobstore.JobStoreTX
+            driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate  # MySQL閫傞厤
+            tablePrefix: qrtz_  # 琛ㄥ悕鍓嶇紑锛屼笌鑴氭湰涓�鑷�
+            isClustered: false  # 鍗曡妭鐐规ā寮忥紙闆嗙兢闇�鏀逛负true锛�
+            clusterCheckinInterval: 10000
+            txIsolationLevelSerializable: true
+          threadPool:
+            class: org.quartz.simpl.SimpleThreadPool
+            threadCount: 10  # 绾跨▼姹犲ぇ灏�
+            threadPriority: 5
+            makeThreadsDaemons: true
+          updateCheck: false  # 鍏抽棴鐗堟湰妫�鏌�
+# token閰嶇疆
+token:
+  # 浠ょ墝鑷畾涔夋爣璇�
+  header: Authorization
+  # 浠ょ墝瀵嗛挜
+  secret: abcdefghijklmnopqrstuvwxyz
+  # 浠ょ墝鏈夋晥鏈燂紙榛樿30鍒嗛挓锛�
+  expireTime: 450
+
+# MyBatis Plus閰嶇疆
+mybatis-plus:
+  # 鎼滅储鎸囧畾鍖呭埆鍚�   鏍规嵁鑷繁鐨勯」鐩潵
+  typeAliasesPackage: com.ruoyi.**.pojo
+  # 閰嶇疆mapper鐨勬壂鎻忥紝鎵惧埌鎵�鏈夌殑mapper.xml鏄犲皠鏂囦欢
+  mapperLocations: classpath*:mapper/**/*Mapper.xml
+  # 鍔犺浇鍏ㄥ眬鐨勯厤缃枃浠�
+  configLocation: classpath:mybatis/mybatis-config.xml
+  global-config:
+    enable-sql-runner: true
+    db-config:
+      id-type: auto
+
+# PageHelper鍒嗛〉鎻掍欢
+pagehelper:
+  helperDialect: mysql
+  supportMethodsArguments: true
+  params: count=countSql
+
+# Swagger閰嶇疆
+swagger:
+  # 鏄惁寮�鍚痵wagger
+  enabled: true
+  # 璇锋眰鍓嶇紑
+  pathMapping: /dev-api
+
+# 闃叉XSS鏀诲嚮
+xss:
+  # 杩囨护寮�鍏�
+  enabled: true
+  # 鎺掗櫎閾炬帴锛堝涓敤閫楀彿鍒嗛殧锛�
+  excludes: /system/notice
+  # 鍖归厤閾炬帴
+  urlPatterns: /system/*,/monitor/*,/tool/*
+
+# 浠g爜鐢熸垚
+gen:
+  # 浣滆��
+  author: ruoyi
+  # 榛樿鐢熸垚鍖呰矾寰� system 闇�鏀规垚鑷繁鐨勬ā鍧楀悕绉� 濡� system monitor tool
+  packageName: com.ruoyi.project.system
+  # 鑷姩鍘婚櫎琛ㄥ墠缂�锛岄粯璁ゆ槸true
+  autoRemovePre: false
+  # 琛ㄥ墠缂�锛堢敓鎴愮被鍚嶄笉浼氬寘鍚〃鍓嶇紑锛屽涓敤閫楀彿鍒嗛殧锛�
+  tablePrefix: sys_
+  # 鏄惁鍏佽鐢熸垚鏂囦欢瑕嗙洊鍒版湰鍦帮紙鑷畾涔夎矾寰勶級锛岄粯璁や笉鍏佽
+  allowOverwrite: false
+
+file:
+  temp-dir: /javaWork/product-inventory-management/file/temp/uploads
+  upload-dir: /javaWork/product-inventory-management/file/prod/uploads
\ No newline at end of file
diff --git a/src/main/resources/application-mkzs.yml b/src/main/resources/application-mkzs.yml
index 85368ae..6e91a95 100644
--- a/src/main/resources/application-mkzs.yml
+++ b/src/main/resources/application-mkzs.yml
@@ -62,7 +62,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://192.168.1.185:3306/product-inventory-management-mkzs?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://172.17.0.1:3306/product-inventory-management-mkzs?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: xd@123456..
       # 浠庡簱鏁版嵁婧�
@@ -135,7 +135,7 @@
   redis:
     # 鍦板潃
 #    host: 127.0.0.1
-    host: 192.168.1.185
+    host: 172.17.0.1
     # 绔彛锛岄粯璁や负6379
     port: 6380
     # 鏁版嵁搴撶储寮�
diff --git a/src/main/resources/application-mqsp.yml b/src/main/resources/application-mqsp.yml
index 05264b0..a09955d 100644
--- a/src/main/resources/application-mqsp.yml
+++ b/src/main/resources/application-mqsp.yml
@@ -62,7 +62,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://192.168.1.185:3306/product-inventory-management-lqmsp?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://172.17.0.1:3306/product-inventory-management-lqmsp?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: xd@123456..
       # 浠庡簱鏁版嵁婧�
@@ -135,7 +135,7 @@
   redis:
     # 鍦板潃
 #    host: 127.0.0.1
-    host: 192.168.1.185
+    host: 172.17.0.1
     # 绔彛锛岄粯璁や负6379
     port: 6380
     # 鏁版嵁搴撶储寮�
diff --git a/src/main/resources/application-mxsc.yml b/src/main/resources/application-mxsc.yml
index 051b575..792bc4b 100644
--- a/src/main/resources/application-mxsc.yml
+++ b/src/main/resources/application-mxsc.yml
@@ -62,7 +62,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://192.168.1.185:3306/product-inventory-management-mxsc?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://172.17.0.1:3306/product-inventory-management-mxsc?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: xd@123456..
       # 浠庡簱鏁版嵁婧�
@@ -135,7 +135,7 @@
   redis:
     # 鍦板潃
 #    host: 127.0.0.1
-    host: 192.168.1.185
+    host: 172.17.0.1
     # 绔彛锛岄粯璁や负6379
     port: 6379
     # 鏁版嵁搴撶储寮�
diff --git a/src/main/resources/application-native.yml b/src/main/resources/application-native.yml
new file mode 100644
index 0000000..38f492e
--- /dev/null
+++ b/src/main/resources/application-native.yml
@@ -0,0 +1,219 @@
+# 椤圭洰鐩稿叧閰嶇疆
+ruoyi:
+  # 鍚嶇О
+  name: RuoYi
+  # 鐗堟湰
+  version: 3.8.9
+  # 鐗堟潈骞翠唤
+  copyrightYear: 2025
+  # 鏂囦欢璺緞 绀轰緥锛� Windows閰嶇疆D:/ruoyi/uploadPath锛孡inux閰嶇疆 /home/ruoyi/uploadPath锛�
+  profile: /javaWork/product-inventory-management/file
+
+  # 鑾峰彇ip鍦板潃寮�鍏�
+  addressEnabled: false
+  # 楠岃瘉鐮佺被鍨� math 鏁板瓧璁$畻 char 瀛楃楠岃瘉
+  captchaType: math
+
+# 寮�鍙戠幆澧冮厤缃�
+server:
+  # 鏈嶅姟鍣ㄧ殑HTTP绔彛锛岄粯璁や负8080
+  port: 8080
+  servlet:
+    # 搴旂敤鐨勮闂矾寰�
+    context-path: /
+  tomcat:
+    # tomcat鐨刄RI缂栫爜
+    uri-encoding: UTF-8
+    # 杩炴帴鏁版弧鍚庣殑鎺掗槦鏁帮紝榛樿涓�100
+    accept-count: 1000
+    threads:
+      # tomcat鏈�澶х嚎绋嬫暟锛岄粯璁や负200
+      max: 800
+      # Tomcat鍚姩鍒濆鍖栫殑绾跨▼鏁帮紝榛樿鍊�10
+      min-spare: 100
+
+# 鏃ュ織閰嶇疆
+logging:
+  level:
+    com.ruoyi: warn
+    org.springframework: warn
+
+minio:
+  endpoint: http://114.132.189.42/
+  port: 7019
+  secure: false
+  accessKey: admin
+  secretKey: 12345678
+  preview-expiry: 24 # 棰勮鍦板潃榛樿24灏忔椂
+  default-bucket: demo-product
+# 鐢ㄦ埛閰嶇疆
+user:
+  password:
+    # 瀵嗙爜鏈�澶ч敊璇鏁�
+    maxRetryCount: 5
+    # 瀵嗙爜閿佸畾鏃堕棿锛堥粯璁�10鍒嗛挓锛�
+    lockTime: 10
+
+# Spring閰嶇疆
+spring:
+  datasource:
+    type: com.alibaba.druid.pool.DruidDataSource
+    driverClassName: com.mysql.cj.jdbc.Driver
+    druid:
+      # 涓诲簱鏁版嵁婧�
+      master:
+        url: jdbc:mysql://localhost:3306/product-inventory-management?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        username: root
+        password: 123456
+      # 浠庡簱鏁版嵁婧�
+      slave:
+        # 浠庢暟鎹簮寮�鍏�/榛樿鍏抽棴
+        enabled: false
+        url:
+        username:
+        password:
+      # 鍒濆杩炴帴鏁�
+      initialSize: 5
+      # 鏈�灏忚繛鎺ユ睜鏁伴噺
+      minIdle: 10
+      # 鏈�澶ц繛鎺ユ睜鏁伴噺
+      maxActive: 20
+      # 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂�
+      maxWait: 60000
+      # 閰嶇疆杩炴帴瓒呮椂鏃堕棿
+      connectTimeout: 30000
+      # 閰嶇疆缃戠粶瓒呮椂鏃堕棿
+      socketTimeout: 60000
+      # 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫�娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣
+      timeBetweenEvictionRunsMillis: 60000
+      # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�灏忕敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
+      minEvictableIdleTimeMillis: 300000
+      # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�澶х敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
+      maxEvictableIdleTimeMillis: 900000
+      # 閰嶇疆妫�娴嬭繛鎺ユ槸鍚︽湁鏁�
+      validationQuery: SELECT 1 FROM DUAL
+      testWhileIdle: true
+      testOnBorrow: false
+      testOnReturn: false
+      webStatFilter:
+        enabled: true
+      statViewServlet:
+        enabled: true
+        # 璁剧疆鐧藉悕鍗曪紝涓嶅~鍒欏厑璁告墍鏈夎闂�
+        allow:
+        url-pattern: /druid/*
+        # 鎺у埗鍙扮鐞嗙敤鎴峰悕鍜屽瘑鐮�
+        login-username: ruoyi
+        login-password: 123456
+      filter:
+        stat:
+          enabled: true
+          # 鎱QL璁板綍
+          log-slow-sql: true
+          slow-sql-millis: 1000
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true
+  # 璧勬簮淇℃伅
+  messages:
+    # 鍥介檯鍖栬祫婧愭枃浠惰矾寰�
+    basename: i18n/messages
+  # 鏂囦欢涓婁紶
+  servlet:
+    multipart:
+      # 鍗曚釜鏂囦欢澶у皬
+      max-file-size: 1GB
+      # 璁剧疆鎬讳笂浼犵殑鏂囦欢澶у皬
+      max-request-size: 2GB
+  # 鏈嶅姟妯″潡
+  devtools:
+    restart:
+      # 鐑儴缃插紑鍏�
+      enabled: false
+  # redis 閰嶇疆
+  redis:
+    # 鍦板潃
+    host: 127.0.0.1
+#    host: 172.17.0.1
+    # 绔彛锛岄粯璁や负6379
+    port: 6379
+    # 鏁版嵁搴撶储寮�
+    database: 0
+    # 瀵嗙爜
+#    password: root2022!
+    password:
+
+    # 杩炴帴瓒呮椂鏃堕棿
+    timeout: 10s
+    lettuce:
+      pool:
+        # 杩炴帴姹犱腑鐨勬渶灏忕┖闂茶繛鎺�
+        min-idle: 0
+        # 杩炴帴姹犱腑鐨勬渶澶х┖闂茶繛鎺�
+        max-idle: 8
+        # 杩炴帴姹犵殑鏈�澶ф暟鎹簱杩炴帴鏁�
+        max-active: 8
+        # #杩炴帴姹犳渶澶ч樆濉炵瓑寰呮椂闂达紙浣跨敤璐熷�艰〃绀烘病鏈夐檺鍒讹級
+        max-wait: -1ms
+
+# token閰嶇疆
+token:
+  # 浠ょ墝鑷畾涔夋爣璇�
+  header: Authorization
+  # 浠ょ墝瀵嗛挜
+  secret: abcdefghijklmnopqrstuvwxyz
+  # 浠ょ墝鏈夋晥鏈燂紙榛樿30鍒嗛挓锛�
+  expireTime: 450
+  
+# MyBatis Plus閰嶇疆
+mybatis-plus:
+  # 鎼滅储鎸囧畾鍖呭埆鍚�   鏍规嵁鑷繁鐨勯」鐩潵
+  typeAliasesPackage: com.ruoyi.**.pojo
+  # 閰嶇疆mapper鐨勬壂鎻忥紝鎵惧埌鎵�鏈夌殑mapper.xml鏄犲皠鏂囦欢
+  mapperLocations: classpath*:mapper/**/*Mapper.xml
+  # 鍔犺浇鍏ㄥ眬鐨勯厤缃枃浠�
+  configLocation: classpath:mybatis/mybatis-config.xml
+  global-config:
+    enable-sql-runner: true
+    db-config:
+      id-type: auto
+  
+# PageHelper鍒嗛〉鎻掍欢
+pagehelper:
+  helperDialect: mysql
+  supportMethodsArguments: true
+  params: count=countSql
+
+# Swagger閰嶇疆
+swagger:
+  # 鏄惁寮�鍚痵wagger
+  enabled: true
+  # 璇锋眰鍓嶇紑
+  pathMapping: /dev-api
+
+# 闃叉XSS鏀诲嚮
+xss:
+  # 杩囨护寮�鍏�
+  enabled: true
+  # 鎺掗櫎閾炬帴锛堝涓敤閫楀彿鍒嗛殧锛�
+  excludes: /system/notice
+  # 鍖归厤閾炬帴
+  urlPatterns: /system/*,/monitor/*,/tool/*
+  
+# 浠g爜鐢熸垚
+gen:
+  # 浣滆��
+  author: ruoyi
+  # 榛樿鐢熸垚鍖呰矾寰� system 闇�鏀规垚鑷繁鐨勬ā鍧楀悕绉� 濡� system monitor tool
+  packageName: com.ruoyi.project.system
+  # 鑷姩鍘婚櫎琛ㄥ墠缂�锛岄粯璁ゆ槸true
+  autoRemovePre: false
+  # 琛ㄥ墠缂�锛堢敓鎴愮被鍚嶄笉浼氬寘鍚〃鍓嶇紑锛屽涓敤閫楀彿鍒嗛殧锛�
+  tablePrefix: sys_
+  # 鏄惁鍏佽鐢熸垚鏂囦欢瑕嗙洊鍒版湰鍦帮紙鑷畾涔夎矾寰勶級锛岄粯璁や笉鍏佽
+  allowOverwrite: false
+
+file:
+  temp-dir: /javaWork/product-inventory-management/file/temp/uploads
+  upload-dir: /javaWork/product-inventory-management/file/prod/uploads
\ No newline at end of file
diff --git a/src/main/resources/application-phmk.yml b/src/main/resources/application-phmk.yml
index e2e7049..f8a7a15 100644
--- a/src/main/resources/application-phmk.yml
+++ b/src/main/resources/application-phmk.yml
@@ -62,7 +62,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://192.168.1.185:3306/product-inventory-management-phmk?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://172.17.0.1:3306/product-inventory-management-phmk?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: xd@123456..
       # 浠庡簱鏁版嵁婧�
@@ -135,7 +135,7 @@
   redis:
     # 鍦板潃
 #    host: 127.0.0.1
-    host: 192.168.1.185
+    host: 172.17.0.1
     # 绔彛锛岄粯璁や负6379
     port: 6380
     # 鏁版嵁搴撶储寮�
diff --git a/src/main/resources/application-rzny.yml b/src/main/resources/application-rzny.yml
index b5673ce..22e060e 100644
--- a/src/main/resources/application-rzny.yml
+++ b/src/main/resources/application-rzny.yml
@@ -62,7 +62,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://192.168.1.185:3306/product-inventory-management-rzny?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://172.17.0.1:3306/product-inventory-management-rzny?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: xd@123456..
       # 浠庡簱鏁版嵁婧�
@@ -135,7 +135,7 @@
   redis:
     # 鍦板潃
 #    host: 127.0.0.1
-    host: 192.168.1.185
+    host: 172.17.0.1
     # 绔彛锛岄粯璁や负6379
     port: 6379
     # 鏁版嵁搴撶储寮�
diff --git a/src/main/resources/application-tjxm.yml b/src/main/resources/application-tjxm.yml
index a928f2e..1130bb1 100644
--- a/src/main/resources/application-tjxm.yml
+++ b/src/main/resources/application-tjxm.yml
@@ -62,7 +62,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://192.168.1.185:3306/product-inventory-management-tjxm?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://172.17.0.1:3306/product-inventory-management-tjxm?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: xd@123456..
       # 浠庡簱鏁版嵁婧�
@@ -135,7 +135,7 @@
   redis:
     # 鍦板潃
 #    host: 127.0.0.1
-    host: 192.168.1.185
+    host: 172.17.0.1
     # 绔彛锛岄粯璁や负6379
     port: 6379
     # 鏁版嵁搴撶储寮�
diff --git a/src/main/resources/application-tymk.yml b/src/main/resources/application-tymk.yml
index 37fa56e..d836ed9 100644
--- a/src/main/resources/application-tymk.yml
+++ b/src/main/resources/application-tymk.yml
@@ -62,7 +62,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://192.168.1.185:3306/product-inventory-management-tymk?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://172.17.0.1:3306/product-inventory-management-tymk?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: xd@123456..
       # 浠庡簱鏁版嵁婧�
@@ -135,7 +135,7 @@
   redis:
     # 鍦板潃
 #    host: 127.0.0.1
-    host: 192.168.1.185
+    host: 172.17.0.1
     # 绔彛锛岄粯璁や负6379
     port: 6380
     # 鏁版嵁搴撶储寮�
diff --git a/src/main/resources/application-xyhb.yml b/src/main/resources/application-xyhb.yml
index 5ce974a..c710d56 100644
--- a/src/main/resources/application-xyhb.yml
+++ b/src/main/resources/application-xyhb.yml
@@ -62,7 +62,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://192.168.1.185:3306/product-inventory-management-xyhb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://172.17.0.1:3306/product-inventory-management-xyhb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: xd@123456..
       # 浠庡簱鏁版嵁婧�
@@ -135,7 +135,7 @@
   redis:
     # 鍦板潃
 #    host: 127.0.0.1
-    host: 192.168.1.185
+    host: 172.17.0.1
     # 绔彛锛岄粯璁や负6379
     port: 6379
     # 鏁版嵁搴撶储寮�
diff --git a/src/main/resources/application-zyrqCopy.yml b/src/main/resources/application-zyrqCopy.yml
index 5e7f50b..b73a211 100644
--- a/src/main/resources/application-zyrqCopy.yml
+++ b/src/main/resources/application-zyrqCopy.yml
@@ -62,7 +62,7 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://192.168.1.185:3306/product-inventory-management-zyrq?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        url: jdbc:mysql://172.17.0.1:3306/product-inventory-management-zyrq?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
         username: root
         password: xd@123456..
       # 浠庡簱鏁版嵁婧�
@@ -135,7 +135,7 @@
   redis:
     # 鍦板潃
 #    host: 127.0.0.1
-    host: 192.168.1.185
+    host: 172.17.0.1
     # 绔彛锛岄粯璁や负6379
     port: 6380
     # 鏁版嵁搴撶储寮�
diff --git a/src/main/resources/mapper/basic/ProductModelMapper.xml b/src/main/resources/mapper/basic/ProductModelMapper.xml
new file mode 100644
index 0000000..afdfc4a
--- /dev/null
+++ b/src/main/resources/mapper/basic/ProductModelMapper.xml
@@ -0,0 +1,39 @@
+<?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.basic.mapper.ProductModelMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.basic.pojo.ProductModel">
+        <id column="id" property="id" />
+        <result column="product_id" property="productId" />
+        <result column="model" property="model" />
+        <result column="unit" property="unit" />
+        <result column="speculative_trading_name" property="speculativeTradingName" />
+        <result column="tenant_id" property="tenantId" />
+        <result column="product_name" property="productName" />
+        <result column="product_id" property="productId" />
+        <result column="product_code" property="productCode" />
+    </resultMap>
+    <select id="listPageProductModel" resultType="com.ruoyi.basic.pojo.ProductModel">
+        select pm.*,p.product_name
+        from product_model pm
+        left join product p on pm.product_id = p.id
+        <where>
+            <if test="c.model != null and c.model != ''">
+                and pm.model  like  concat('%',#{c.model},'%')
+            </if>
+            <if test="c.productName != null and c.productName != ''">
+                and p.product_name  like  concat('%',#{c.productName},'%')
+            </if>
+        </where>
+        order by  pm.id
+    </select>
+    <select id="selectLatestRecord" resultType="com.ruoyi.basic.pojo.ProductModel">
+            SELECT * FROM product_model
+            ORDER BY create_time DESC, id DESC
+            LIMIT 1
+    </select>
+
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/basic/SupplierManageFileMapper.xml b/src/main/resources/mapper/basic/SupplierManageFileMapper.xml
new file mode 100644
index 0000000..265c9a4
--- /dev/null
+++ b/src/main/resources/mapper/basic/SupplierManageFileMapper.xml
@@ -0,0 +1,9 @@
+<?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.basic.mapper.SupplierManageFileMapper">
+    <select id="supplierManageFileListPage" resultType="com.ruoyi.basic.pojo.SupplierManageFile">
+        select *
+        from supplier_manage_file
+        where supplier_id = #{supplierManageFile.supplierId}
+    </select>
+</mapper>
diff --git a/src/main/resources/mapper/basic/SupplierManageMapper.xml b/src/main/resources/mapper/basic/SupplierManageMapper.xml
index 9e65903..ba7fac3 100644
--- a/src/main/resources/mapper/basic/SupplierManageMapper.xml
+++ b/src/main/resources/mapper/basic/SupplierManageMapper.xml
@@ -22,12 +22,16 @@
         T1.update_time,
         T1.update_user,
         T1.tenant_id,
+        T1.is_white,
         T2.nick_name AS maintainUserName
         FROM supplier_manage T1
         LEFT JOIN sys_user T2 ON T1.maintain_user_id = T2.user_id
         <where>
             <if test="supplierManageDto.supplierName != null and supplierManageDto.supplierName != '' ">
                 AND T1.supplier_name LIKE CONCAT('%',#{supplierManageDto.supplierName},'%')
+            </if>
+            <if test="supplierManageDto.isWhite != null">
+                AND T1.is_white = #{supplierManageDto.isWhite}
             </if>
         </where>
     </select>
@@ -50,6 +54,7 @@
         T1.update_time,
         T1.update_user,
         T1.tenant_id,
+        T1.is_white,
         T2.nick_name AS maintainUserName
         FROM supplier_manage T1
         LEFT JOIN sys_user T2 ON T1.maintain_user_id = T2.user_id
@@ -57,6 +62,9 @@
             <if test="supplierManageDto.supplierName != null and supplierManageDto.supplierName != '' ">
                 AND T1.supplier_name LIKE CONCAT('%',#{supplierManageDto.supplierName},'%')
             </if>
+            <if test="supplierManageDto.isWhite != null">
+                AND T1.is_white = #{supplierManageDto.isWhite}
+            </if>
         </where>
     </select>
 
diff --git a/src/main/resources/mapper/device/DeviceLedgerMapper.xml b/src/main/resources/mapper/device/DeviceLedgerMapper.xml
index 9cee459..2b14b90 100644
--- a/src/main/resources/mapper/device/DeviceLedgerMapper.xml
+++ b/src/main/resources/mapper/device/DeviceLedgerMapper.xml
@@ -11,6 +11,8 @@
         dl.device_name,
         dl.device_model,
         dl.supplier_name,
+        dl.device_brand,
+        dl.storage_location,
         dl.unit,
         dl.number,
         dl.status,
@@ -24,7 +26,7 @@
         dl.un_tax_including_price_total,
         dl.create_time,
         dl.update_time ,
-        su.user_name AS createUser,
+        su.nick_name AS createUser,
         dl.update_user,
         dl.tenant_id
         FROM device_ledger dl
diff --git a/src/main/resources/mapper/device/DeviceRepairMapper.xml b/src/main/resources/mapper/device/DeviceRepairMapper.xml
index 317009b..9982e61 100644
--- a/src/main/resources/mapper/device/DeviceRepairMapper.xml
+++ b/src/main/resources/mapper/device/DeviceRepairMapper.xml
@@ -14,6 +14,7 @@
                 dr.maintenance_name,
                 dr.maintenance_time,
                 dr.maintenance_result,
+                dr.maintenance_price,
                 dr.status,
                 dr.create_time,
                 dr.update_time,
@@ -32,6 +33,9 @@
             </if>
             <if test="deviceRepairDto.deviceModel != null">
                 and dl.device_model like concat('%',#{deviceRepairDto.deviceModel},'%')
+            </if>
+            <if test="deviceRepairDto.status != null">
+                and dr.status = #{deviceRepairDto.status}
             </if>
             <if test="deviceRepairDto.remark != null">
                 and dr.remark like concat('%',#{deviceRepairDto.remark},'%')
@@ -57,6 +61,7 @@
                dr.maintenance_name,
                dr.maintenance_time,
                dr.maintenance_result,
+               dr.maintenance_price,
                dr.status,
                dr.create_time,
                dr.update_time,
diff --git a/src/main/resources/mapper/measuringinstrumentledger/SparePartsMapper.xml b/src/main/resources/mapper/measuringinstrumentledger/SparePartsMapper.xml
index 2968e9a..611d51e 100644
--- a/src/main/resources/mapper/measuringinstrumentledger/SparePartsMapper.xml
+++ b/src/main/resources/mapper/measuringinstrumentledger/SparePartsMapper.xml
@@ -2,11 +2,12 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.measuringinstrumentledger.mapper.SparePartsMapper">
     <select id="listPage" resultType="com.ruoyi.measuringinstrumentledger.dto.SparePartsDto">
-        select sp.*,sp1.name as parentName from spare_parts sp
+        select sp.*,sp1.name as parentName
+        from spare_parts sp
         left join spare_parts sp1 on sp1.id = sp.parent_id
         <where>
-            <if test="spareParts.name != null">
-                and name like concat('%',#{spareParts.name},'%')
+            <if test="spareParts.name != null and spareParts.name != ''">
+                and sp.name like concat('%',#{spareParts.name},'%')
             </if>
         </where>
     </select>
diff --git a/src/main/resources/mapper/procurementrecord/ProcurementExceptionRecordMapper.xml b/src/main/resources/mapper/procurementrecord/ProcurementExceptionRecordMapper.xml
new file mode 100644
index 0000000..3363ce7
--- /dev/null
+++ b/src/main/resources/mapper/procurementrecord/ProcurementExceptionRecordMapper.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.procurementrecord.mapper.ProcurementExceptionRecordMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml b/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
index eac12f4..645b7c8 100644
--- a/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
+++ b/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
@@ -178,7 +178,7 @@
                 and t1.create_time &lt;= #{req.endDate}
             </if>
         </where>
-        group by t2.product_category,t2.specification_model,t1.unit_price
+        group by t3.supplier_name,t2.product_category,t2.specification_model,t1.unit_price
         order by t1.create_time desc
     </select>
     <select id="listCopy" resultType="com.ruoyi.procurementrecord.dto.ProcurementPageDtoCopy">
@@ -236,6 +236,158 @@
             t1.update_time as uTime,
             t1.create_by
         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
+        where t1.type = 1
+        group by t3.supplier_name,t2.product_category,t2.specification_model
+    </select>
+
+    <select id="listPageByProduction" resultType="com.ruoyi.procurementrecord.dto.ProcurementPageDto">
+        select
+        t3.customer_contract_no,
+        t3.sales_contract_no,
+        t3.customer_name,
+        t2.product_category,
+        t1.id,
+        t1.sales_ledger_product_id,
+        t1.create_user,
+        t2.specification_model,
+        t2.unit,
+        t2.tax_rate,
+        t2.tax_inclusive_unit_price,
+        (t1.inbound_num * t2.tax_inclusive_unit_price) as taxInclusiveTotalPrice,
+        (t1.inbound_num * t2.tax_inclusive_unit_price - t1.inbound_num * t2.tax_inclusive_unit_price * t2.tax_rate / 100) as taxExclusiveTotalPrice,
+        t1.unit_price,
+        t1.total_price,
+        t1.inbound_batches,
+        t1.inbound_num,
+        t1.inbound_num as inboundNum0,
+        t1.create_time,
+        t1.update_time,
+        t1.create_by,
+        t2.warn_num,
+        t2.product_id
+        from  procurement_record_storage t1
+        left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id and t2.type = 1
+        left join sales_ledger t3 on t3.id = t2.sales_ledger_id
+        <where>
+            t1.type = 2 and t1.sales_ledger_product_id != 0
+            <if test="req.customerName != null and req.customerName != ''">
+                and t3.customer_name like  concat('%',#{req.customerName},'%')
+            </if>
+            <if test="req.productCategory != null and req.productCategory != ''">
+                and t2.product_category like  concat('%',#{req.productCategory},'%')
+            </if>
+            <if test="req.timeStr != null and req.timeStr != ''">
+                and t1.create_time like  concat('%',#{req.timeStr},'%')
+            </if>
+        </where>
+        order by t1.create_time desc
+    </select>
+    <select id="listPageCopyByProduction" resultType="com.ruoyi.procurementrecord.dto.ProcurementPageDtoCopy">
+        select
+        t3.customer_contract_no,
+        t3.sales_contract_no,
+        t3.customer_name,
+        t2.product_category,
+        t1.id,
+        t1.sales_ledger_product_id,
+        t1.create_user,
+        t2.specification_model,
+        t2.unit,
+        t2.min_stock,
+        t2.tax_rate,
+        t2.tax_inclusive_unit_price,
+        t2.tax_inclusive_total_price,
+        t2.tax_exclusive_total_price,
+        t1.inbound_batches,
+        sum(t1.total_price) as totalPrice,
+        t1.unit_price,
+        sum(t1.inbound_num) as inboundNum,
+        sum(t1.inbound_num) as inboundNum0,
+        t1.create_time,
+        t1.update_time,
+        t1.create_by,
+        t2.warn_num,
+        t2.product_id
+        from  procurement_record_storage t1
+        left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id and t2.type = 1
+        left join sales_ledger t3 on t3.id = t2.sales_ledger_id
+        <where>
+            t1.type = 2
+            <if test="req.customerName != null and req.customerName != ''">
+                and t3.customer_name like  concat('%',#{req.customerName},'%')
+            </if>
+            <if test="req.productCategory != null and req.productCategory != ''">
+                and t2.product_category like  concat('%',#{req.productCategory},'%')
+            </if>
+            <if test="req.timeStr != null and req.timeStr != ''">
+                and t1.create_time like  concat('%',#{req.timeStr},'%')
+            </if>
+            <if test="req.salesLedgerProductId != null and req.salesLedgerProductId != ''">
+                and t1.sales_ledger_product_id = #{req.salesLedgerProductId}
+            </if>
+            <if test="req.reportDate != null">
+                and t1.create_time >= #{req.reportDate} and t1.create_time &lt; DATE_ADD(#{req.reportDate}, INTERVAL 1 DAY)
+            </if>
+            <if test="req.startMonth != null">
+                and t1.create_time >= #{req.startMonth}
+            </if>
+            <if test="req.endMonth != null">
+                and t1.create_time &lt;= #{req.endMonth}
+            </if>
+            <if test="req.startDate != null">
+                and t1.create_time >= #{req.startDate}
+            </if>
+            <if test="req.endDate != null">
+                and t1.create_time &lt;= #{req.endDate}
+            </if>
+        </where>
+        group by t2.product_category,t2.specification_model,t1.unit_price
+        order by t1.create_time desc
+    </select>
+    <select id="listPagePRS" resultType="com.ruoyi.procurementrecord.dto.ProcurementPageDtoCopy">
+        select *
+        from  procurement_record_storage t1
+        left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id
+          <where>
+              1=1
+              <if test="req.productCategory != null and req.productCategory != ''">
+                  and t2.product_category like  concat('%',#{req.productCategory},'%')
+              </if>
+              <if test="req.timeStr != null and req.timeStr != ''">
+                  and t1.create_time like  concat('%',#{req.timeStr},'%')
+              </if>
+              <if test="req.salesLedgerProductId != null and req.salesLedgerProductId != ''">
+                  and t1.sales_ledger_product_id = #{req.salesLedgerProductId}
+              </if>
+          </where>
+    </select>
+    <select id="getSumQuantity" resultType="BigDecimal">
+        select COALESCE(sum(inbound_num), 0)
+        from procurement_record_storage
+        where product_model_id = #{productModelId}
+    </select>
+    <select id="listPageByProductProduction" resultType="com.ruoyi.procurementrecord.dto.ProcurementPageDto">
+        select
+        t1.*,
+        t2.model as specification_model  ,
+        t2.unit,
+        t3.product_name as product_category
+        from  procurement_record_storage t1
+        left  join product_model t2 on t1.product_model_id = t2.id
+        left join product t3 on t2.product_id = t3.id
+        <where>
+            t1.type = 2 and t1.sales_ledger_product_id  = 0
+            <if test="req.productCategory != null and req.productCategory != ''">
+                and t3.product_name like  concat('%',#{req.productCategory},'%')
+            </if>
+
+            <if test="req.timeStr != null and req.timeStr != ''">
+                and t1.create_time like  concat('%',#{req.timeStr},'%')
+            </if>
+        </where>
+        order by t1.create_time desc
                   left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id and t2.type = 1
                   left join sales_ledger t3 on t3.id = t2.sales_ledger_id
         where t1.type = 2
diff --git a/src/main/resources/mapper/procurementrecord/ProcurementRecordOutMapper.xml b/src/main/resources/mapper/procurementrecord/ProcurementRecordOutMapper.xml
index c8290fe..d220c21 100644
--- a/src/main/resources/mapper/procurementrecord/ProcurementRecordOutMapper.xml
+++ b/src/main/resources/mapper/procurementrecord/ProcurementRecordOutMapper.xml
@@ -30,84 +30,74 @@
         <where>
             and t1.type = 1
             <if test="req.supplierName != null and req.supplierName != ''">
-                and t3.supplier_name like  concat('%',#{req.supplierName},'%')
+                and t3.supplier_name like concat('%',#{req.supplierName},'%')
             </if>
             <if test="req.productCategory != null and req.productCategory != ''">
-                and t2.product_category like  concat('%',#{req.productCategory},'%')
+                and t2.product_category like concat('%',#{req.productCategory},'%')
             </if>
             <if test="req.timeStr != null and req.timeStr != ''">
-                and t1.create_time like  concat('%',#{req.timeStr},'%')
+                and t1.create_time like concat('%',#{req.timeStr},'%')
             </if>
         </where>
         order by t1.create_time desc
     </select>
     <select id="list" resultType="com.ruoyi.procurementrecord.dto.ProcurementRecordOutPageDto">
-        select
-            t3.supplier_name,
-            t2.product_category,
-            t1.id,
-            t2.specification_model,
-            t2.unit,
-            t2.tax_rate,
-            t2.tax_inclusive_unit_price,
-            t2.tax_inclusive_total_price,
-            t2.tax_exclusive_total_price,
-            t1.inbound_num,
-            t1.create_time,
-            t1.create_time as time,
-            t1.create_by,
-            t4.box_num,
-            t4.carton_specifications,
-            t4.dollar_price
-        from  procurement_record_out t1
-                  left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id
-                  left join purchase_ledger t3 on t3.id = t2.sales_ledger_id
-            left join procurement_record_storage t4 on t4.id = t1.procurement_record_storage_id
+        select t3.supplier_name,
+               t2.product_category,
+               t1.id,
+               t2.specification_model,
+               t2.unit,
+               t2.tax_rate,
+               t2.tax_inclusive_unit_price,
+               t2.tax_inclusive_total_price,
+               t2.tax_exclusive_total_price,
+               t1.inbound_num,
+               t1.create_time,
+               t1.create_time as time,
+               t1.create_by
+        from procurement_record_out t1
+                 left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id
+                 left join purchase_ledger t3 on t3.id = t2.sales_ledger_id
         where t1.type = 1
     </select>
 
     <select id="listOne" resultType="com.ruoyi.procurementrecord.dto.ProcurementRecordOutPageDto">
-        select
-            t3.customer_contract_no,
-            t3.sales_contract_no,
-            t3.customer_name,
-            t2.product_category,
-            t1.id,
-            t2.specification_model,
-            t2.unit,
-            t2.tax_rate,
-            t2.tax_inclusive_unit_price,
-            t2.tax_inclusive_total_price,
-            t2.tax_exclusive_total_price,
-            t1.inbound_num,
-            t1.create_time,
-            t1.create_time as time,
-            t1.create_by
-        from  procurement_record_out t1
-            left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id
-            left join sales_ledger t3 on t3.id = t2.sales_ledger_id
+        select t3.customer_contract_no,
+               t3.sales_contract_no,
+               t3.customer_name,
+               t2.product_category,
+               t1.id,
+               t2.specification_model,
+               t2.unit,
+               t2.tax_rate,
+               t2.tax_inclusive_unit_price,
+               t2.tax_inclusive_total_price,
+               t2.tax_exclusive_total_price,
+               t1.inbound_num,
+               t1.create_time,
+               t1.create_time as time,
+               t1.create_by
+        from procurement_record_out t1
+                 left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id
+                 left join sales_ledger t3 on t3.id = t2.sales_ledger_id
         where t1.type = 2
     </select>
 
     <select id="listTwo" resultType="com.ruoyi.procurementrecord.dto.ProcurementRecordOutPageDto">
-        select
-            t1.id,
-            t1.`code`,
-            t3.supplier_name,
-            t2.product_category,
-            t2.specification_model,
-            t2.unit,
-            t2.tax_rate,
-            t2.tax_inclusive_unit_price,
-            t2.tax_inclusive_total_price,
-            t2.tax_exclusive_total_price,
-            t1.inbound_num,
-            t1.create_time,
-            t1.create_time as time,
-            t1.create_by
-        from  procurement_record_out t1
-            left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id
-            left join purchase_ledger t3 on t3.id = t2.sales_ledger_id
+        select t1.supplier_name,
+               t1.product_category,
+               t1.id,
+               t1.specification_model,
+               t1.unit,
+               t1.tax_rate,
+               t1.tax_inclusive_unit_price,
+               t1.tax_inclusive_total_price,
+               t1.tax_exclusive_total_price,
+               t1.inbound_num,
+               t1.create_time,
+               t1.create_time as time,
+               t1.create_by
+        from procurement_record_out t1
         where t1.type = 3
     </select>
     <select id="listPageByProduct" resultType="com.ruoyi.procurementrecord.dto.ProcurementRecordOutPageDto">
@@ -128,21 +118,21 @@
         t1.create_time,
         t1.create_by,
         t4.unit_price,
-        t4.unit_price *  t1.inbound_num as totalPrice
-        from  procurement_record_out t1
+        t4.unit_price * t1.inbound_num as totalPrice
+        from procurement_record_out t1
         left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id and t2.type = 1
         left join sales_ledger t3 on t3.id = t2.sales_ledger_id
         left join procurement_record_storage t4 on t4.id = t1.procurement_record_storage_id
         <where>
             and t1.type = 2
             <if test="req.customerName != null and req.customerName != ''">
-                and t3.customer_name like  concat('%',#{req.customerName},'%')
+                and t3.customer_name like concat('%',#{req.customerName},'%')
             </if>
             <if test="req.productCategory != null and req.productCategory != ''">
-                and t2.product_category like  concat('%',#{req.productCategory},'%')
+                and t2.product_category like concat('%',#{req.productCategory},'%')
             </if>
             <if test="req.timeStr != null and req.timeStr != ''">
-                and t1.create_time like  concat('%',#{req.timeStr},'%')
+                and t1.create_time like concat('%',#{req.timeStr},'%')
             </if>
         </where>
         order by t1.create_time desc
@@ -152,7 +142,6 @@
         t2.supplier_name,
         t2.product_category,
         t1.id,
-        t1.code,
         t2.specification_model,
         t2.unit,
         t2.tax_rate,
@@ -163,24 +152,61 @@
         t1.create_time,
         t1.create_by,
         t2.item_type,
-        t2.box_num,
-        t2.carton_specifications,
-        t2.dollar_price,
-        t2.url
-        from  procurement_record_out t1
+        t2.code
+        from procurement_record_out t1
         left join custom_storage t2 on t2.id = t1.procurement_record_storage_id
         <where>
             t1.type = 3
             <if test="req.supplierName != null and req.supplierName != ''">
-                and t2.supplier_name like  concat('%',#{req.supplierName},'%')
+                and t2.supplier_name like concat('%',#{req.supplierName},'%')
             </if>
             <if test="req.productCategory != null and req.productCategory != ''">
-                and t2.product_category like  concat('%',#{req.productCategory},'%')
+                and t2.product_category like concat('%',#{req.productCategory},'%')
             </if>
             <if test="req.timeStr != null and req.timeStr != ''">
-                and t1.create_time like  concat('%',#{req.timeStr},'%')
+                and t1.create_time like concat('%',#{req.timeStr},'%')
             </if>
         </where>
         order by t1.create_time desc
     </select>
+
+    <select id="getSumQuantity" resultType="BigDecimal">
+        select COALESCE(sum(inbound_num), 0)
+        from procurement_record_out
+        where
+           product_model_id = #{productModelId}
+    </select>
+    <select id="selectCode" resultType="com.ruoyi.procurementrecord.pojo.ProcurementRecordOut">
+        select *
+        from procurement_record_out
+        where code like concat('%', #{format})
+        order by id desc
+        limit 1
+    </select>
+    <select id="listPageBySemiProduct" resultType="com.ruoyi.procurementrecord.dto.ProcurementRecordOutPageDto">
+        select
+        t1.id,
+        t1.code,
+        t2.unit,
+        t1.inbound_num,
+        t1.create_time,
+        t1.create_by,
+        t2.model as specification_model,
+        t2.product_code,
+        t3.product_name as product_category
+        from procurement_record_out t1
+        left join product_model t2 on t2.id = t1.product_model_id
+        left join product t3 on t3.id = t2.product_id
+        <where>
+            and t1.type = 4
+            <if test="req.productCategory !=null and req.productCategory !=''">
+                t3.product_name like concat('%',#{req.productCategory},'%')
+            </if>
+            <if test="req.timeStr != null and req.timeStr != ''">
+                and t1.create_time like concat('%',#{req.timeStr},'%')
+            </if>
+        </where>
+        order by t1.create_time desc
+    </select>
+
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/production/ProcessRouteItemMapper.xml b/src/main/resources/mapper/production/ProcessRouteItemMapper.xml
new file mode 100644
index 0000000..1b5e2b4
--- /dev/null
+++ b/src/main/resources/mapper/production/ProcessRouteItemMapper.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.production.mapper.ProcessRouteItemMapper">
+
+    <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProcessRouteItem">
+        <id property="id" column="id"/>
+        <result property="routeId" column="route_id"/>
+        <result property="processId" column="process_id"/>
+        <result property="productModelId" column="product_model_id"/>
+        <result property="tenantId" column="tenant_id"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="dragSort" column="drag_sort"/>
+    </resultMap>
+
+    <select id="listProcessRouteItemDto" resultType="com.ruoyi.production.dto.ProcessRouteItemDto">
+        select pri.*,
+               pr.description ,
+               pp.name as process_name,
+               pm.speculative_trading_name,
+               pm.product_id,
+               pm.model,
+               p.product_name,
+               pm.unit
+        from
+            process_route_item pri
+                left join product_model pm on pri.product_model_id = pm.id
+                left join product_process pp on pp.id = pri.process_id
+                left join product p on p.id = pm.product_id
+                left join process_route pr on pr.id = pri.route_id
+        where
+            pri.route_id = #{c.routeId}
+        order by pri.drag_sort
+    </select>
+</mapper>
diff --git a/src/main/resources/mapper/production/ProcessRouteMapper.xml b/src/main/resources/mapper/production/ProcessRouteMapper.xml
new file mode 100644
index 0000000..51c11b4
--- /dev/null
+++ b/src/main/resources/mapper/production/ProcessRouteMapper.xml
@@ -0,0 +1,28 @@
+<?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.ProcessRouteMapper">
+
+
+    <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProcessRoute">
+            <id property="id" column="id"/>
+            <result property="productModelId" column="product_model_id"/>
+            <result property="description" column="description"/>
+            <result property="tenantId" column="tenant_id"/>
+            <result property="createTime" column="create_time"/>
+            <result property="updateTime" column="update_time"/>
+    </resultMap>
+
+    <select id="pageProcessRouteDto" resultType="com.ruoyi.production.dto.ProcessRouteDto">
+        select ps.*, p.product_name,pm.product_id,pm.model,pb.bom_no
+        from process_route ps
+        left join product_bom pb on ps.bom_id = pb.id
+        left join product_model pm on ps.product_model_id = pm.id
+        left join product p on pm.product_id = p.id
+        <where>
+            <if test="c.model != null and c.model != ''">
+                and pm.model like concat('%',#{c.model},'%')
+            </if>
+        </where>
+        order by ps.id asc
+    </select>
+</mapper>
diff --git a/src/main/resources/mapper/production/ProductBomMapper.xml b/src/main/resources/mapper/production/ProductBomMapper.xml
new file mode 100644
index 0000000..ec06cd3
--- /dev/null
+++ b/src/main/resources/mapper/production/ProductBomMapper.xml
@@ -0,0 +1,48 @@
+<?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.ProductBomMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductBom">
+        <id column="id" property="id"/>
+        <result column="product_model_id" property="productModelId"/>
+        <result column="bom_no" property="bomNo"/>
+        <result column="remark" property="remark"/>
+        <result column="version" property="version"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="create_user" property="createUser"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="tenant_id" property="tenantId"/>
+    </resultMap>
+    <select id="listPage" resultType="com.ruoyi.production.dto.ProductBomDto">
+        select * from (select pb.*,
+        pm.model productModelName,
+        p.product_name productName
+        from product_bom pb
+        left join product_model pm on pb.product_model_id = pm.id
+        left join product p on pm.product_id = p.id)A
+        where 1=1
+        <if test="c.productModelName != null">
+            and productModelName = #{c.productModelName}
+        </if>
+        <if test="c.productName != null">
+            and productName = #{c.productName}
+        </if>
+        <if test="c.bomNo != null">
+            and bom_no = #{c.bomNo}
+        </if>
+        <if test="c.version != null">
+            and version = #{c.version}
+        </if>
+    </select>
+    <select id="getById" resultType="com.ruoyi.production.dto.ProductBomDto">
+        select pb.*,
+               pm.model productModelName,
+               p.product_name productName
+        from product_bom pb
+                 left join product_model pm on pb.product_model_id = pm.id
+                 left join product p on pm.product_id = p.id
+    </select>
+
+</mapper>
diff --git a/src/main/resources/mapper/production/ProductOrderMapper.xml b/src/main/resources/mapper/production/ProductOrderMapper.xml
new file mode 100644
index 0000000..b47d5cf
--- /dev/null
+++ b/src/main/resources/mapper/production/ProductOrderMapper.xml
@@ -0,0 +1,89 @@
+<?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.ProductOrderMapper">
+
+
+    <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProductOrder">
+        <id property="id" column="id"/>
+        <result property="productModelId" column="product_model_id"/>
+        <result property="tenantId" column="tenant_id"/>
+        <result property="salesLedgerId" column="sales_ledger_id"/>
+        <result property="routeId" column="route_id"/>
+        <result property="npsNo" column="nps_no"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+    <select id="pageProductOrder" resultType="com.ruoyi.production.dto.ProductOrderDto">
+        select po.*,
+        sl.sales_contract_no,
+        sl.customer_name,
+        slp.product_category,
+        slp.specification_model,
+        ppr.process_route_code,
+        pb.bom_no,
+        ROUND(po.complete_quantity / po.quantity * 100, 2) AS completionStatus
+        from product_order po
+        left join sales_ledger sl on po.sales_ledger_id = sl.id
+        left join sales_ledger_product slp on po.product_model_id = slp.id
+        left join product_process_route ppr on po.id = ppr.product_order_id
+        left join product_bom pb on pb.id = ppr.bom_id
+        <where>
+            <if test="c.npsNo != null and c.npsNo != ''">
+                and po.nps_no like concat('%',#{c.npsNo},'%')
+            </if>
+            <if test="c.salesContractNo != null and c.salesContractNo != ''">
+                and sl.sales_contract_no like concat('%',#{c.salesContractNo},'%')
+            </if>
+            <if test="c.customerName != null and c.customerName != ''">
+                and sl.customer_name like concat('%',#{c.customerName},'%')
+            </if>
+            <if test="c.productCategory != null and c.productCategory != ''">
+                and slp.product_category like concat('%',#{c.productCategory},'%')
+            </if>
+            <if test="c.specificationModel != null and c.specificationModel != ''">
+                and slp.specification_model like concat('%',#{c.specificationModel},'%')
+            </if>
+        </where>
+    </select>
+    <select id="productMainByOrderId" resultType="com.ruoyi.production.dto.ProductOrderDto">
+        select po.*,
+               pwo.work_order_no,
+               pwo.report_work,
+               pwo.status,
+               pwo.quantity,
+               pwo.plan_quantity
+        from product_order po
+                 left join product_work_order pwo on po.id = pwo.product_order_id
+        where po.id = #{c.id}
+    </select>
+    <select id="listProcessRoute" resultType="com.ruoyi.production.pojo.ProcessRoute">
+        select pr.*
+        from process_route pr
+                 left join product_model pm on pr.product_model_id = pm.id
+                 left join sales_ledger_product slp on pm.id = slp.product_model_id
+        where slp.id = #{productModelId}
+    </select>
+    <select id="listProcessBom" resultType="com.ruoyi.production.dto.ProductStructureDto">
+        select ps.id,
+               ps.product_model_id,
+               ps.process_id,
+               ps.unit_quantity,
+               ps.unit_quantity * po.quantity as demandedQuantity,
+               ps.unit,
+               p.product_name,
+               pp.name as  process_name,
+               pm.product_id,
+               pm.model
+        from
+            product_structure ps
+                left join product_model pm on ps.product_model_id = pm.id
+                left join product p on pm.product_id = p.id
+                left join product_process pp on ps.process_id = pp.id
+                left join product_process_route ppr on ps.bom_id = ppr.bom_id
+                left join product_order po on po.id = ppr.product_order_id
+        where ppr.product_order_id = #{orderId}
+        order by ps.id
+    </select>
+
+
+</mapper>
diff --git a/src/main/resources/mapper/production/ProductProcessMapper.xml b/src/main/resources/mapper/production/ProductProcessMapper.xml
new file mode 100644
index 0000000..a2292e2
--- /dev/null
+++ b/src/main/resources/mapper/production/ProductProcessMapper.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.production.mapper.ProductProcessMapper">
+
+    <select id="listPage" resultType="com.ruoyi.production.dto.ProductProcessDto">
+        SELECT
+        *
+        FROM
+        product_process p
+        <where>
+            <if test="productProcessDto.name != null and productProcessDto.name != '' ">
+                AND  p.name LIKE CONCAT('%',#{productProcessDto.name},'%')
+            </if>
+            <if test="productProcessDto.no != null and productProcessDto.no != '' ">
+                AND  p.no LIKE CONCAT('%',#{productProcessDto.no},'%')
+            </if>
+        </where>
+        order by p.id asc
+    </select>
+</mapper>
diff --git a/src/main/resources/mapper/production/ProductProcessRouteItemMapper.xml b/src/main/resources/mapper/production/ProductProcessRouteItemMapper.xml
new file mode 100644
index 0000000..13f0ad7
--- /dev/null
+++ b/src/main/resources/mapper/production/ProductProcessRouteItemMapper.xml
@@ -0,0 +1,28 @@
+<?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.ProductProcessRouteItemMapper">
+
+
+    <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProductProcessRouteItem">
+        <id property="id" column="id"/>
+        <result property="productModelId" column="product_model_id"/>
+        <result property="tenantId" column="tenant_id"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+    <select id="listItem" resultType="com.ruoyi.production.dto.ProductProcessRouteItemDto">
+        select ppri.*,
+               pp.name as process_name,
+               pm.model,
+               pm.unit,
+               p.product_name
+        from product_process_route_item ppri
+                 left join product_model pm on ppri.product_model_id = pm.id
+                 left join product p on pm.product_id = p.id
+                 left join product_process pp on pp.id = ppri.process_id
+        where ppri.product_order_id = #{orderId}
+        order by ppri.drag_sort
+    </select>
+
+
+</mapper>
diff --git a/src/main/resources/mapper/production/ProductProcessRouteMapper.xml b/src/main/resources/mapper/production/ProductProcessRouteMapper.xml
new file mode 100644
index 0000000..dd4809f
--- /dev/null
+++ b/src/main/resources/mapper/production/ProductProcessRouteMapper.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.production.mapper.ProductProcessRouteMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductProcessRoute">
+        <id column="id" property="id"/>
+        <result column="product_model_id" property="productModelId"/>
+        <result column="description" property="description"/>
+        <result column="tenant_id" property="tenantId"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="bom_id" property="bomId"/>
+        <result column="process_route_code" property="processRouteCode"/>
+        <result column="product_order_id" property="productOrderId"/>
+    </resultMap>
+    <select id="listMain" resultType="com.ruoyi.production.dto.ProcessRouteDto">
+        select ppr.*, p.product_name, pm.product_id, pm.model, pb.bom_no
+        from product_process_route ppr
+                 left join product_bom pb on ppr.bom_id = pb.id
+                 left join product_model pm on ppr.product_model_id = pm.id
+                 left join product p on pm.product_id = p.id
+        where ppr.product_order_id = #{orderId}
+    </select>
+
+</mapper>
diff --git a/src/main/resources/mapper/production/ProductStructureMapper.xml b/src/main/resources/mapper/production/ProductStructureMapper.xml
new file mode 100644
index 0000000..1833487
--- /dev/null
+++ b/src/main/resources/mapper/production/ProductStructureMapper.xml
@@ -0,0 +1,43 @@
+<?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.ProductStructureMapper">
+
+    <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProductStructure">
+        <id property="id" column="id"/>
+        <result property="productModelId" column="product_model_id"/>
+        <result property="processId" column="process_id"/>
+        <result property="unitQuantity" column="unit_quantity"/>
+        <result property="demandedQuantity" column="demanded_quantity"/>
+        <result property="unit" column="unit"/>
+        <result property="tenantId" column="tenant_id"/>
+    </resultMap>
+    <select id="listBybomId" resultType="com.ruoyi.production.dto.ProductStructureDto">
+        select ps.*,
+               p.product_name,
+               pp.name as  process_name,
+               pm.product_id,
+               pm.model
+        from
+            product_structure ps
+                left join product_model pm on ps.product_model_id = pm.id
+                left join product p on pm.product_id = p.id
+                left join product_process pp on ps.process_id = pp.id
+        where ps.bom_id = #{bomId}
+        order by ps.id
+    </select>
+    <select id="listByproductModelId" resultType="com.ruoyi.production.dto.ProductStructureDto">
+        select ps.*,
+               p.product_name,
+               pp.name as  process_name,
+               pm.product_id,
+               pm.model
+        from
+            product_structure ps
+                left join product_bom pb on ps.bom_id = pb.id
+                left join product_model pm on ps.product_model_id = pm.id
+                left join product p on pm.product_id = p.id
+                left join product_process pp on ps.process_id = pp.id
+        where pb.product_model_id = #{productModelId}
+        order by ps.id
+    </select>
+</mapper>
diff --git a/src/main/resources/mapper/production/ProductWorkOrderMapper.xml b/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
new file mode 100644
index 0000000..2ab8057
--- /dev/null
+++ b/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.production.mapper.ProductWorkOrderMapper">
+
+    <resultMap id="BaseResultMap" type="com.ruoyi.production.pojo.ProductWorkOrder">
+        <result column="id" property="id"/>
+        <result column="product_process_route_item_id" property="productProcessRouteItemId"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="work_order_no" property="workOrderNo"/>
+        <result column="status" property="status"/>
+        <result column="tenant_id" property="tenantId"/>
+        <result column="actual_end_time" property="planStartTime"/>
+        <result column="plan_end_time" property="planEndTime"/>
+        <result column="actual_start_time" property="actualStartTime"/>
+        <result column="actualEndTime" property="actualEndTime"/>
+    </resultMap>
+
+    <select id="pageProductWorkOrder" resultType="com.ruoyi.production.dto.ProductWorkOrderDto">
+        SELECT
+        pwo.*,
+        pp.NAME as processName,
+        pm.model,
+        pm.unit,
+        p.product_name AS productName,
+        po.nps_no AS productOrderNpsNo,
+        ROUND(pwo.complete_quantity / pwo.plan_quantity * 100, 2) AS completionStatus
+        FROM
+        product_work_order pwo
+        LEFT JOIN product_process_route_item ppri ON ppri.id = pwo.product_process_route_item_id
+        LEFT JOIN product_order po ON po.id = pwo.product_order_id
+        LEFT JOIN product_process pp ON pp.id = ppri.process_id
+        LEFT JOIN product_model pm ON pm.id = ppri.product_model_id
+        LEFT JOIN product p ON p.id = pm.product_id
+        <where>
+            <if test="c.workOrderNo != null and c.workOrderNo != ''">
+                pwo.work_order_no like concat('%',#{c.workOrderNo},'%')
+            </if>
+        </where>
+    </select>
+    <select id="selectProductWorkOrderDtoList" resultType="com.ruoyi.production.dto.ProductWorkOrderDto">
+        select *
+        from product_work_order pwo
+        left join product_order po on po.id = pwo.product_order_id
+    </select>
+
+    <update id="updatePlanQuantity" parameterType="java.util.Map">
+        UPDATE product_work_order
+        SET
+            report_work = #{reportWork},
+            plan_quantity = plan_quantity - #{deductQuantity}
+        WHERE id = #{workOrderId}
+    </update>
+
+    <update id="rollbackPlanQuantity" parameterType="java.lang.Long">
+        UPDATE product_work_order pwo
+        INNER JOIN production_product_main ppm
+        ON pwo.id = ppm.work_order_id
+        AND ppm.id = #{productMainId}
+        INNER JOIN production_product_output ppo
+        ON ppo.product_main_id = ppm.id
+        SET
+        pwo.plan_quantity = pwo.plan_quantity + ppo.quantity,
+        pwo.report_work = 0,
+        pwo.quantity = 0
+        WHERE pwo.id = ppm.work_order_id
+    </update>
+</mapper>
diff --git a/src/main/resources/mapper/production/ProductionProductInputMapper.xml b/src/main/resources/mapper/production/ProductionProductInputMapper.xml
new file mode 100644
index 0000000..7d203f3
--- /dev/null
+++ b/src/main/resources/mapper/production/ProductionProductInputMapper.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.production.mapper.ProductionProductInputMapper">
+
+    <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProductionProductInput">
+        <id property="id" column="id"/>
+        <result property="productMainId" column="product_main_id"/>
+        <result property="productModelId" column="product_model_id"/>
+        <result property="quantity" column="quantity"/>
+        <result property="tenantId" column="tenant_id"/>
+        <result property="createTime" column="create_time"/>
+    </resultMap>
+    <select id="listPageProductionProductInputDto" resultType="com.ruoyi.production.dto.ProductionProductInputDto">
+        select ppi.*,
+        pm.model as model,
+        ppm.product_no as productNo
+        from
+        production_product_input ppi
+        left join production_product_main ppm on ppm.id = ppi.product_main_id
+        left join product_model pm on pm.id = ppi.product_model_id
+        <where>
+            <if test="c.productMainId != null and c.productMainId > 0">
+                and ppm.id = #{c.productMainId}
+            </if>
+        </where>
+        order by ppi.id
+    </select>
+
+    <delete id="deleteByProductMainIds" parameterType="java.util.List">
+        DELETE FROM production_product_input
+        WHERE product_main_id IN
+        <foreach collection="productMainIds" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>
diff --git a/src/main/resources/mapper/production/ProductionProductMainMapper.xml b/src/main/resources/mapper/production/ProductionProductMainMapper.xml
new file mode 100644
index 0000000..3a0542c
--- /dev/null
+++ b/src/main/resources/mapper/production/ProductionProductMainMapper.xml
@@ -0,0 +1,48 @@
+<?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.ProductionProductMainMapper">
+
+    <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProductionProductMain">
+        <id property="id" column="id"/>
+        <result property="productNo" column="product_no"/>
+        <result property="userId" column="user_id"/>
+        <result property="workOrderId" column="work_order_id"/>
+        <result property="tenantId" column="tenant_id"/>
+        <result property="createTime" column="create_time"/>
+        <result property="status" column="status"/>
+    </resultMap>
+
+    <select id="listPageProductionProductMainDto" resultType="com.ruoyi.production.dto.ProductionProductMainDto">
+        select ppm.*,
+               pwo.work_order_no as workOrderNo,
+               pwo.status as workOrderStatus,
+               u.nick_name as nickName
+        from
+            production_product_main ppm
+                left join product_work_order pwo on pwo.id = ppm.work_order_id
+                left join sys_user u on u.user_id = ppm.user_id
+        <where>
+            <if test="c.nickName != null and c.nickName != ''">
+                and u.nick_name like concat('%',#{c.nickName},'%')
+            </if>
+            <if test="c.workOrderNo != null and c.workOrderNo != ''">
+                and pwo.work_order_no like concat('%',#{c.workOrderNo},'%')
+            </if>
+            <if test="c.workOrderStatus != null and c.workOrderStatus != ''">
+                and pwo.status = #{c.workOrderStatus}
+            </if>
+            <if test="c.status != null and c.status != ''">
+                and ppm.status = #{c.status}
+            </if>
+        </where>
+        order by ppm.id
+    </select>
+
+    <delete id="deleteByWorkOrderIds" parameterType="java.util.List">
+        DELETE FROM production_product_main
+        WHERE work_order_id IN
+        <foreach collection="workOrderIds" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>
diff --git a/src/main/resources/mapper/production/ProductionProductOutputMapper.xml b/src/main/resources/mapper/production/ProductionProductOutputMapper.xml
new file mode 100644
index 0000000..e5d17fc
--- /dev/null
+++ b/src/main/resources/mapper/production/ProductionProductOutputMapper.xml
@@ -0,0 +1,37 @@
+<?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.ProductionProductOutputMapper">
+
+    <resultMap id="basicMap" type="com.ruoyi.production.pojo.ProductionProductOutput">
+        <id property="id" column="id"/>
+        <result property="productMainId" column="product_main_id"/>
+        <result property="productModelId" column="product_model_id"/>
+        <result property="quantity" column="quantity"/>
+        <result property="tenantId" column="tenant_id"/>
+        <result property="createTime" column="create_time"/>
+    </resultMap>
+
+    <select id="listPageProductionProductOutputDto" resultType="com.ruoyi.production.dto.ProductionProductOutputDto">
+        select ppo.*,
+        pm.model as model,
+        ppm.product_no as productNo
+        from
+        production_product_output ppo
+        left join production_product_main ppm on ppm.id = ppo.product_main_id
+        left join product_model pm on pm.id = ppo.product_model_id
+        <where>
+            <if test="c.productMainId != null and c.productMainId > 0">
+                and ppm.id = #{c.productMainId}
+            </if>
+        </where>
+        order by ppo.id
+    </select>
+
+    <delete id="deleteByProductMainIds" parameterType="java.util.List">
+        DELETE FROM production_product_output
+        WHERE product_main_id IN
+        <foreach collection="productMainIds" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>
diff --git a/src/main/resources/mapper/production/SalesLedgerProductionAccountingMapper.xml b/src/main/resources/mapper/production/SalesLedgerProductionAccountingMapper.xml
index 29b88f2..ea766e6 100644
--- a/src/main/resources/mapper/production/SalesLedgerProductionAccountingMapper.xml
+++ b/src/main/resources/mapper/production/SalesLedgerProductionAccountingMapper.xml
@@ -48,6 +48,6 @@
             </if>
         </where>
         group by t4.id
-        order by t4.update_time desc
+        order by t4.scheduling_date desc
     </select>
 </mapper>
diff --git a/src/main/resources/mapper/production/SalesLedgerSchedulingMapper.xml b/src/main/resources/mapper/production/SalesLedgerSchedulingMapper.xml
index ebfd98b..cac4d0e 100644
--- a/src/main/resources/mapper/production/SalesLedgerSchedulingMapper.xml
+++ b/src/main/resources/mapper/production/SalesLedgerSchedulingMapper.xml
@@ -15,6 +15,7 @@
         T2.quantity,
         T2.product_category,
         T2.specification_model,
+        T2.speculative_trading_name,
         T2.unit
         FROM
         sales_ledger_product T2
@@ -42,6 +43,10 @@
             </if>
         </where>
         GROUP BY T2.id
+        <if test="salesLedgerDto.status != null and salesLedgerDto.status.equals('true')">
+            HAVING quantity - schedulingNum > 0
+        </if>
+        order by T1.entry_date desc
     </select>
     <select id="list" resultType="com.ruoyi.production.dto.SalesLedgerSchedulingDto">
         SELECT
@@ -71,6 +76,7 @@
         T2.status,
         T2.scheduling_user_id,
         T2.scheduling_user_name,
+        T2.speculative_trading_name,
         T2.scheduling_date,
         ifNull(T2.scheduling_num,0) AS schedulingNum,
         ifNull(T2.finished_num,0) AS successNum,
@@ -80,7 +86,8 @@
         T1.customer_name,
         t3.product_category,
         t3.specification_model,
-        t3.unit
+        t3.unit,
+        T2.production_line
         FROM
         sales_ledger_scheduling T2
         LEFT JOIN sales_ledger T1 ON T1.id = T2.sales_ledger_id
@@ -109,6 +116,6 @@
                 AND  T2.scheduling_date &lt;= DATE_FORMAT(#{salesLedgerDto.entryDateEnd},'%Y-%m-%d')
             </if>
         </where>
-        order by T2.status asc
+        order by T2.scheduling_date desc
     </select>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/production/SalesLedgerWorkMapper.xml b/src/main/resources/mapper/production/SalesLedgerWorkMapper.xml
index 41cbe07..d8dcd22 100644
--- a/src/main/resources/mapper/production/SalesLedgerWorkMapper.xml
+++ b/src/main/resources/mapper/production/SalesLedgerWorkMapper.xml
@@ -13,17 +13,23 @@
         t4.finished_num,
         t4.work_hours,
         t4.process,
+        t4.type,
+        t4.remark,
+        t4.receive,
         T1.sales_contract_no,
         T1.customer_contract_no,
         T1.project_name,
         T1.customer_name,
         t3.product_category,
         t3.specification_model,
-        t3.unit
+        t3.unit,
+        t2.speculative_trading_name,
+        t4.production_line
         FROM
         sales_ledger_work 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 sales_ledger_scheduling t2 on t4.sales_ledger_scheduling_id = t2.id
         <where>
             t3.type = 1
             <if test="salesLedgerDto.status != null and salesLedgerDto.status != '' ">
@@ -48,6 +54,6 @@
                 AND  t4.scheduling_date &lt;= DATE_FORMAT(#{salesLedgerDto.entryDateEnd},'%Y-%m-%d')
             </if>
         </where>
-        order by t4.update_time desc
+        order by t4.scheduling_date desc
     </select>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/purchase/InvoicePurchaseMapper.xml b/src/main/resources/mapper/purchase/InvoicePurchaseMapper.xml
index 413f293..af6e508 100644
--- a/src/main/resources/mapper/purchase/InvoicePurchaseMapper.xml
+++ b/src/main/resources/mapper/purchase/InvoicePurchaseMapper.xml
@@ -66,6 +66,7 @@
                                 LEFT JOIN invoice_registration_product pr ON pr.id = il.invoice_registration_product_id
                        WHERE il.invoice_no IS NOT NULL
                          AND invoice_type = '澧炰笓绁�'
+                         AND DATE_FORMAT(il.invoice_date, '%Y-%m') IS NOT NULL  -- 鏂板锛氳繃婊onth涓篘ULL鐨勬儏
                        GROUP BY DATE_FORMAT(il.invoice_date, '%Y-%m')
                    ) a1
                        LEFT JOIN (
@@ -124,12 +125,14 @@
                            LEFT JOIN invoice_registration_product pr ON pr.id = il.invoice_registration_product_id
                   WHERE il.invoice_no IS NOT NULL
                     AND invoice_type = '澧炰笓绁�'
+                    AND DATE_FORMAT(il.invoice_date, '%Y-%m') IS NOT NULL  -- 鏂板锛氳繃婊onth涓篘ULL鐨勬儏
                   GROUP BY DATE_FORMAT(il.invoice_date, '%Y-%m')
               ) a1 ON a1.month = a2.month
               WHERE a1.month IS NULL
               ORDER BY month
              )as a
         <where>
+            a.month is not null
             <if test="month != null">
                 and a.month = #{month}
             </if>
diff --git a/src/main/resources/mapper/purchase/PaymentRegistrationMapper.xml b/src/main/resources/mapper/purchase/PaymentRegistrationMapper.xml
index 8e8cf1c..d8b9241 100644
--- a/src/main/resources/mapper/purchase/PaymentRegistrationMapper.xml
+++ b/src/main/resources/mapper/purchase/PaymentRegistrationMapper.xml
@@ -164,11 +164,9 @@
         FROM
         payment_registration T1
         LEFT JOIN purchase_ledger t4 ON t4.id = T1.purchase_ledger_id
-        LEFT JOIN
-        supplier_manage T2 ON T1.supplier_id = T2.id
-        LEFT JOIN
-        sys_user T3 ON T3.user_id = T1.registrant_id
-        left join ticket_registration t5 on t5.purchase_ledger_id = T1.purchase_ledger_id
+        LEFT JOIN supplier_manage T2 ON T1.supplier_id = T2.id
+        LEFT JOIN sys_user T3 ON T3.user_id = T1.registrant_id
+        left join ticket_registration t5 on t5.id = T1.ticket_registration_id
         <where>
             <if test="params.searchText != null and params.searchText != '' ">
                 AND T2.supplier_name LIKE CONCAT('%',#{params.searchText},'%')
diff --git a/src/main/resources/mapper/purchase/ProductRecordMapper.xml b/src/main/resources/mapper/purchase/ProductRecordMapper.xml
index 5c338d7..aa850cb 100644
--- a/src/main/resources/mapper/purchase/ProductRecordMapper.xml
+++ b/src/main/resources/mapper/purchase/ProductRecordMapper.xml
@@ -28,16 +28,16 @@
         left join product_model pm on pm.id = pr.product_model_id
         WHERE type = 2
         <if test="c.salesContractNo != null and c.salesContractNo != ''">
-            and sl.sales_contract_no = #{c.salesContractNo}
+            and sl.sales_contract_no like concat('%',#{c.salesContractNo},'%')
         </if>
         <if test="c.supplierName != null and c.supplierName != ''">
-            and pl.supplier_name = #{c.supplierName}
+            and pl.supplier_name like concat('%',#{c.supplierName},'%')
         </if>
         <if test="c.createdAtStart != null and c.createdAtStart != ''">
-            and pr.created_at &gt;= date_format(#{c.createdAtStart},'%Y-%m-%d hh:mm:ss')
+            and pr.created_at &gt;= str_to_date(#{c.createdAtStart}, '%Y-%m-%d')
         </if>
         <if test="c.createdAtEnd != null and c.createdAtEnd != ''">
-            and pr.created_at &lt;= date_format(#{c.createdAtEnd},'%Y-%m-%d hh:mm:ss')
+            and pr.created_at &lt; date_add(str_to_date(#{c.createdAtEnd}, '%Y-%m-%d'), interval 1 day)
         </if>
         <if test="c.purchaseContractNumber != null and c.purchaseContractNumber != ''">
             and tr.purchase_contract_number like concat('%',#{c.purchaseContractNumber},'%')
@@ -60,7 +60,12 @@
                  left join sales_ledger sl on sl.id = pl.sales_ledger_id
                  left join ticket_registration tr on tr.id = pr.ticket_registration_id
                  left join product_model pm on pm.id = pr.product_model_id
-
-        WHERE type = 2 and pr.id = #{id}
+        WHERE type = 2
+        <if test="c.purchaseLedgerId != null and c.purchaseLedgerId != ''">
+            and pr.purchase_ledger_id = #{c.purchaseLedgerId}
+        </if>
+        <if test="c.productModelId != null and c.productModelId != ''">
+            and pm.id = #{c.productModelId}
+        </if>
     </select>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml b/src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml
index bc6c38a..9eaf966 100644
--- a/src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml
+++ b/src/main/resources/mapper/purchase/PurchaseLedgerMapper.xml
@@ -14,20 +14,32 @@
         pl.id,
         pl.purchase_contract_number ,
         pl.sales_contract_no,
+        pl.supplier_id,
         pl.supplier_name,
         pl.project_name,
         pl.contract_amount,
-        sum(pr.tickets_amount)as receipt_payment_amount,
-        pl.contract_amount-sum(pr.tickets_amount) AS unReceipt_payment_amount,
+        sum(tr.invoice_amount)as receipt_payment_amount,
+        pl.contract_amount-sum(tr.invoice_amount) AS unReceipt_payment_amount,
         pl.entry_date,
+        pl.recorder_id,
         pl.recorder_name,
+        pl.template_name,
+        pl.approver_id,
+        sm.is_white,
+        pl.approval_status,
         pl.payment_method
         from purchase_ledger pl
+        left join sales_ledger_product slp on slp.sales_ledger_id = pl.id and slp.type=2
         left join product_record pr on pl.id = pr.purchase_ledger_id
+        left join ticket_registration tr on tr.id = pr.ticket_registration_id
+        left join supplier_manage sm on pl.supplier_id = sm.id
         <where>
             1 = 1
             <if test="c.purchaseContractNumber != null and c.purchaseContractNumber != ''">
                and pl.purchase_contract_number like concat('%',#{c.purchaseContractNumber},'%')
+            </if>
+            <if test="c.approvalStatus != null and c.approvalStatus != ''">
+                and pl.approval_status = #{c.approvalStatus}
             </if>
             <if test="c.supplierName != null and c.supplierName != ''">
                 and pl.supplier_name like concat('%',#{c.supplierName},'%')
@@ -49,6 +61,7 @@
         pl.project_name,pl.entry_date,
         pl.recorder_name,
         pl.contract_amount
+        order by pl.entry_date desc
 
     </select>
     <select id="getPaymentRegistrationDtoById" resultType="com.ruoyi.purchase.dto.PaymentRegistrationDto">
diff --git a/src/main/resources/mapper/quality/QualityInspectMapper.xml b/src/main/resources/mapper/quality/QualityInspectMapper.xml
index 1c75087..4e8a057 100644
--- a/src/main/resources/mapper/quality/QualityInspectMapper.xml
+++ b/src/main/resources/mapper/quality/QualityInspectMapper.xml
@@ -8,16 +8,16 @@
         where
         inspect_type=#{qualityInspect.inspectType}
         <if test="qualityInspect.supplier != null and qualityInspect.supplier != '' ">
-            AND supplier = #{qualityInspect.supplier}
+            AND supplier like concat('%',#{qualityInspect.supplier},'%')
         </if>
         <if test="qualityInspect.customer != null and qualityInspect.customer != '' ">
-            AND customer = #{qualityInspect.customer}
+            AND customer like concat('%',#{qualityInspect.customer},'%')
         </if>
         <if test="qualityInspect.process != null and qualityInspect.process != '' ">
-            AND process = #{qualityInspect.process}
+            AND process like concat('%',#{qualityInspect.process},'%')
         </if>
         <if test="qualityInspect.productName != null and qualityInspect.productName != '' ">
-            AND product_name = #{qualityInspect.productName}
+            AND product_name like concat('%',#{qualityInspect.productName},'%')
         </if>
         <if test="qualityInspect.entryDateStart != null and qualityInspect.entryDateStart != '' ">
             AND check_time &gt;= DATE_FORMAT(#{qualityInspect.entryDateStart},'%Y-%m-%d')
@@ -25,6 +25,7 @@
         <if test="qualityInspect.entryDateEnd != null and qualityInspect.entryDateEnd != '' ">
             AND  check_time &lt;= DATE_FORMAT(#{qualityInspect.entryDateEnd},'%Y-%m-%d')
         </if>
+        ORDER BY check_time DESC
     </select>
     <select id="qualityInspectExport" resultType="com.ruoyi.quality.pojo.QualityInspect">
         SELECT
@@ -45,4 +46,13 @@
             AND product_name = #{qualityInspect.productName}
         </if>
     </select>
+
+    <delete id="deleteByProductMainIds">
+        DELETE FROM quality_inspect
+        WHERE product_main_id IN
+        <foreach collection="productMainIds" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+
 </mapper>
diff --git a/src/main/resources/mapper/sales/InvoiceRegistrationProductMapper.xml b/src/main/resources/mapper/sales/InvoiceRegistrationProductMapper.xml
index 1036d3b..62bb407 100644
--- a/src/main/resources/mapper/sales/InvoiceRegistrationProductMapper.xml
+++ b/src/main/resources/mapper/sales/InvoiceRegistrationProductMapper.xml
@@ -110,10 +110,10 @@
                      )
             </if>
             <if test="invoiceRegistrationProductDto.invoiceDateStart != null and invoiceRegistrationProductDto.invoiceDateStart != ''">
-                AND T3.invoice_date &gt;= date_format(#{invoiceRegistrationProductDto.invoiceDateStart}, '%Y-%m-%d')
+                AND T3.invoice_date &gt;= str_to_date(#{invoiceRegistrationProductDto.invoiceDateStart}, '%Y-%m-%d')
             </if>
             <if test="invoiceRegistrationProductDto.invoiceDateEnd != null and invoiceRegistrationProductDto.invoiceDateEnd != ''">
-                AND T3.invoice_date &lt;= date_format(#{invoiceRegistrationProductDto.invoiceDateEnd}, '%Y-%m-%d')
+                AND T3.invoice_date &lt; date_add(str_to_date(#{invoiceRegistrationProductDto.invoiceDateEnd}, '%Y-%m-%d'), interval 1 day)
             </if>
             <if test="invoiceRegistrationProductDto.createTimeStart != null ">
                 AND T1.create_time like CONCAT(#{invoiceRegistrationProductDto.createTimeStart}, '%')
diff --git a/src/main/resources/mapper/sales/ReceiptPaymentMapper.xml b/src/main/resources/mapper/sales/ReceiptPaymentMapper.xml
index a52038b..cf9d93e 100644
--- a/src/main/resources/mapper/sales/ReceiptPaymentMapper.xml
+++ b/src/main/resources/mapper/sales/ReceiptPaymentMapper.xml
@@ -61,38 +61,42 @@
 
     <select id="bindInvoiceNoRegPage" resultType="com.ruoyi.sales.dto.ReceiptPaymentDto">
         SELECT
-        T1.id ,
-        T1.invoice_no ,
-        T1.invoice_total ,
+        T1.id,
+        T1.invoice_no,
+        T1.invoice_total,
         T3.project_name,
-        T1.invoice_person ,
-        T1.invoice_date ,
-        T1.create_time ,
-        T1.create_user ,
-        T1.update_time ,
-        T1.update_user ,
-        T1.tenant_id ,
+        T1.invoice_person,
+        T1.invoice_date,
+        T1.create_time,
+        T1.create_user,
+        T1.update_time,
+        T1.update_user,
+        T1.tenant_id,
         T2.tax_rate,
         T3.sales_contract_no,
         T3.customer_contract_no,
         T3.customer_name,
         T4.invoiceFileName,
         T5.product_category,
-        IFNULL(T6.receipt_payment_amount_total ,0) AS receipt_payment_amount_total,
-        (T1.invoice_total - IFNULL(T6.receipt_payment_amount_total ,0)) AS no_receipt_amount
+        IFNULL(T6.receipt_payment_amount_total, 0) AS receipt_payment_amount_total,
+        (T1.invoice_total - IFNULL(T6.receipt_payment_amount_total, 0)) AS noReceiptAmount
         FROM invoice_ledger T1
         LEFT JOIN invoice_registration_product T2 ON T2.id = T1.invoice_registration_product_id
         LEFT JOIN sales_ledger T3 ON T3.id = T2.sales_ledger_id
         LEFT JOIN (
         SELECT
         invoice_ledger_id,
-        GROUP_CONCAT( name ORDER BY id ASC SEPARATOR ' | ') AS invoiceFileName
-        FROM invoice_ledger_file GROUP BY invoice_ledger_id
+        GROUP_CONCAT(name ORDER BY id ASC SEPARATOR ' | ') AS invoiceFileName
+        FROM invoice_ledger_file
+        GROUP BY invoice_ledger_id
         ) T4 ON T4.invoice_ledger_id = T1.id
         LEFT JOIN sales_ledger_product T5 ON T2.sales_ledger_product_id = T5.id
         LEFT JOIN (
-        SELECT SUM(receipt_payment_amount) AS receipt_payment_amount_total,invoice_ledger_id FROM receipt_payment GROUP
-        BY invoice_ledger_id
+        SELECT
+        SUM(receipt_payment_amount) AS receipt_payment_amount_total,
+        invoice_ledger_id
+        FROM receipt_payment
+        GROUP BY invoice_ledger_id
         ) T6 ON T1.id = T6.invoice_ledger_id
         <where>
             <if test="req.customerName != null and req.customerName !=''">
@@ -111,10 +115,15 @@
                 AND T1.invoice_date &gt;= DATE_FORMAT(#{req.invoiceDateStart},'%Y-%m-%d')
             </if>
             <if test="req.invoiceDateEnd != null and req.invoiceDateEnd != '' ">
-                AND  T1.invoice_date &lt;= DATE_FORMAT(#{req.invoiceDateEnd},'%Y-%m-%d')
+                AND T1.invoice_date &lt;= DATE_FORMAT(#{req.invoiceDateEnd},'%Y-%m-%d')
+            </if>
+            <if test="req.status != null and req.status">
+                and (T1.invoice_total - IFNULL(T6.receipt_payment_amount_total, 0)) &gt; 0
             </if>
         </where>
-        ORDER BY T2.create_time DESC
+
+        ORDER BY IFNULL(T2.create_time, T1.create_time) DESC
+
     </select>
 
     <select id="invoiceInfo" resultType="com.ruoyi.sales.dto.InvoiceLedgerDto">
diff --git a/src/main/resources/mapper/sales/SalesLedgerMapper.xml b/src/main/resources/mapper/sales/SalesLedgerMapper.xml
index 7ce76a8..5d83bb1 100644
--- a/src/main/resources/mapper/sales/SalesLedgerMapper.xml
+++ b/src/main/resources/mapper/sales/SalesLedgerMapper.xml
@@ -82,5 +82,6 @@
                 AND  T1.entry_date &lt;= DATE_FORMAT(#{salesLedgerDto.entryDateEnd},'%Y-%m-%d')
             </if>
         </where>
+    order by T1.entry_date desc
     </select>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
new file mode 100644
index 0000000..395ce1b
--- /dev/null
+++ b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.sales.mapper.SalesLedgerProductMapper">
+
+    <select id="selectSalesLedgerProductList" resultType="com.ruoyi.sales.pojo.SalesLedgerProduct">
+        SELECT
+        T1.*,
+        t3.shipping_car_number,
+        t3.shipping_date
+        FROM
+        sales_ledger_product T1
+        left join shipping_info t3 on T1.id = t3.sales_ledger_product_id
+        <where>
+            1=1
+            <if test="salesLedgerProduct.salesLedgerId != null and salesLedgerProduct.salesLedgerId != '' ">
+                AND  T1.sales_ledger_id = #{salesLedgerProduct.salesLedgerId}
+            </if>
+            <if test="salesLedgerProduct.type != null and salesLedgerProduct.type != '' ">
+                AND  T1.type = #{salesLedgerProduct.type}
+            </if>
+        </where>
+    </select>
+    <select id="selectSalesLedgerProductByMainId" resultType="com.ruoyi.sales.pojo.SalesLedgerProduct">
+        select slp.*
+        from quality_inspect qi
+                 left join production_product_main ppm on qi.product_main_id = ppm.id
+                 left join product_work_order pwo on ppm.work_order_id = pwo.id
+                 left join product_order  po on pwo.product_order_id = po.id
+                 left join sales_ledger_product slp on po.product_model_id = slp.id
+        where qi.product_main_id = #{productMainId}
+
+
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/sales/ShipmentApprovalMapper.xml b/src/main/resources/mapper/sales/ShipmentApprovalMapper.xml
new file mode 100644
index 0000000..8b9792e
--- /dev/null
+++ b/src/main/resources/mapper/sales/ShipmentApprovalMapper.xml
@@ -0,0 +1,24 @@
+<?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.sales.mapper.ShipmentApprovalMapper">
+
+    <select id="listPage" resultType="com.ruoyi.sales.pojo.ShipmentApproval">
+        SELECT *,
+        si.shipping_car_number,
+        T2.nick_name AS entry_person_name
+        FROM shipment_approval sa
+                 LEFT JOIN shipping_info si ON sa.shipping_info_id = si.id
+                 LEFT JOIN sales_ledger sl ON sa.sales_ledger_id = sl.id
+                 LEFT JOIN sales_ledger_product slp ON sa.sales_ledger_product_id = slp.id
+                 LEFT JOIN sys_user T2 ON sl.entry_person = T2.user_id
+        <where>
+            1=1
+            <if test="req.approveStatus != null and req.approveStatus != '' ">
+                AND  sa.approve_status = #{req.approveStatus}
+            </if>
+            <if test="req.salesContractNo != null and req.salesContractNo != '' ">
+                AND  sl.sales_contract_no LIKE CONCAT('%',#{req.salesContractNo},'%')
+            </if>
+        </where>
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/staff/StaffSchedulingMapper.xml b/src/main/resources/mapper/staff/StaffSchedulingMapper.xml
index 1a32ef1..5bc5e4a 100644
--- a/src/main/resources/mapper/staff/StaffSchedulingMapper.xml
+++ b/src/main/resources/mapper/staff/StaffSchedulingMapper.xml
@@ -6,7 +6,7 @@
 
     <resultMap id="BaseResultMap" type="com.ruoyi.staff.pojo.StaffScheduling">
             <id property="id" column="id" jdbcType="INTEGER"/>
-            <result property="staffId" column="staff_id" jdbcType="INTEGER"/>
+            <result property="staffId" column="staff_id" jdbcType="VARCHAR"/>
             <result property="department" column="department" jdbcType="INTEGER"/>
             <result property="shiftType" column="shift_type" jdbcType="INTEGER"/>
             <result property="workDate" column="work_date" jdbcType="DATE"/>
@@ -31,12 +31,11 @@
     </sql>
     <select id="listPage" resultType="com.ruoyi.staff.dto.StaffSchedulingDto">
         SELECT
-        t1.*,t2.staff_name as 'staff_name' ,t2.staff_no as 'staff_no'
+        t1.*
         FROM staff_scheduling t1
-        left join staff_join_leave_record t2 on t1.staff_id = t2.id
         where 1=1
         <if test="vo.staffName != null and vo.staffName != '' ">
-            AND t2.staff_name LIKE CONCAT('%', #{vo.staffName}, '%')
+            AND t1.staff_name LIKE CONCAT('%', #{vo.staffName}, '%')
         </if>
         <if test="vo.shiftType != null and vo.shiftType != '' ">
             AND t1.shift_type = #{vo.shiftType}
diff --git a/src/main/resources/mapper/system/SysUserDeptMapper.xml b/src/main/resources/mapper/system/SysUserDeptMapper.xml
index bcf7b01..7caa57e 100644
--- a/src/main/resources/mapper/system/SysUserDeptMapper.xml
+++ b/src/main/resources/mapper/system/SysUserDeptMapper.xml
@@ -13,7 +13,7 @@
             sys_user_dept T1
         LEFT JOIN sys_dept T2 ON T1.dept_id = T2.dept_id
         <where>
-            T1.dept_id IN (select dept_id from sys_dept where parent_id = 100)
+            T1.dept_id IN (select dept_id from sys_dept where parent_id != 0)
             <if test="userDeptVo.userId != null">
                 AND T1.user_id = #{userDeptVo.userId}
             </if>
diff --git a/src/main/resources/mapper/system/SysUserMapper.xml b/src/main/resources/mapper/system/SysUserMapper.xml
index 4109530..2c91ae2 100644
--- a/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/src/main/resources/mapper/system/SysUserMapper.xml
@@ -180,6 +180,12 @@
 			#{id}
 		</foreach>
 	</select>
+	<select id="selectUserByNickName" resultType="com.ruoyi.project.system.domain.SysUser"
+			parameterType="java.lang.String">
+		<include refid="selectUserVo"/>
+		where u.nick_name = #{nickName} and u.del_flag = '0'
+		limit 1
+	</select>
 
 	<insert id="insertUser" parameterType="com.ruoyi.project.system.domain.SysUser" useGeneratedKeys="true" keyProperty="userId">
  		insert into sys_user(
diff --git "a/src/main/resources/static/\345\212\263\345\212\250\345\220\210\345\220\214\344\271\246.xml" "b/src/main/resources/static/\345\212\263\345\212\250\345\220\210\345\220\214\344\271\246.xml"
new file mode 100644
index 0000000..a24858d
--- /dev/null
+++ "b/src/main/resources/static/\345\212\263\345\212\250\345\220\210\345\220\214\344\271\246.xml"
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<?mso-application progid="Word.Document"?>
+<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core"  xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" w:macrosPresent="no" w:embeddedObjPresent="no" w:ocxPresent="no" xml:space="preserve" xmlns:wpsCustomData="http://www.wps.cn/officeDocument/2013/wpsCustomData"><o:DocumentProperties><o:Title>绀鸿寖鏂囨湰</o:Title><o:Author>鐣寗鑺卞洯</o:Author><o:LastAuthor>娓呰緸</o:LastAuthor><o:Revision>2</o:Revision><o:LastPrinted>2024-12-23T10:36:34Z</o:LastPrinted><o:Created>2023-03-23T04:01:00Z</o:Created><o:LastSaved>2025-11-07T06:33:56Z</o:LastSaved><o:TotalTime>15840</o:TotalTime><o:Pages>10</o:Pages><o:Words>2904</o:Words><o:Characters>3444</o:Characters><o:Company>鐣寗鑺卞洯</o:Company><o:Lines>30</o:Lines><o:Paragraphs>8</o:Paragraphs><o:CharactersWithSpaces>4368</o:CharactersWithSpaces><o:Version>14</o:Version></o:DocumentProperties><o:CustomDocumentProperties><o:KSOProductBuildVer dt:dt="string">2052-12.1.0.23125</o:KSOProductBuildVer><o:ICV dt:dt="string">2D97A42FF446489287C6900713CFD441_13</o:ICV><o:KSOTemplateDocerSaveRecord dt:dt="string">eyJoZGlkIjoiZTU3YWIwYTMwZDJkM2QzZDNhMDgzMDIyZjE1NjgxZmYiLCJ1c2VySWQiOiIxMTMzMDExODUxIn0=</o:KSOTemplateDocerSaveRecord></o:CustomDocumentProperties><w:fonts><w:defaultFonts w:ascii="Times New Roman" w:fareast="瀹嬩綋" w:h-ansi="Times New Roman" w:cs="Times New Roman"/><w:font w:name="Times New Roman"><w:panose-1 w:val="02020603050405020304"/><w:charset w:val="00"/><w:family w:val="Auto"/><w:pitch w:val="Default"/><w:sig w:usb-0="E0002EFF" w:usb-1="C000785B" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="400001FF" w:csb-1="FFFF0000"/></w:font><w:font w:name="瀹嬩綋"><w:panose-1 w:val="02010600030101010101"/><w:charset w:val="86"/><w:family w:val="Auto"/><w:pitch w:val="Default"/><w:sig w:usb-0="00000203" w:usb-1="288F0000" w:usb-2="00000006" w:usb-3="00000000" w:csb-0="00040001" w:csb-1="00000000"/></w:font><w:font w:name="Wingdings"><w:panose-1 w:val="05000000000000000000"/><w:charset w:val="02"/><w:family w:val="Auto"/><w:pitch w:val="Default"/><w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="80000000" w:csb-1="00000000"/></w:font><w:font w:name="Arial"><w:panose-1 w:val="020B0604020202020204"/><w:charset w:val="01"/><w:family w:val="SWiss"/><w:pitch w:val="Default"/><w:sig w:usb-0="E0002EFF" w:usb-1="C000785B" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="400001FF" w:csb-1="FFFF0000"/></w:font><w:font w:name="榛戜綋"><w:panose-1 w:val="02010609060101010101"/><w:charset w:val="86"/><w:family w:val="Auto"/><w:pitch w:val="Default"/><w:sig w:usb-0="800002BF" w:usb-1="38CF7CFA" w:usb-2="00000016" w:usb-3="00000000" w:csb-0="00040001" w:csb-1="00000000"/></w:font><w:font w:name="Courier New"><w:panose-1 w:val="02070309020205020404"/><w:charset w:val="01"/><w:family w:val="Modern"/><w:pitch w:val="Default"/><w:sig w:usb-0="E0002EFF" w:usb-1="C0007843" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="400001FF" w:csb-1="FFFF0000"/></w:font><w:font w:name="Symbol"><w:panose-1 w:val="05050102010706020507"/><w:charset w:val="02"/><w:family w:val="Roman"/><w:pitch w:val="Default"/><w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="80000000" w:csb-1="00000000"/></w:font><w:font w:name="Calibri"><w:panose-1 w:val="020F0502020204030204"/><w:charset w:val="00"/><w:family w:val="SWiss"/><w:pitch w:val="Default"/><w:sig w:usb-0="E4002EFF" w:usb-1="C000247B" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="200001FF" w:csb-1="00000000"/></w:font><w:font w:name="浠垮畫"><w:panose-1 w:val="02010609060101010101"/><w:charset w:val="86"/><w:family w:val="Modern"/><w:pitch w:val="Default"/><w:sig w:usb-0="800002BF" w:usb-1="38CF7CFA" w:usb-2="00000016" w:usb-3="00000000" w:csb-0="00040001" w:csb-1="00000000"/></w:font><w:font w:name="寰蒋闆呴粦"><w:panose-1 w:val="020B0503020204020204"/><w:charset w:val="86"/><w:family w:val="Auto"/><w:pitch w:val="Default"/><w:sig w:usb-0="80000287" w:usb-1="2ACF3C50" w:usb-2="00000016" w:usb-3="00000000" w:csb-0="0004001F" w:csb-1="00000000"/></w:font><w:font w:name="Tahoma"><w:panose-1 w:val="020B0604030504040204"/><w:charset w:val="00"/><w:family w:val="Auto"/><w:pitch w:val="Default"/><w:sig w:usb-0="E1002EFF" w:usb-1="C000605B" w:usb-2="00000029" w:usb-3="00000000" w:csb-0="200101FF" w:csb-1="20280000"/></w:font></w:fonts><w:lists><w:listDef w:listDefId="0"><w:plt w:val="SingleLevel"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:nfc w:val="3"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1銆�"/><w:lvlJc w:val="left"/></w:lvl></w:listDef><w:listDef w:listDefId="1"><w:plt w:val="SingleLevel"/><w:lvl w:ilvl="0"><w:start w:val="1"/><w:suff w:val="Nothing"/><w:lvlText w:val="%1銆�"/><w:lvlJc w:val="left"/><w:pPr><w:ind w:left="700" w:first-line="0"/></w:pPr></w:lvl></w:listDef><w:list w:ilfo="1"><w:ilst w:val="0"/></w:list><w:list w:ilfo="2"><w:ilst w:val="1"/></w:list></w:lists><w:styles><w:latentStyles w:defLockedState="off" w:latentStyleCount="260"><w:lsdException w:name="Normal"/><w:lsdException w:name="heading 1"/><w:lsdException w:name="heading 2"/><w:lsdException w:name="heading 3"/><w:lsdException w:name="heading 4"/><w:lsdException w:name="heading 5"/><w:lsdException w:name="heading 6"/><w:lsdException w:name="heading 7"/><w:lsdException w:name="heading 8"/><w:lsdException w:name="heading 9"/><w:lsdException w:name="index 1"/><w:lsdException w:name="index 2"/><w:lsdException w:name="index 3"/><w:lsdException w:name="index 4"/><w:lsdException w:name="index 5"/><w:lsdException w:name="index 6"/><w:lsdException w:name="index 7"/><w:lsdException w:name="index 8"/><w:lsdException w:name="index 9"/><w:lsdException w:name="toc 1"/><w:lsdException w:name="toc 2"/><w:lsdException w:name="toc 3"/><w:lsdException w:name="toc 4"/><w:lsdException w:name="toc 5"/><w:lsdException w:name="toc 6"/><w:lsdException w:name="toc 7"/><w:lsdException w:name="toc 8"/><w:lsdException w:name="toc 9"/><w:lsdException w:name="Normal Indent"/><w:lsdException w:name="footnote text"/><w:lsdException w:name="annotation text"/><w:lsdException w:name="header"/><w:lsdException w:name="footer"/><w:lsdException w:name="index heading"/><w:lsdException w:name="caption"/><w:lsdException w:name="table of figures"/><w:lsdException w:name="envelope address"/><w:lsdException w:name="envelope return"/><w:lsdException w:name="footnote reference"/><w:lsdException w:name="annotation reference"/><w:lsdException w:name="line number"/><w:lsdException w:name="page number"/><w:lsdException w:name="endnote reference"/><w:lsdException w:name="endnote text"/><w:lsdException w:name="table of authorities"/><w:lsdException w:name="macro"/><w:lsdException w:name="toa heading"/><w:lsdException w:name="List"/><w:lsdException w:name="List Bullet"/><w:lsdException w:name="List Number"/><w:lsdException w:name="List 2"/><w:lsdException w:name="List 3"/><w:lsdException w:name="List 4"/><w:lsdException w:name="List 5"/><w:lsdException w:name="List Bullet 2"/><w:lsdException w:name="List Bullet 3"/><w:lsdException w:name="List Bullet 4"/><w:lsdException w:name="List Bullet 5"/><w:lsdException w:name="List Number 2"/><w:lsdException w:name="List Number 3"/><w:lsdException w:name="List Number 4"/><w:lsdException w:name="List Number 5"/><w:lsdException w:name="Title"/><w:lsdException w:name="Closing"/><w:lsdException w:name="Signature"/><w:lsdException w:name="Default Paragraph Font"/><w:lsdException w:name="Body Text"/><w:lsdException w:name="Body Text Indent"/><w:lsdException w:name="List Continue"/><w:lsdException w:name="List Continue 2"/><w:lsdException w:name="List Continue 3"/><w:lsdException w:name="List Continue 4"/><w:lsdException w:name="List Continue 5"/><w:lsdException w:name="Message Header"/><w:lsdException w:name="Subtitle"/><w:lsdException w:name="Salutation"/><w:lsdException w:name="Date"/><w:lsdException w:name="Body Text First Indent"/><w:lsdException w:name="Body Text First Indent 2"/><w:lsdException w:name="Note Heading"/><w:lsdException w:name="Body Text 2"/><w:lsdException w:name="Body Text 3"/><w:lsdException w:name="Body Text Indent 2"/><w:lsdException w:name="Body Text Indent 3"/><w:lsdException w:name="Block Text"/><w:lsdException w:name="Hyperlink"/><w:lsdException w:name="FollowedHyperlink"/><w:lsdException w:name="Strong"/><w:lsdException w:name="Emphasis"/><w:lsdException w:name="Document Map"/><w:lsdException w:name="Plain Text"/><w:lsdException w:name="E-mail Signature"/><w:lsdException w:name="Normal (Web)"/><w:lsdException w:name="HTML Acronym"/><w:lsdException w:name="HTML Address"/><w:lsdException w:name="HTML Cite"/><w:lsdException w:name="HTML Code"/><w:lsdException w:name="HTML Definition"/><w:lsdException w:name="HTML Keyboard"/><w:lsdException w:name="HTML Preformatted"/><w:lsdException w:name="HTML Sample"/><w:lsdException w:name="HTML Typewriter"/><w:lsdException w:name="HTML Variable"/><w:lsdException w:name="Normal Table"/><w:lsdException w:name="annotation subject"/><w:lsdException w:name="Table Simple 1"/><w:lsdException w:name="Table Simple 2"/><w:lsdException w:name="Table Simple 3"/><w:lsdException w:name="Table Classic 1"/><w:lsdException w:name="Table Classic 2"/><w:lsdException w:name="Table Classic 3"/><w:lsdException w:name="Table Classic 4"/><w:lsdException w:name="Table Colorful 1"/><w:lsdException w:name="Table Colorful 2"/><w:lsdException w:name="Table Colorful 3"/><w:lsdException w:name="Table Columns 1"/><w:lsdException w:name="Table Columns 2"/><w:lsdException w:name="Table Columns 3"/><w:lsdException w:name="Table Columns 4"/><w:lsdException w:name="Table Columns 5"/><w:lsdException w:name="Table Grid 1"/><w:lsdException w:name="Table Grid 2"/><w:lsdException w:name="Table Grid 3"/><w:lsdException w:name="Table Grid 4"/><w:lsdException w:name="Table Grid 5"/><w:lsdException w:name="Table Grid 6"/><w:lsdException w:name="Table Grid 7"/><w:lsdException w:name="Table Grid 8"/><w:lsdException w:name="Table List 1"/><w:lsdException w:name="Table List 2"/><w:lsdException w:name="Table List 3"/><w:lsdException w:name="Table List 4"/><w:lsdException w:name="Table List 5"/><w:lsdException w:name="Table List 6"/><w:lsdException w:name="Table List 7"/><w:lsdException w:name="Table List 8"/><w:lsdException w:name="Table 3D effects 1"/><w:lsdException w:name="Table 3D effects 2"/><w:lsdException w:name="Table 3D effects 3"/><w:lsdException w:name="Table Contemporary"/><w:lsdException w:name="Table Elegant"/><w:lsdException w:name="Table Professional"/><w:lsdException w:name="Table Subtle 1"/><w:lsdException w:name="Table Subtle 2"/><w:lsdException w:name="Table Web 1"/><w:lsdException w:name="Table Web 2"/><w:lsdException w:name="Table Web 3"/><w:lsdException w:name="Balloon Text"/><w:lsdException w:name="Table Grid"/><w:lsdException w:name="Table Theme"/><w:lsdException w:name="Light Shading"/><w:lsdException w:name="Light List"/><w:lsdException w:name="Light Grid"/><w:lsdException w:name="Medium Shading 1"/><w:lsdException w:name="Medium Shading 2"/><w:lsdException w:name="Medium List 1"/><w:lsdException w:name="Medium List 2"/><w:lsdException w:name="Medium Grid 1"/><w:lsdException w:name="Medium Grid 2"/><w:lsdException w:name="Medium Grid 3"/><w:lsdException w:name="Dark List"/><w:lsdException w:name="Colorful Shading"/><w:lsdException w:name="Colorful List"/><w:lsdException w:name="Colorful Grid"/><w:lsdException w:name="Light Shading Accent 1"/><w:lsdException w:name="Light List Accent 1"/><w:lsdException w:name="Light Grid Accent 1"/><w:lsdException w:name="Medium Shading 1 Accent 1"/><w:lsdException w:name="Medium Shading 2 Accent 1"/><w:lsdException w:name="Medium List 1 Accent 1"/><w:lsdException w:name="Medium List 2 Accent 1"/><w:lsdException w:name="Medium Grid 1 Accent 1"/><w:lsdException w:name="Medium Grid 2 Accent 1"/><w:lsdException w:name="Medium Grid 3 Accent 1"/><w:lsdException w:name="Dark List Accent 1"/><w:lsdException w:name="Colorful Shading Accent 1"/><w:lsdException w:name="Colorful List Accent 1"/><w:lsdException w:name="Colorful Grid Accent 1"/><w:lsdException w:name="Light Shading Accent 2"/><w:lsdException w:name="Light List Accent 2"/><w:lsdException w:name="Light Grid Accent 2"/><w:lsdException w:name="Medium Shading 1 Accent 2"/><w:lsdException w:name="Medium Shading 2 Accent 2"/><w:lsdException w:name="Medium List 1 Accent 2"/><w:lsdException w:name="Medium List 2 Accent 2"/><w:lsdException w:name="Medium Grid 1 Accent 2"/><w:lsdException w:name="Medium Grid 2 Accent 2"/><w:lsdException w:name="Medium Grid 3 Accent 2"/><w:lsdException w:name="Dark List Accent 2"/><w:lsdException w:name="Colorful Shading Accent 2"/><w:lsdException w:name="Colorful List Accent 2"/><w:lsdException w:name="Colorful Grid Accent 2"/><w:lsdException w:name="Light Shading Accent 3"/><w:lsdException w:name="Light List Accent 3"/><w:lsdException w:name="Light Grid Accent 3"/><w:lsdException w:name="Medium Shading 1 Accent 3"/><w:lsdException w:name="Medium Shading 2 Accent 3"/><w:lsdException w:name="Medium List 1 Accent 3"/><w:lsdException w:name="Medium List 2 Accent 3"/><w:lsdException w:name="Medium Grid 1 Accent 3"/><w:lsdException w:name="Medium Grid 2 Accent 3"/><w:lsdException w:name="Medium Grid 3 Accent 3"/><w:lsdException w:name="Dark List Accent 3"/><w:lsdException w:name="Colorful Shading Accent 3"/><w:lsdException w:name="Colorful List Accent 3"/><w:lsdException w:name="Colorful Grid Accent 3"/><w:lsdException w:name="Light Shading Accent 4"/><w:lsdException w:name="Light List Accent 4"/><w:lsdException w:name="Light Grid Accent 4"/><w:lsdException w:name="Medium Shading 1 Accent 4"/><w:lsdException w:name="Medium Shading 2 Accent 4"/><w:lsdException w:name="Medium List 1 Accent 4"/><w:lsdException w:name="Medium List 2 Accent 4"/><w:lsdException w:name="Medium Grid 1 Accent 4"/><w:lsdException w:name="Medium Grid 2 Accent 4"/><w:lsdException w:name="Medium Grid 3 Accent 4"/><w:lsdException w:name="Dark List Accent 4"/><w:lsdException w:name="Colorful Shading Accent 4"/><w:lsdException w:name="Colorful List Accent 4"/><w:lsdException w:name="Colorful Grid Accent 4"/><w:lsdException w:name="Light Shading Accent 5"/><w:lsdException w:name="Light List Accent 5"/><w:lsdException w:name="Light Grid Accent 5"/><w:lsdException w:name="Medium Shading 1 Accent 5"/><w:lsdException w:name="Medium Shading 2 Accent 5"/><w:lsdException w:name="Medium List 1 Accent 5"/><w:lsdException w:name="Medium List 2 Accent 5"/><w:lsdException w:name="Medium Grid 1 Accent 5"/><w:lsdException w:name="Medium Grid 2 Accent 5"/><w:lsdException w:name="Medium Grid 3 Accent 5"/><w:lsdException w:name="Dark List Accent 5"/><w:lsdException w:name="Colorful Shading Accent 5"/><w:lsdException w:name="Colorful List Accent 5"/><w:lsdException w:name="Colorful Grid Accent 5"/><w:lsdException w:name="Light Shading Accent 6"/><w:lsdException w:name="Light List Accent 6"/><w:lsdException w:name="Light Grid Accent 6"/><w:lsdException w:name="Medium Shading 1 Accent 6"/><w:lsdException w:name="Medium Shading 2 Accent 6"/><w:lsdException w:name="Medium List 1 Accent 6"/><w:lsdException w:name="Medium List 2 Accent 6"/><w:lsdException w:name="Medium Grid 1 Accent 6"/><w:lsdException w:name="Medium Grid 2 Accent 6"/><w:lsdException w:name="Medium Grid 3 Accent 6"/><w:lsdException w:name="Dark List Accent 6"/><w:lsdException w:name="Colorful Shading Accent 6"/><w:lsdException w:name="Colorful List Accent 6"/><w:lsdException w:name="Colorful Grid Accent 6"/></w:latentStyles><w:style w:type="paragraph" w:styleId="a1" w:default="on"><w:name w:val="Normal"/><w:pPr><w:widowControl w:val="off"/><w:jc w:val="both"/></w:pPr><w:rPr><w:kern w:val="2"/><w:sz w:val="21"/><w:sz-cs w:val="24"/><w:lang w:val="EN-US" w:fareast="ZH-CN" w:bidi="AR-SA"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="2"><w:name w:val="heading 1"/><w:basedOn w:val="a1"/><w:next w:val="a1"/><w:pPr><w:keepNext/><w:keepLines/><w:spacing w:before="340" w:before-lines="0" w:after="330" w:line="578" w:line-rule="auto"/><w:jc w:val="center"/><w:outlineLvl w:val="0"/></w:pPr><w:rPr><w:b/><w:b-cs/><w:spacing w:val="16"/><w:kern w:val="44"/><w:sz w:val="28"/><w:sz-cs w:val="44"/></w:rPr></w:style><w:style w:type="character" w:styleId="a6" w:default="on"><w:name w:val="Default Paragraph Font"/><w:semiHidden/></w:style><w:style w:type="table" w:styleId="a5" w:default="on"><w:name w:val="Normal Table"/><w:tblPr><w:tblCellMar><w:top w:w="0" w:type="dxa"/><w:left w:w="108" w:type="dxa"/><w:bottom w:w="0" w:type="dxa"/><w:right w:w="108" w:type="dxa"/></w:tblCellMar></w:tblPr></w:style><w:style w:type="paragraph" w:styleId="a3"><w:name w:val="footer"/><w:basedOn w:val="a1"/><w:pPr><w:tabs><w:tab w:val="center" w:pos="4153"/><w:tab w:val="right" w:pos="8306"/></w:tabs><w:snapToGrid w:val="off"/><w:jc w:val="left"/></w:pPr><w:rPr><w:sz w:val="18"/><w:sz-cs w:val="18"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="a4"><w:name w:val="header"/><w:basedOn w:val="a1"/><w:link w:val="a8"/><w:pPr><w:pBdr><w:bottom w:val="single" w:sz="6" wx:bdrwidth="15" w:space="1" w:color="auto"/></w:pBdr><w:tabs><w:tab w:val="center" w:pos="4153"/><w:tab w:val="right" w:pos="8306"/></w:tabs><w:snapToGrid w:val="off"/><w:jc w:val="center"/></w:pPr><w:rPr><w:sz w:val="18"/><w:sz-cs w:val="18"/></w:rPr></w:style><w:style w:type="character" w:styleId="a7"><w:name w:val="page number"/><w:basedOn w:val="a6"/><w:rPr/></w:style><w:style w:type="character" w:styleId="a8"><w:name w:val="椤电湁 Char"/><w:link w:val="a4"/><w:rPr><w:kern w:val="2"/><w:sz w:val="18"/><w:sz-cs w:val="18"/></w:rPr></w:style><w:style w:type="paragraph" w:styleId="a9"><w:name w:val="鏅�� (Web)"/><w:basedOn w:val="a1"/><w:pPr><w:widowControl/><w:spacing w:before="100" w:before-lines="0" w:before-autospacing="on" w:after="100" w:after-autospacing="on"/><w:jc w:val="left"/></w:pPr><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:hint="default"/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="24"/></w:rPr></w:style></w:styles><w:shapeDefaults><o:shapedefaults fill="t" stroke="t"><v:fill type="gradient" on="t" angle="90" focussize="0f,0f" focusposition="0f,0f"><o:fill type="gradientUnscaled" v:ext="backwardCompatible"/></v:fill><v:stroke weight="1.25pt" color="#739CC3"/></o:shapedefaults></w:shapeDefaults><w:bgPict><w:background/><v:background id="_x0000_s1025"><v:fill on="f" focussize="0,0"/></v:background></w:bgPict><w:docPr><w:view w:val="print"/><w:zoom w:percent="130"/><w:characterSpacingControl w:val="CompressPunctuation"/><w:documentProtection w:edit="comments" w:enforcement="off"/><w:doNotEmbedSystemFonts/><w:defaultTabStop w:val="420"/><w:drawingGridVerticalSpacing w:val="156"/><w:displayHorizontalDrawingGridEvery w:val="1"/><w:displayVerticalDrawingGridEvery w:val="1"/><w:compat><w:adjustLineHeightInTable/><w:ulTrailSpace/><w:doNotExpandShiftReturn/><w:balanceSingleByteDoubleByteWidth/><w:spaceForUL/><w:breakWrappedTables/><w:useFELayout/></w:compat></w:docPr><w:body><wx:sect><w:p><w:pPr><w:pStyle w:val="a9"/><w:tabs><w:tab w:val="center" w:pos="4153"/><w:tab w:val="right" w:pos="8306"/></w:tabs><w:spacing w:line="360" w:line-rule="auto"/><w:rPr><w:rFonts w:hint="fareast"/><w:spacing w:val="16"/></w:rPr></w:pPr><w:r><w:rPr><w:spacing w:val="16"/></w:rPr><w:tab/></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:tabs><w:tab w:val="center" w:pos="4153"/><w:tab w:val="right" w:pos="8306"/></w:tabs><w:spacing w:line="360" w:line-rule="auto"/><w:rPr><w:b/><w:spacing w:val="16"/></w:rPr></w:pPr><w:r><w:rPr><w:spacing w:val="16"/></w:rPr><w:tab/></w:r><w:r><w:rPr><w:rFonts w:hint="fareast"/><w:spacing w:val="16"/></w:rPr><w:t>                             </w:t></w:r><w:r><w:rPr><w:rFonts w:hint="fareast"/><w:spacing w:val="16"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>                 </w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:spacing w:line="360" w:line-rule="auto"/><w:jc w:val="center"/><w:rPr><w:rFonts w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="48"/><w:sz-cs w:val="48"/></w:rPr></w:pPr></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:spacing w:line="360" w:line-rule="auto"/><w:jc w:val="center"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs w:val="off"/><w:spacing w:val="16"/><w:sz w:val="84"/><w:sz-cs w:val="84"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs w:val="off"/><w:spacing w:val="16"/><w:sz w:val="84"/><w:sz-cs w:val="84"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs w:val="off"/><w:spacing w:val="16"/><w:sz w:val="84"/><w:sz-cs w:val="84"/></w:rPr><w:t>鍔� 鍔� 鍚� 鍚� 涔�</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:spacing w:line="360" w:line-rule="auto"/><w:jc w:val="center"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs w:val="off"/><w:spacing w:val="16"/><w:sz w:val="84"/><w:sz-cs w:val="84"/></w:rPr></w:pPr></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:spacing w:line="360" w:line-rule="auto"/><w:rPr><w:rFonts w:hint="fareast"/><w:b/><w:b-cs w:val="off"/><w:spacing w:val="16"/><w:sz w:val="32"/><w:sz-cs w:val="32"/></w:rPr></w:pPr></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:spacing w:line="360" w:line-rule="auto"/><w:ind w:first-line="3000"/><w:rPr><w:rFonts w:hint="fareast"/><w:b/><w:b-cs w:val="off"/><w:spacing w:val="16"/><w:sz w:val="32"/><w:sz-cs w:val="32"/></w:rPr></w:pPr></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:spacing w:line="360" w:line-rule="auto"/><w:ind w:first-line="3000"/><w:rPr><w:rFonts w:hint="fareast"/><w:b/><w:b-cs w:val="off"/><w:spacing w:val="16"/><w:sz w:val="32"/><w:sz-cs w:val="32"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint="fareast"/><w:b/><w:b-cs w:val="off"/><w:spacing w:val="16"/><w:sz w:val="32"/><w:sz-cs w:val="32"/></w:rPr><w:t>聽聽</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:spacing w:line="360" w:line-rule="auto"/><w:ind w:first-line="1060" w:first-line-chars="300"/><w:rPr><w:b/><w:b-cs w:val="off"/><w:spacing w:val="16"/><w:sz w:val="32"/><w:sz-cs w:val="32"/><w:u w:val="single"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint="fareast"/><w:b/><w:b-cs w:val="off"/><w:spacing w:val="16"/><w:sz w:val="32"/><w:sz-cs w:val="32"/></w:rPr><w:t>鐢�     鏂癸細</w:t></w:r><w:r><w:rPr><w:rFonts w:hint="fareast"/><w:b/><w:b-cs w:val="off"/><w:spacing w:val="16"/><w:sz w:val="32"/><w:sz-cs w:val="32"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>鍖楀悲甯傛捣宸濆紑蹇冮鍝佹湁闄愯矗浠诲叕鍙�</w:t></w:r><w:r><w:rPr><w:rFonts w:hint="fareast"/><w:b/><w:b-cs w:val="off"/><w:spacing w:val="16"/><w:sz w:val="32"/><w:sz-cs w:val="32"/><w:u w:val="single"/></w:rPr><w:t>                    </w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:spacing w:line="360" w:line-rule="auto"/><w:ind w:first-line="1060" w:first-line-chars="300"/><w:rPr><w:b/><w:b-cs w:val="off"/><w:spacing w:val="16"/><w:sz w:val="32"/><w:sz-cs w:val="32"/><w:u w:val="single"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint="fareast"/><w:b/><w:b-cs w:val="off"/><w:spacing w:val="16"/><w:sz w:val="32"/><w:sz-cs w:val="32"/></w:rPr><w:t>涔�     鏂癸細</w:t></w:r><w:r><w:rPr><w:rFonts w:hint="fareast"/><w:b/><w:b-cs w:val="off"/><w:spacing w:val="16"/><w:sz w:val="32"/><w:sz-cs w:val="32"/><w:u w:val="single"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.staffName}</w:t></w:r><w:r><w:rPr><w:rFonts w:hint="fareast"/><w:b/><w:b-cs w:val="off"/><w:spacing w:val="16"/><w:sz w:val="32"/><w:sz-cs w:val="32"/><w:u w:val="single"/></w:rPr><w:t>                          </w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:spacing w:line="360" w:line-rule="auto"/><w:jc w:val="center"/><w:rPr><w:b/><w:b-cs w:val="off"/><w:spacing w:val="16"/><w:sz w:val="32"/><w:sz-cs w:val="32"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint="fareast"/><w:b/><w:b-cs w:val="off"/><w:spacing w:val="16"/><w:sz w:val="32"/><w:sz-cs w:val="32"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:hint="fareast"/><w:b/><w:b-cs w:val="off"/><w:spacing w:val="16"/><w:sz w:val="32"/><w:sz-cs w:val="32"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>    </w:t></w:r><w:r><w:rPr><w:rFonts w:hint="fareast"/><w:b/><w:b-cs w:val="off"/><w:spacing w:val="16"/><w:sz w:val="32"/><w:sz-cs w:val="32"/></w:rPr><w:t>绛捐鏃ユ湡锛�</w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.qyear}</w:t></w:r><w:r><w:rPr><w:rFonts w:hint="fareast"/><w:b/><w:b-cs w:val="off"/><w:spacing w:val="16"/><w:sz w:val="32"/><w:sz-cs w:val="32"/></w:rPr><w:t>骞�</w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.qmoth}</w:t></w:r><w:r><w:rPr><w:rFonts w:hint="fareast"/><w:b/><w:b-cs w:val="off"/><w:spacing w:val="16"/><w:sz w:val="32"/><w:sz-cs w:val="32"/></w:rPr><w:t>鏈�</w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.qday}</w:t></w:r><w:r><w:rPr><w:rFonts w:hint="fareast"/><w:b/><w:b-cs w:val="off"/><w:spacing w:val="16"/><w:sz w:val="32"/><w:sz-cs w:val="32"/></w:rPr><w:t>鏃�</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:spacing w:line="360" w:line-rule="auto"/><w:jc w:val="center"/><w:rPr><w:rFonts w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="32"/><w:sz-cs w:val="32"/></w:rPr></w:pPr></w:p><w:p><w:pPr><w:widowControl/><w:adjustRightInd w:val="off"/><w:snapToGrid w:val="off"/><w:spacing w:line="400" w:line-rule="exact"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:color w:val="454545"/><w:kern w:val="0"/><w:sz w:val="32"/><w:sz-cs w:val="30"/></w:rPr></w:pPr></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:spacing w:line="440" w:line-rule="exact"/><w:rPr><w:rFonts w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:color w:val="454545"/><w:sz w:val="32"/><w:sz-cs w:val="30"/></w:rPr></w:pPr></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:line="560" w:line-rule="exact"/><w:ind w:first-line="624" w:first-line-chars="200"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏍规嵁銆婁腑鍗庝汉姘戝叡鍜屽浗鍔冲姩娉曘�嬨�併�婁腑鍗庝汉姘戝叡鍜屽浗鍔冲姩鍚堝悓娉曘�嬪強鏈夊叧娉曞緥銆佹硶瑙勮瀹�,鐢蹭箼鍙屾柟閬靛惊鍚堟硶銆佸叕骞炽��</w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>骞崇瓑鑷効銆�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鍗忓晢涓�鑷淬�佽瘹瀹炰俊鐢ㄥ師鍒欑璁㈡湰鍚堝悓,骞跺叡鍚岄伒瀹堛��</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="2"/><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:adjustRightInd/><w:snapToGrid/><w:spacing w:line="480" w:line-rule="exact"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>涓�銆佺敳鏂瑰熀鏈儏鍐�</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:adjustRightInd/><w:snapToGrid/><w:spacing w:line="480" w:line-rule="exact"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>    绗竴鏉� </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鐢叉柟锛�</w:t></w:r><w:r><w:rPr><w:rFonts w:hint="fareast"/><w:b/><w:b-cs w:val="off"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>鍖楀悲甯傛捣宸濆紑蹇冮鍝佹湁闄愯矗浠诲叕鍙�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>            </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t> </w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:adjustRightInd/><w:snapToGrid/><w:spacing w:line="480" w:line-rule="exact"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>娉曞畾浠h〃浜猴紙涓昏璐熻矗浜猴級鎴栧鎵樹唬鐞嗕汉锛�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>鏉庨懌</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>                          </w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:adjustRightInd/><w:snapToGrid/><w:spacing w:line="480" w:line-rule="exact"/><w:ind w:right="-475" w:first-line="2348" w:first-line-chars="750"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>浜屻�佷箼鏂瑰熀鏈儏鍐�</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:adjustRightInd/><w:snapToGrid/><w:spacing w:line="480" w:line-rule="exact"/><w:ind w:right="-475"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>    绗簩鏉� </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>涔欐柟锛�</w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.staffName}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鎬у埆锛�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.sex}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>   </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>骞撮緞锛�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.age}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>   </w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:adjustRightInd/><w:snapToGrid/><w:spacing w:line="480" w:line-rule="exact"/><w:ind w:right="-475"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>韬唤</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>璇�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鍙风爜锛�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.identityCard}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>                                     </w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:adjustRightInd/><w:snapToGrid/><w:spacing w:line="480" w:line-rule="exact"/><w:ind w:right="5"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>鎴风睄</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>浣忓潃:</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.nativePlace}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>          </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>               </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>              </w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:adjustRightInd/><w:snapToGrid/><w:spacing w:line="480" w:line-rule="exact"/><w:ind w:right="5"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="default"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="none"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>鐜颁綇鍧�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>锛� </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.adress}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>                                        </w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:adjustRightInd/><w:snapToGrid/><w:spacing w:line="480" w:line-rule="exact"/><w:ind w:right="5"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="none"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>鑱旂郴鐢佃瘽</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>锛� </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.phone}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>                                      </w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="2"/><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:line="520" w:line-rule="exact"/><w:ind w:first-line="2974" w:first-line-chars="950"/><w:jc w:val="both"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>涓夈�佸姵鍔ㄥ悎鍚屾湡闄�</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="62" w:after="62" w:line="520" w:line-rule="exact"/><w:ind w:first-line="614" w:first-line-chars="196"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>绗笁鏉�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t> 鐢蹭箼鍙屾柟绾﹀畾鎸変互涓�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.dateSelect}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>绉嶆柟寮忕‘瀹氣�滃姵鍔ㄥ悎鍚屾湡闄愨�濓細</w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t> </w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="62" w:after="62" w:line="520" w:line-rule="exact"/><w:ind w:first-line="611" w:first-line-chars="196"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>A銆�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏈夊浐瀹氭湡闄愶細鑷�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.syear}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>   </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>骞�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.smoth}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏈�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.sday}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏃ヨ捣鑷�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.eyear}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>骞�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.emoth}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏈�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.eday}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏃ユ銆傝瘯鐢ㄦ湡鑷�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.styear}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>   </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>骞�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.stmoth}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏈�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.stday}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏃ヨ捣鑷�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.seyear}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>   </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>骞�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.semoth}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>   </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏈�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.seday}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>   </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏃ユ銆�</w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>                </w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="62" w:after="62" w:line="520" w:line-rule="exact"/><w:ind w:first-line="611" w:first-line-chars="196"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>B銆�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏃犲浐瀹氭湡闄愶細鑷�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.bsyear}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>骞�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.bsmoth}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏈�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.bsday}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏃ヨ捣</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>鑷冲弻鏂硅В闄ゅ姵鍔ㄥ悎鍚屼箣鏃�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>銆傝瘯鐢ㄦ湡鑷�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.bstyear}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>骞�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.bstmoth}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏈�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.bstday}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏃ヨ捣鑷�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.bseyear}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>骞�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.bsemoth}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏈�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.bseday}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏃ユ銆�   </w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="62" w:after="62" w:line="520" w:line-rule="exact"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>    C銆佷互瀹屾垚涓�瀹氬伐浣滀换鍔′负鏈熼檺锛氳嚜</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.csyear}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>骞�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.csmoth}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏈�</w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>  ${item.csday} </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏃ヨ捣鐢熸晥锛岃嚦瀹屾垚宸ヤ綔浠诲姟涔嬫棩姝€��</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="2"/><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:line="520" w:line-rule="exact"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鍥涖�佸姵鍔ㄥ叧绯诲缓绔嬫椂闂淬�佸伐浣滃唴瀹瑰拰宸ヤ綔鍦扮偣</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="2"/><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:line="520" w:line-rule="exact"/><w:ind w:first-line="939" w:first-line-chars="300"/><w:jc w:val="both"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>绗洓鏉�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b w:val="off"/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t> 涔欐柟浠ュ疄闄呭埌宀椾箣鏃ヤ负鍚堝悓璧峰鏃堕棿寤虹珛鍔冲姩鍏崇郴銆�</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="2"/><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:line="520" w:line-rule="exact"/><w:ind w:first-line="624" w:first-line-chars="200"/><w:jc w:val="both"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b w:val="off"/><w:b-cs w:val="off"/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t> 绗簲鏉�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs w:val="off"/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t> 涔欐柟宸ヤ綔鍦扮偣涓�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs w:val="off"/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:fareast="ZH-CN"/></w:rPr><w:t>锛�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs w:val="off"/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鍖楀悲甯�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>188鍥㈠洟閮ㄦ捣宸濆紑蹇冮鍝佹湁闄愯矗浠诲叕鍙�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs w:val="off"/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/></w:rPr><w:t>銆�</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:jc w:val="left"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/></w:rPr><w:t>聽 聽 </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/></w:rPr><w:t>绗叚鏉�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/></w:rPr><w:t> 涔欐柟</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>宀椾綅锛�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>     ${item.postJob}                  </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/></w:rPr><w:t>銆�</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:ind w:first-line="630"/><w:jc w:val="left"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>绗竷鏉�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鍦ㄥ悎鍚屾湁鏁堟湡鍐咃紝</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>涔欐柟鍚屾剰鐢叉柟鏍规嵁鍏徃涓氬姟闇�瑕佹垨鑰呭叕鍙搁拡瀵逛箼鏂圭殑涓氱哗鑰冩牳銆佸畾鏈熻疆宀椼�佺珵鑱樹笂宀楃瓑鍘熷洜</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>锛岃皟鏁翠箼鏂圭殑宸ヤ綔宀椾綅銆佸伐浣滃唴瀹瑰拰宸ヤ綔鍦扮偣銆�</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:jc w:val="center"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>浜斻�佸伐浣滄椂闂村拰浼戞伅浼戝亣</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:ind w:first-line="645"/><w:jc w:val="left"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>绗叓鏉�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t> 鐢叉柟渚濇硶鍒跺畾鍛樺伐</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>宸ヤ綔鏃堕暱</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>銆佷紤鎭拰</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>璇�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>浼戝亣鍒跺害;涔欐柟椤婚伒瀹堢敳鏂逛緷娉曞埗瀹氱殑宸ユ椂銆佷紤鎭拰</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>璇�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>浼戝亣鍒跺害锛屽苟鎸夌収瑙勫畾涓婁笅鐝�備紤鍋囨湡闂村伐璧勭鍒╁緟閬囨寜鐓�</w:t></w:r><aml:annotation aml:id="0" w:type="Word.Bookmark.Start" w:name="_Hlk130463128"/><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鍏徃銆婂憳宸ユ墜鍐屻�嬬浉鍏宠瀹氭墽琛�</w:t></w:r><aml:annotation aml:id="0" w:type="Word.Bookmark.End"/><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>銆�        </w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:ind w:first-line="645"/><w:jc w:val="left"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/></w:rPr><w:t>绗節鏉�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/></w:rPr><w:t> 涔欐柟渚濇硶浜湁鐨勫涓у亣銆佸コ鑱屽伐浜�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>鎶�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/></w:rPr><w:t>鍋囩瓑锛屾寜鐓х敳鏂逛緷娉曞埗瀹氱殑鐩稿叧瑙勭珷鍒跺害鎵ц銆傚涓у亣宸ヨ祫銆佷骇</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>鎶�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/></w:rPr><w:t>鍋囧伐璧勪互</w:t></w:r><aml:annotation aml:id="1" w:type="Word.Bookmark.Start" w:name="_Hlk130463158"/><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鍏徃銆婂憳宸ユ墜鍐屻�嬬浉鍏宠瀹氭墽琛屻��</w:t></w:r><aml:annotation aml:id="1" w:type="Word.Bookmark.End"/></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:jc w:val="left"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>聽 </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>绗崄鏉�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鐢叉柟鍥犲伐浣滈渶瑕佸畨鎺掍箼鏂瑰欢闀垮伐浣滄椂闂存垨鑺傚亣鏃ュ姞鐝紝涔欐柟搴旀湇浠庣敳鏂圭殑缁熶竴瀹夋帓銆傚姞鐝伐璧勬寜鐓у叕鍙搞�婂憳宸ユ墜鍐屻�嬬浉鍏宠瀹氭墽琛屻��</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:jc w:val="left"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>聽 </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t> 绗崄涓�鏉�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>涔欐柟</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>闇�鍦�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>瀹為檯鍔犵彮鐨勫綋澶╁皢缁忚繃閮ㄩ棬缁忕悊鎵瑰噯鐨勫姞鐝敵璇蜂氦鍒颁汉浜嬮儴锛屽惁鍒欎笉璁″姞鐝�傦紙绱ф�ユ儏鍐甸櫎澶栵級</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="2"/><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:line="520" w:line-rule="exact"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鍏�佸姵鍔ㄦ姤閰�</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:jc w:val="left"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>    </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:color w:val="000000"/><w:spacing w:val="16"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>绗崄浜屾潯 </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鐢叉柟缁撳悎鏈崟浣嶇殑鐢熶骇缁忚惀鐗圭偣</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>鍙�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>缁忔祹鏁堢泭锛屼緷娉曠‘瀹氭湰鍗曚綅鐨勫伐璧勫垎閰嶅埗搴︺�備箼鏂圭殑宸ヨ祫锛屾寜鐓ф湰鍗曚綅鐨勫伐璧勫垎閰嶅埗搴︼紝缁撳悎涔欐柟鐨勫姵鍔ㄦ妧鑳姐�佸姵鍔ㄥ己搴︺�佸姵鍔�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>鏃堕暱</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>銆佸姵鍔ㄨ础鐚瓑纭畾銆�</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:snapToGrid w:val="off"/><w:spacing w:line="520" w:line-rule="exact"/><w:ind w:first-line="562" w:first-line-chars="200"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>绗崄涓夋潯</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>  涔欐柟鍦ㄦ硶瀹氬伐浣滄椂闂存垨渚濇硶绛捐鍔冲姩鍚堝悓绾﹀畾鐨勫伐浣滄椂闂村唴鎻愪緵浜嗘甯稿姵鍔紝鐢叉柟鍚戜箼鏂规敮浠樼殑宸ヨ祫涓嶅緱浣庝簬褰撳湴鏈�浣庡伐璧勬爣鍑嗐��</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:snapToGrid w:val="off"/><w:spacing w:line="520" w:line-rule="exact"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>    锛�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/></w:rPr><w:t>涓�锛�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/><w:u w:val="single"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/><w:u w:val="single"/><w:lang w:fareast="ZH-CN"/></w:rPr><w:t>鑷璁㈠悎鍚屾棩璧�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>姣忎釜</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/><w:u w:val="single"/></w:rPr><w:t>娆℃湀鐨�10-15鍙�  </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/></w:rPr><w:t>涓哄彂钖棩</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>銆�</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:snapToGrid w:val="off"/><w:spacing w:line="520" w:line-rule="exact"/><w:ind w:first-line="420"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t> 锛堜簩锛�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/></w:rPr><w:t>涔欐柟鍦ㄨ瘯鐢ㄦ湡鍐呯殑宸ヨ祫</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>涓猴細</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/><w:u w:val="single"/></w:rPr><w:t>   </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t> ${item.proSalary}   </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/><w:u w:val="single"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/></w:rPr><w:t>銆�</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:snapToGrid w:val="off"/><w:spacing w:line="520" w:line-rule="exact"/><w:ind w:left="1248" w:hanging="1248" w:hanging-chars="400"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>   锛堜笁锛夌粡鐢蹭箼鍙屾柟鍗忓晢涓�鑷达紝瀵逛箼鏂圭殑宸ヨ祫鎶ラ叕閫夋嫨浠�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.salarySelect}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏉℃纭畾锛�</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:snapToGrid w:val="off"/><w:spacing w:line="520" w:line-rule="exact"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>   A銆佷箼鏂圭殑宸ヨ祫鎶ラ叕鎸夌収鐢叉柟渚濇硶鍒跺畾鐨勮绔犲埗搴︿腑鐨勫唴閮ㄥ伐璧勫垎閰嶅姙娉曠‘瀹氾紝鏍规嵁涔欐柟鐨勫伐浣滃矖浣嶇‘瀹氬叾姣忔湀宸ヨ祫</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>銆�</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:snapToGrid w:val="off"/><w:spacing w:line="520" w:line-rule="exact"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/></w:rPr><w:t>  B銆佺敳鏂瑰涔欐柟瀹炶鍩烘湰宸ヨ祫鍜岀哗鏁堝伐璧勭浉缁撳悎鐨勫唴閮ㄥ伐璧勫垎閰嶅姙娉曪紝涔欐柟鐨勬敹鍏ュ寘鎷熀鏈伐璧勩�佽椁愩�佷氦閫氥�佺敓娲讳綇瀹跨瓑鍚勯」琛ュ姪锛�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/><w:lang w:fareast="ZH-CN"/></w:rPr><w:t>濡傛湁鍙樺姩</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/></w:rPr><w:t>鏍规嵁鍐呴儴宸ヨ祫鍒嗛厤鍔炴硶璋冩暣鍏跺伐璧勶紱</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>缁╂晥宸ヨ祫鏍规嵁涔欐柟鐨勫伐浣滀笟缁┿�佸姵鍔ㄦ垚鏋滃拰瀹為檯璐$尞鎸夌収鍐呴儴鍒嗛厤鍔炴硶鑰冩牳纭畾銆�</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:snapToGrid w:val="off"/><w:spacing w:line="520" w:line-rule="exact"/><w:ind w:first-line="640" w:first-line-chars="200"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="default"/><w:sz w:val="32"/><w:sz-cs w:val="32"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>C銆佺敳鏂瑰疄琛岃浠跺伐璧勫埗锛屼互鐢叉柟鎺ュ埌璁㈠崟鍙婂叕鍙哥敓浜ц鍒掞紝鎸夌収瀹氶鍜岃浠跺崟浠凤紝鏍规嵁涔欐柟瀹屾垚鐨勪笟缁╋紝鎸夋椂瓒抽鏀粯涔欐柟鐨勫伐璧勬姤閰��</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:jc w:val="left"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>銆�  </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t> 绗崄鍥涙潯 </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>涔欐柟闄ゅ熀鏈伐璧勪互澶栵紝涓氱哗鑰冩牳濂栭噾銆佸叏鍕ゅ閲戙�佸勾搴﹀閲戞牴鎹敳鏂圭殑缁忚惀鏁堢泭銆佷箼鏂圭殑宸ヤ綔琛ㄧ幇锛屾渶鍚庣敱鐢叉柟鑰冩牳纭畾绛夌骇鍚庝簣浠ュ彂鏀俱��</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:ind w:first-line="840" w:first-line-chars="300"/><w:jc w:val="left"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>涔欐柟濡傛灉瀵圭敳鏂瑰彂鏀剧殑宸ヨ祫鍙婂閲戣〃绀哄紓璁紝鍒欏簲鍦ㄥ伐璧勭粨娓呬箣鏃�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>鍚�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>10鏃ュ唴鍚戠敳鏂规彁鍑�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>涔﹂潰</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:fareast="ZH-CN"/></w:rPr><w:t>寮傝</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>锛岃秴杩囨椂闂村垯瑙嗕负鏃犲紓璁��</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:ind w:first-line="703" w:first-line-chars="250"/><w:jc w:val="left"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>绗崄</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>浜�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏉�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/></w:rPr><w:t>涔欐柟鎮g梾鎴栧洜闈炲洜宸ヨ礋浼ゆ湡闂寸殑鐨勫伐璧勫緟閬囨寜鐓у浗瀹舵硶寰嬫硶瑙勫強褰撳湴鏈夊叧瑙勫畾鎵ц銆�</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="2"/><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:line="520" w:line-rule="exact"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>涓冦�佺ぞ浼氫繚闄╁強鍏朵粬淇濋櫓绂忓埄寰呴亣</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:line="520" w:line-rule="exact"/><w:ind w:first-line="626" w:first-line-chars="200"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:color w:val="000000"/><w:spacing w:val="16"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:color w:val="000000"/><w:spacing w:val="16"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>绗崄</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:color w:val="000000"/><w:spacing w:val="16"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>鍏�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:color w:val="000000"/><w:spacing w:val="16"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏉�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:color w:val="000000"/><w:spacing w:val="16"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:color w:val="000000"/><w:spacing w:val="16"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鐢蹭箼鍙屾柟渚濇硶鍙傚姞绀句細淇濋櫓锛屾寜鏃剁即绾宠亴宸ュ吇鑰佷繚闄╋紝涔欐柟涓哄洟鍦鸿亴宸ワ紝鍥㈠満宸茬粡涓哄叾缂寸撼鍚勭被鍏昏�佷繚闄╃殑闄ゅ銆傚叾涓緷娉曞簲褰撶敱涔欐柟缂寸撼鐨勯儴鍒嗭紝鐢辩敳鏂逛粠涔欐柟宸ヨ祫鎶ラ叕涓唬鎵d唬缂淬��</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:jc w:val="left"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>銆�     </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>绗崄</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>涓�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏉� </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>涔欐柟鎮g梾鎴栭潪鍥犲伐璐熶激锛屽叾鐥呭亣宸ヨ祫鍜屽尰鐤楀緟閬囩瓑鎸夌収鐢叉柟渚濇硶鍒跺畾鐨勭浉鍏冲埗搴︽墽琛屻��</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:jc w:val="left"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>聽    </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>绗崄</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>鍏�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏉� </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/></w:rPr><w:t>涔欐柟鎮h亴涓氱梾鎴栧洜宸ヨ礋浼ょ殑寰呴亣锛屾寜鍥藉鍙�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>鑷不鍖�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="333333"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/></w:rPr><w:t>鏈夊叧瑙勫畾鎵ц銆�</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:line="520" w:line-rule="exact"/><w:ind w:first-line="626" w:first-line-chars="200"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>绗�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>鍗佷節</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏉�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鐢叉柟涓轰箼鏂规彁渚涘涓嬬鍒╁緟閬囷細</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>   </w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>${item.remark}</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>                                               </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>  </w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:line="520" w:line-rule="exact"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>                                             </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>銆�</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:line="520" w:line-rule="exact"/><w:jc w:val="center"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:color w:val="000000"/><w:spacing w:val="16"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鍏�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>銆�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:color w:val="000000"/><w:spacing w:val="16"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鍔冲姩淇濇姢銆佸姵鍔ㄦ潯浠跺拰鑱屼笟鍗卞闃叉姢</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:line="520" w:line-rule="exact"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:color w:val="000000"/><w:spacing w:val="16"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:line="520" w:line-rule="exact"/><w:ind w:first-line="614" w:first-line-chars="196"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:color w:val="000000"/><w:spacing w:val="16"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:color w:val="000000"/><w:spacing w:val="16"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/></w:rPr><w:t>绗簩鍗佹潯</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:color w:val="000000"/><w:spacing w:val="16"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:color w:val="000000"/><w:spacing w:val="16"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鐢叉柟鎸夌収鍥藉鍜岃嚜娌诲尯鏈夊叧鍔冲姩淇濇姢瑙勫畾鎻愪緵绗﹀悎鍥藉鍔冲姩鍗敓鏍囧噯鐨勫姵鍔ㄤ綔涓氬満鎵�锛屽垏瀹炰繚鎶や箼鏂瑰湪鐢熶骇宸ヤ綔涓殑瀹夊叏鍜屽仴搴枫�傚涔欐柟宸ヤ綔杩囩▼涓彲鑳戒骇鐢熻亴涓氱梾鍗卞锛岀敳鏂瑰簲濡傚疄鍛婄煡涔欐柟锛屽苟鎸夈�婅亴涓氱梾闃叉不娉曘�嬬殑瑙勫畾淇濇姢涔欐柟鐨勫仴搴峰強鍏剁浉鍏虫潈鐩娿��</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:line="520" w:line-rule="exact"/><w:ind w:first-line="626" w:first-line-chars="200"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:color w:val="000000"/><w:spacing w:val="16"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/></w:rPr><w:t>绗簩鍗�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:color w:val="000000"/><w:spacing w:val="16"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>涓�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:color w:val="000000"/><w:spacing w:val="16"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:highlight w:val="none"/></w:rPr><w:t>鏉�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:color w:val="000000"/><w:spacing w:val="16"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t> 鐢叉柟搴旀寜鍥藉鏈夊叧閮ㄩ棬瑙勫畾锛屾牴鎹箼鏂逛粠浜嬬殑宸ヤ綔宀椾綅锛屽彂缁欎箼鏂瑰繀瑕佺殑鍔充繚鐢ㄥ搧銆�</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:line="520" w:line-rule="exact"/><w:ind w:first-line="626" w:first-line-chars="200"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>绗簩鍗�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>浜�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏉�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t> 鐢叉柟鎸夌収鍥藉鍜岃嚜娌诲尯鐨勬湁鍏宠瀹氾紝鍋氬ソ鑱屽伐鐨勫姵鍔ㄤ繚鎶ゅ拰淇濆仴宸ヤ綔銆�</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:line="520" w:line-rule="exact"/><w:ind w:first-line="560" w:first-line-chars="200"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:line="520" w:line-rule="exact"/><w:jc w:val="center"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:color w:val="000000"/><w:spacing w:val="16"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:color w:val="000000"/><w:spacing w:val="16"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>涔濄�佺珵涓氫繚瀵嗛檺鍒跺拰鍩硅鏈嶅姟绾﹀畾锛堟棤姝ゆ儏褰㈢殑锛屽弻鏂逛笉鍙楁鏉℃绾︽潫锛�</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:line="520" w:line-rule="exact"/><w:ind w:first-line="540"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>绗簩鍗�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>涓�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏉�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t> 鐢蹭箼鍙屾柟鍗忓晢涓�鑷达紝绾﹀畾浠ヤ笅</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>   A   </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏉℃锛�</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:pageBreakBefore w:val="off"/><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="1"/></w:listPr><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:line="520" w:line-rule="exact"/><w:ind w:first-line="540"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:fareast="ZH-CN"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>涔欐柟宸ヤ綔娑夊強鐢叉柟鍟嗕笟绉樺瘑鍜屼笌鐭ヨ瘑浜ф潈鐩稿叧鐨勪繚瀵嗕簨椤圭殑锛岀敳鏂瑰彲浠ヤ簨鍓嶄笌</w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>涔欐柟</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>渚濇硶鍗忓晢绾﹀畾淇濆畧鍟嗕笟绉樺瘑</w:t></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:fareast="ZH-CN"/></w:rPr><w:t>銆�</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:pageBreakBefore w:val="off"/><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="1"/></w:listPr><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:line="520" w:line-rule="exact"/><w:ind w:first-line="540"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鐢辩敳鏂瑰嚭璧勫涔欐柟杩涜涓撲笟鎶�鏈煿璁紝骞惰姹備箼鏂瑰饱琛屾湇鍔℃湡鐨勶紝搴斿綋浜嬪墠寰佸緱涔欐柟鍚屾剰锛屽苟绛捐鍗忚锛屾槑纭弻鏂规潈鍒╀箟鍔°��</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="2"/><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:line="520" w:line-rule="exact"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鍗併�佸姵鍔ㄥ悎鍚岀殑瑙i櫎銆佺粓姝㈠拰缁忔祹琛ュ伩</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:ind w:first-line="703" w:first-line-chars="250"/><w:jc w:val="left"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>绗簩鍗�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>鍥�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏉� </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>涔欐柟鏈変笅鍒楁儏褰箣涓�鐨勶紝鐢叉柟鍙珛鍗宠В闄ゆ湰鍔冲姩鍚堝悓锛�</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="2"/></w:listPr><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:ind w:left="700" w:first-line="0" w:first-line-chars="0"/><w:jc w:val="left"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>涔欐柟鍦ㄨ瘯鐢ㄦ湡闂达紝缁忎笟缁╄�冩牳璇勫涓轰笉鍚堟牸鐨勶紱</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:listPr><w:ilvl w:val="0"/><w:ilfo w:val="2"/></w:listPr><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:ind w:left="700" w:first-line="0" w:first-line-chars="0"/><w:jc w:val="left"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>涔欐柟琚煡瀹炲湪搴旇仒鏃跺悜鐢叉柟鎻愪緵</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>铏氬亣</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>涓汉璧勬枡锛屽寘鎷絾涓嶉檺浜庯細绂昏亴璇佹槑銆佽韩浠借瘉鏄庛�佹埛绫嶈瘉鏄庛�佸鍘嗚瘉鏄庛�佷綋妫�璇佹槑銆佸伐浣滅粡鍘嗐�佸搴垚鍛樺拰涓昏绀句細鍏崇郴绛夎祫鏂�;</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:jc w:val="left"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>聽 聽3銆佷弗閲嶈繚鍙嶆湰</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>鍗曚綅</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鐨勫悇椤硅绔犲埗搴︼紙鍏蜂綋鎯呭舰鍦ㄣ�婂憳宸ユ墜鍐屻�嬪凡鍒楁槑锛�;</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:jc w:val="left"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:color w:val="000000"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:shd w:val="clear" w:color="auto" w:fill="FFFFFF"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>     4銆�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:color w:val="000000"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:shd w:val="clear" w:color="auto" w:fill="FFFFFF"/></w:rPr><w:t>涓ラ噸澶辫亴锛岃惀绉佽垶寮婏紝缁�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:color w:val="000000"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:shd w:val="clear" w:color="auto" w:fill="FFFFFF"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>鏈�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:color w:val="000000"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:shd w:val="clear" w:color="auto" w:fill="FFFFFF"/></w:rPr><w:t>鍗曚綅閫犳垚閲嶅ぇ鎹熷鐨勶紙</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鍏蜂綋鎯呭舰鍦ㄣ�婂憳宸ユ墜鍐屻�嬪凡鍒楁槑</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:color w:val="000000"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:shd w:val="clear" w:color="auto" w:fill="FFFFFF"/></w:rPr><w:t>锛�</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:jc w:val="left"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:color w:val="000000"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:shd w:val="clear" w:color="auto" w:fill="FFFFFF"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:color w:val="000000"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:shd w:val="clear" w:color="auto" w:fill="FFFFFF"/></w:rPr><w:t>     5銆�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:color w:val="000000"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:shd w:val="clear" w:color="auto" w:fill="FFFFFF"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>姣忔湀鏃犳晠</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:color w:val="000000"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:shd w:val="clear" w:color="auto" w:fill="FFFFFF"/></w:rPr><w:t>璇峰亣</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:color w:val="000000"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:shd w:val="clear" w:color="auto" w:fill="FFFFFF"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>瓒呰繃</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:color w:val="000000"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:shd w:val="clear" w:color="auto" w:fill="FFFFFF"/></w:rPr><w:t>3娆′互涓婏紙鍚�3娆★級</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:color w:val="000000"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:shd w:val="clear" w:color="auto" w:fill="FFFFFF"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>鐨�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:color w:val="000000"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:shd w:val="clear" w:color="auto" w:fill="FFFFFF"/></w:rPr><w:t>銆�</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:jc w:val="left"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:color w:val="000000"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:shd w:val="clear" w:color="auto" w:fill="FFFFFF"/></w:rPr><w:t>    </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>绗簩鍗�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>浜�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏉�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏈変笅鍒楁儏褰箣涓�锛屾湰鍚堝悓鑷缁堟锛�</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:jc w:val="left"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>聽 聽 1</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:fareast="ZH-CN"/></w:rPr><w:t>銆�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鍚堝悓鏈熸弧涓斿弻鏂逛笉鑳藉氨鍔冲姩鍚堝悓缁杈炬垚涓�鑷寸殑;</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:jc w:val="left"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>聽 聽 2</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:fareast="ZH-CN"/></w:rPr><w:t>銆�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鐢叉柟缁忚惀鐨勭姸鍐典笉浣�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>闇�瑁佸憳</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鎴栧凡鐮翠骇鍏抽棴;</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:jc w:val="left"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>聽 聽 3</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:fareast="ZH-CN"/></w:rPr><w:t>銆�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>涔欐柟搴斿緛鍏ヤ紞鎴栬�呭饱琛屽浗瀹惰瀹氱殑鍏朵粬娉曞畾</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>鍏皯</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>涔夊姟鐨�;</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:jc w:val="left"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>聽 聽 4</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:fareast="ZH-CN"/></w:rPr><w:t>銆�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>娉曞緥娉曡瑙勫畾鐨勫叾浠栨儏褰€��</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:jc w:val="left"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>聽 </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>聽 绗簩鍗�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>鍏�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏉�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏈悎鍚屾湡婊″墠锛岀敳涔欏弻鏂瑰簲鎸夌収鏈夊叧瑙勫畾灏卞悎鍚岀画璁㈡垨鑰呯粓姝簨瀹�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>鎻愬嚭</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鑷繁鐨勬剰瑙侊紝骞跺姙鐞嗙浉鍏充功闈㈡墜缁��</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:jc w:val="left"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>聽 聽 </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>绗簩鍗�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>涓�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏉�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>涔欐柟鏈彁鍓�30澶╁悜鐢叉柟鎻愬嚭杈炶亴</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>鎶ュ憡</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鎴栨搮鑷鑱岀殑锛�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>骞�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鐢辨缁欑敳鏂归�犳垚缁忔祹鎹熷け鐨勶紝涔欐柟搴旀壙鎷呯浉搴旂殑璧斿伩璐d换銆�</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:line="520" w:line-rule="exact"/><w:ind w:first-line="562" w:first-line-chars="200"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>绗簩鍗�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>鍏�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏉�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t> 涔欐柟搴斿綋</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>鍦�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鍚堝悓缁堟涔嬫棩</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>鍓�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>3鏃ュ唴锛屽姙鐞嗗伐浣滀氦鎺ャ�傚簲褰撴敮浠樼粡娴庤ˉ鍋跨殑锛屽湪鍔炵粨宸ヤ綔浜ゆ帴鏃舵敮浠樸��</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:pageBreakBefore w:val="off"/><w:tabs><w:tab w:val="left" w:pos="559"/></w:tabs><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:line="520" w:line-rule="exact"/><w:ind w:first-line="626" w:first-line-chars="200"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="auto"/><w:spacing w:val="16"/><w:kern w:val="44"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:fareast="ZH-CN"/></w:rPr><w:tab/></w:r><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="auto"/><w:spacing w:val="16"/><w:kern w:val="44"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>            </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:b-cs/><w:color w:val="auto"/><w:spacing w:val="16"/><w:kern w:val="44"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鍗佷竴銆�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>缁忔祹杩藉伩</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:ind w:first-line="626" w:first-line-chars="200"/><w:jc w:val="left"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>绗�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>浜屽崄涔�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏉�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>涔欐柟鏈変笅鍒楁儏褰箣涓�鐨勶紝鐢叉柟浠ョ哗鏁堣�冩牳</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>涓轰緷鎹�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏈夋潈鍚戜箼鏂硅拷鍋匡細</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:jc w:val="left"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>聽 聽 銆�銆�1</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:fareast="ZH-CN"/></w:rPr><w:t>銆�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>渚濈収娉曞緥娉曡绾﹀畾鍜屽悎鍚岀害瀹氫箼鏂瑰簲鎵挎媴鐨勮禂鍋胯矗浠�;</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:jc w:val="left"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>聽 聽 銆�銆�2</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:fareast="ZH-CN"/></w:rPr><w:t>銆�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>杩濆弽鐢叉柟渚濇硶鍒惰鐨勮绔犲埗搴﹀苟閫犳垚缁忔祹鎹熷け;</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:jc w:val="left"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>聽 聽 銆�銆�3銆佸伐浣滃け璇粰鐢叉柟閫犳垚浜嗙粡娴庢崯澶�;</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:jc w:val="left"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>聽 聽 銆�銆�4銆佸簲鍚戠敳鏂规敮浠樼殑鍏跺畠娆鹃」;</w:t></w:r></w:p><w:p><w:pPr><w:pageBreakBefore w:val="off"/><w:widowControl/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:before="100" w:before-autospacing="on" w:after="180" w:line="520" w:line-rule="exact"/><w:jc w:val="left"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b-cs/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:line="520" w:line-rule="exact"/><w:ind w:first-line="470" w:first-line-chars="150"/><w:jc w:val="center"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鍗佷簩銆佸姵鍔ㄤ簤璁鐞嗗強鍏跺畠</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:adjustRightInd w:val="off"/><w:spacing w:line="520" w:line-rule="exact"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>    绗笁鍗佹潯</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t> 鐢蹭箼鍙屾柟鍥犲饱琛屾湰鍚堝悓鍙戠敓浜夎锛屼箼鏂瑰彲浠ュ悜鐢叉柟鍔冲姩浜夎璋冭В濮斿憳浼氱敵璇疯皟瑙o紱璋冭В涓嶆垚鐨勶紝鍙互鍚戝綋鍦板姵鍔ㄤ簤璁徊瑁佸鍛樹細鐢宠浠茶銆傚浠茶瑁佸喅涓嶆湇鐨勶紝鍙互鑷敹鍒颁徊瑁佽鍐充功鍚庝緷鍚戝綋鍦颁汉姘戞硶闄㈡彁璧疯瘔璁笺��</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:line="520" w:line-rule="exact"/><w:jc w:val="both"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>    绗笁鍗�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>涓�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏉� 鏈悎鍚岀殑闄勪欢濡備笅锛�</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:line="520" w:line-rule="exact"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>1锛氥�婂憳宸ユ墜鍐屻��</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>涓�鏈�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:u w:val="single"/></w:rPr><w:t>                                                                                                            </w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:line="520" w:line-rule="exact"/><w:ind w:first-line="626" w:first-line-chars="200"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>绗笁鍗�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>浜�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏉�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t> 涔欐柟鑷湰鍚堝悓绛惧瓧涔嬫棩绛炬敹銆婂憳宸ユ墜鍐屻�嬶紝骞跺凡鐭ユ檽銆婂憳宸ユ墜鍐屻�嬪叏閮ㄥ唴瀹广��</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:pageBreakBefore w:val="off"/><w:kinsoku/><w:wordWrap/><w:overflowPunct/><w:topLinePunct w:val="off"/><w:autoSpaceDE/><w:autoSpaceDN/><w:spacing w:line="520" w:line-rule="exact"/><w:textAlignment w:val="auto"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>   绗笁鍗�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>涓�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:b/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏉�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t> 鏈�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>鍚堝悓</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鑷敳涔欏弻鏂圭</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>璁�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>涔嬫棩璧风敓鏁堛�傛湰鍚堝悓涓�寮忎袱浠斤紝鐢蹭箼鍙屾柟鍚勬墽涓�浠姐��</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:spacing w:line="440" w:line-rule="exact"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:spacing w:line="440" w:line-rule="exact"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:spacing w:line="440" w:line-rule="exact"/><w:ind w:first-line="511" w:first-line-chars="164"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:spacing w:line="440" w:line-rule="exact"/><w:ind w:first-line="624" w:first-line-chars="200"/><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鐢叉柟锛氾紙鍏�   绔狅級    </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>   涔欐柟锛�</w:t></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a9"/><w:wordWrap w:val="off"/><w:spacing w:line="440" w:line-rule="exact"/><w:ind w:right="1440" w:first-line="400"/><w:jc w:val="center"/><w:rPr><w:rFonts w:ascii="浠垮畫" w:h-ansi="浠垮畫" w:fareast="浠垮畫" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>骞� </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t> 鏈� </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏃�           </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>    </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>骞�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t>  </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t> 鏈�</w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/><w:lang w:val="EN-US" w:fareast="ZH-CN"/></w:rPr><w:t> </w:t></w:r><w:r><w:rPr><w:rFonts w:ascii="瀹嬩綋" w:h-ansi="瀹嬩綋" w:fareast="瀹嬩綋" w:cs="瀹嬩綋" w:hint="fareast"/><w:spacing w:val="16"/><w:sz w:val="28"/><w:sz-cs w:val="28"/></w:rPr><w:t>鏃�</w:t></w:r></w:p><w:sectPr><w:ftr w:type="even"><w:p><w:pPr><w:pStyle w:val="a3"/><w:framePr w:wrap="around" w:hanchor="margin" w:vanchor="text" w:x-align="center" w:y="0"/><w:rPr><w:rStyle w:val="a7"/></w:rPr></w:pPr><w:r><w:fldChar w:fldCharType="begin"/></w:r><w:r><w:rPr><w:rStyle w:val="a7"/></w:rPr><w:instrText>PAGE  </w:instrText></w:r><w:r><w:fldChar w:fldCharType="separate"/></w:r><w:r><w:fldChar w:fldCharType="end"/></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a3"/></w:pPr></w:p></w:ftr><w:ftr w:type="odd"><w:p><w:pPr><w:pStyle w:val="a3"/><w:framePr w:wrap="around" w:hanchor="margin" w:vanchor="text" w:x-align="center" w:y="0"/><w:rPr><w:rStyle w:val="a7"/></w:rPr></w:pPr><w:r><w:fldChar w:fldCharType="begin"/></w:r><w:r><w:rPr><w:rStyle w:val="a7"/></w:rPr><w:instrText>PAGE  </w:instrText></w:r><w:r><w:fldChar w:fldCharType="separate"/></w:r><w:r><w:rPr><w:rStyle w:val="a7"/><w:lang/></w:rPr><w:t>2</w:t></w:r><w:r><w:fldChar w:fldCharType="end"/></w:r></w:p><w:p><w:pPr><w:pStyle w:val="a3"/></w:pPr></w:p></w:ftr><w:pgSz w:w="10319" w:h="14572"/><w:pgMar w:top="720" w:right="720" w:bottom="720" w:left="720" w:header="851" w:footer="992" w:gutter="0"/><w:cols w:space="720"/><w:titlePg/><w:docGrid w:type="lines" w:line-pitch="312"/></w:sectPr></wx:sect></w:body></w:wordDocument>
\ No newline at end of file

--
Gitblit v1.9.3