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 <= #{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 < 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 <= #{req.endMonth}
+ </if>
+ <if test="req.startDate != null">
+ and t1.create_time >= #{req.startDate}
+ </if>
+ <if test="req.endDate != null">
+ and t1.create_time <= #{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 <= 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 <= 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 >= date_format(#{c.createdAtStart},'%Y-%m-%d hh:mm:ss')
+ and pr.created_at >= str_to_date(#{c.createdAtStart}, '%Y-%m-%d')
</if>
<if test="c.createdAtEnd != null and c.createdAtEnd != ''">
- and pr.created_at <= date_format(#{c.createdAtEnd},'%Y-%m-%d hh:mm:ss')
+ and pr.created_at < 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 >= DATE_FORMAT(#{qualityInspect.entryDateStart},'%Y-%m-%d')
@@ -25,6 +25,7 @@
<if test="qualityInspect.entryDateEnd != null and qualityInspect.entryDateEnd != '' ">
AND check_time <= 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 >= date_format(#{invoiceRegistrationProductDto.invoiceDateStart}, '%Y-%m-%d')
+ AND T3.invoice_date >= str_to_date(#{invoiceRegistrationProductDto.invoiceDateStart}, '%Y-%m-%d')
</if>
<if test="invoiceRegistrationProductDto.invoiceDateEnd != null and invoiceRegistrationProductDto.invoiceDateEnd != ''">
- AND T3.invoice_date <= date_format(#{invoiceRegistrationProductDto.invoiceDateEnd}, '%Y-%m-%d')
+ AND T3.invoice_date < 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 >= DATE_FORMAT(#{req.invoiceDateStart},'%Y-%m-%d')
</if>
<if test="req.invoiceDateEnd != null and req.invoiceDateEnd != '' ">
- AND T1.invoice_date <= DATE_FORMAT(#{req.invoiceDateEnd},'%Y-%m-%d')
+ AND T1.invoice_date <= 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)) > 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 <= 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